From 499919fedec300c4deaba8809307634caaf06c88 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Euzenat?= <Jerome.Euzenat@inria.fr>
Date: Tue, 11 Oct 2005 07:58:02 +0000
Subject: [PATCH] - added provision for extensions (extra annotations in the
 alignments)

---
 .../impl/renderer/RDFRendererVisitor.java     | 10 ++++---
 .../exmo/align/parser/AlignmentParser.java    | 26 ++++++++++---------
 src/org/semanticweb/owl/align/Alignment.java  |  8 ++++++
 3 files changed, 28 insertions(+), 16 deletions(-)

diff --git a/src/fr/inrialpes/exmo/align/impl/renderer/RDFRendererVisitor.java b/src/fr/inrialpes/exmo/align/impl/renderer/RDFRendererVisitor.java
index 7465fd6d..c696a3d9 100644
--- a/src/fr/inrialpes/exmo/align/impl/renderer/RDFRendererVisitor.java
+++ b/src/fr/inrialpes/exmo/align/impl/renderer/RDFRendererVisitor.java
@@ -68,16 +68,18 @@ public class RDFRendererVisitor implements AlignmentVisitor
 	alignment = align;
 	writer.print("<?xml version='1.0' encoding='utf-8");
 	writer.print("' standalone='no'?>\n");
-	writer.print("<rdf:RDF xmlns='http://knowledgeweb.semanticweb.org/heterogeneity/alignment'\n         xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'\n         xmlns:xsd='http://www.w3.org/2001/XMLSchema#'>\n");
+	writer.print("<rdf:RDF xmlns='http://knowledgeweb.semanticweb.org/heterogeneity/alignment'\n         xml:base='http://knowledgeweb.semanticweb.org/heterogeneity/alignment'\n         xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'\n         xmlns:xsd='http://www.w3.org/2001/XMLSchema#'>\n");
 	writer.print("<Alignment>\n  <xml>yes</xml>\n");
 	writer.print("  <level>");
 	writer.print( align.getLevel() );
 	writer.print("</level>\n  <type>");
 	writer.print( align.getType() );
 	writer.print("</type>\n");
-	writer.print("  <method>");
-	writer.print( align.getClass().getName());
-	writer.print("</method>\n");
+	// Get the keys of the parameter
+	for( Enumeration e = align.getExtensions().getNames() ; e.hasMoreElements() ; ){
+	    String tag = (String)e.nextElement();
+	    writer.print("  <"+tag+">"+align.getExtension(tag)+"</"+tag+">\n");
+	}
 	try {
 	    if ( align.getFile1() != null )
 		writer.print("  <onto1>"+align.getFile1().toString()+"</onto1>\n");
diff --git a/src/fr/inrialpes/exmo/align/parser/AlignmentParser.java b/src/fr/inrialpes/exmo/align/parser/AlignmentParser.java
index d9733ee3..b60767ef 100644
--- a/src/fr/inrialpes/exmo/align/parser/AlignmentParser.java
+++ b/src/fr/inrialpes/exmo/align/parser/AlignmentParser.java
@@ -1,6 +1,5 @@
 /*
  * $Id$
- * MULT
  *
  * Copyright (C) 2003-2005 INRIA Rhône-Alpes.
  *
@@ -152,6 +151,12 @@ public class AlignmentParser extends DefaultHandler {
      * XML Parser
 1     */
     protected SAXParser parser = null;
+
+    /**
+     * The parsing level, if equal to 2 we are in the Alignment
+     * and can find metadata
+     */
+    protected int parselevel = 0;
     
     /** 
      * Creates an XML Parser.
@@ -194,6 +199,7 @@ public class AlignmentParser extends DefaultHandler {
     public void startElement(String namespaceURI, String pName, String qname, Attributes atts) throws SAXException {
 	if(debugMode > 2) 
 	    System.err.println("startElement AlignmentParser : " + pName);
+	parselevel++;
 	if(namespaceURI.equals("http://knowledgeweb.semanticweb.org/heterogeneity/alignment"))  {
 	    try {
 		if (pName.equals("relation")) {
@@ -259,7 +265,7 @@ public class AlignmentParser extends DefaultHandler {
 	    if ( !pName.equals("RDF") ) {
 		throw new SAXException("[AlignmentParser] unknown element name: "+pName); };
 	} else {
-	    throw new SAXException("[AlignmentParser] Unknown namespace : "+namespaceURI);
+	    if ( parselevel != 2 ) throw new SAXException("[AlignmentParser] Unknown namespace : "+namespaceURI);
 	}
     }
 
@@ -326,20 +332,12 @@ public class AlignmentParser extends DefaultHandler {
 		} else if (pName.equals("map")) {
 		} else if (pName.equals("uri1")) {
 		    onto1 = (OWLOntology)ontologies.get( content );
-		    //try { alignment.setFile1( new URI( content ) );
-		    //} catch (Exception e) {e.printStackTrace();};
 		} else if (pName.equals("uri2")) {
 		    onto2 = (OWLOntology)ontologies.get( content );
-		    //try { alignment.setFile2( new URI( content ) );
-		    //} catch (Exception e) {e.printStackTrace();};
 		} else if (pName.equals("onto2")) {
-		    // If the ontology is already loaded.
-		    //onto2 = (OWLOntology)ontologies.get( content );
-		    //JE: these are URI, I do not try to locate!
 		    try { alignment.setFile2( new URI( content ) );
 		    } catch (Exception e) {e.printStackTrace();}
 		} else if (pName.equals("onto1")) {
-		    //onto1 = (OWLOntology)ontologies.get( content );
 		    try { alignment.setFile1( new URI( content ) );
 		    } catch (Exception e) {e.printStackTrace();}
 		} else if (pName.equals("type")) {
@@ -351,7 +349,8 @@ public class AlignmentParser extends DefaultHandler {
 		    //	{ throw new SAXException("Non parseable alignment"); }
 		} else if (pName.equals("Alignment")) {
 		} else {
-		    if ( debugMode > 0 ) System.err.println("[AlignmentParser] Unknown element name : "+pName);
+		    if ( debugMode > 0 )
+			System.err.println("[AlignmentParser] Unknown element name : "+pName);
 		    //throw new SAXException("[AlignmentParser] Unknown element name : "+pName);
 		};
 	    } catch ( AlignmentException e ) { throw new SAXException("[AlignmentParser] OWLException raised"); };
@@ -359,8 +358,11 @@ public class AlignmentParser extends DefaultHandler {
 	    if ( !pName.equals("RDF") ) {
 		throw new SAXException("[AlignmentParser] unknown element name: "+pName); };
 	} else {
-	    throw new SAXException("[AlignmentParser] Unknown namespace : "+namespaceURI);
+	    if ( parselevel == 2 ){
+		alignment.setExtension( pName, content );
+	    } else throw new SAXException("[AlignmentParser] Unknown namespace : "+namespaceURI);
 	}
+	parselevel--;
     } //end endElement
     
     /** Can be used for loading the ontology if it is not available **/
diff --git a/src/org/semanticweb/owl/align/Alignment.java b/src/org/semanticweb/owl/align/Alignment.java
index 215d61dd..535b1029 100644
--- a/src/org/semanticweb/owl/align/Alignment.java
+++ b/src/org/semanticweb/owl/align/Alignment.java
@@ -134,6 +134,14 @@ public interface Alignment
     public Set getAlignCells1( Object ob ) throws AlignmentException;
     public Set getAlignCells2( Object ob ) throws AlignmentException;
 
+    /**
+     * Extensions are a way to read and add other information (metadata)
+     * to the alignment structure itself.
+     */
+    public Parameters getExtensions();
+    public String getExtension( String label );
+    public void setExtension( String label, String value );
+
     public Enumeration getElements();
     public int nbCells();
 
-- 
GitLab