From a13c216feefdd50205f44ca5809a29dd0b32131c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Euzenat?= <Jerome.Euzenat@inria.fr>
Date: Sun, 8 Feb 2009 14:15:47 +0000
Subject: [PATCH] - updated in oldstyle metadata

---
 .../renderer/XMLMetadataRendererVisitor.java  | 86 ++++++++++++++++---
 1 file changed, 76 insertions(+), 10 deletions(-)

diff --git a/src/fr/inrialpes/exmo/align/impl/renderer/XMLMetadataRendererVisitor.java b/src/fr/inrialpes/exmo/align/impl/renderer/XMLMetadataRendererVisitor.java
index 88e8e85e..c2be1f34 100644
--- a/src/fr/inrialpes/exmo/align/impl/renderer/XMLMetadataRendererVisitor.java
+++ b/src/fr/inrialpes/exmo/align/impl/renderer/XMLMetadataRendererVisitor.java
@@ -21,6 +21,7 @@
 package fr.inrialpes.exmo.align.impl.renderer; 
 
 import java.util.Enumeration;
+import java.util.Hashtable;
 import java.io.PrintWriter;
 
 import org.semanticweb.owl.align.Alignment;
@@ -30,6 +31,10 @@ import org.semanticweb.owl.align.Parameters;
 import org.semanticweb.owl.align.Cell;
 import org.semanticweb.owl.align.Relation;
 
+import fr.inrialpes.exmo.align.impl.Annotations;
+import fr.inrialpes.exmo.align.impl.BasicAlignment;
+import fr.inrialpes.exmo.align.impl.BasicParameters;
+
 /**
  * Renders an alignment in its RDF format
  *
@@ -37,11 +42,13 @@ import org.semanticweb.owl.align.Relation;
  * @version $Id$ 
  */
 
-public class XMLMetadataRendererVisitor implements AlignmentVisitor
-{
+public class XMLMetadataRendererVisitor implements AlignmentVisitor {
     
     PrintWriter writer = null;
+    Alignment alignment = null;
     boolean embedded = false; // if the output is XML embeded in a structure
+    Hashtable<String,String> nslist = null;
+    boolean newstyle = false;
 
     public XMLMetadataRendererVisitor( PrintWriter writer ){
 	this.writer = writer;
@@ -53,9 +60,51 @@ public class XMLMetadataRendererVisitor implements AlignmentVisitor
     };
 
     public void visit( Alignment align ) throws AlignmentException {
-	if ( embedded == false )
-	    writer.print("<?xml version='1.0' encoding='utf-8' standalone='yes'?>\n");
-	writer.println("<Alignment>");
+	String extensionString = "";
+	alignment = align;
+	nslist = new Hashtable<String,String>();
+	nslist.put(Annotations.ALIGNNS,"align");
+	nslist.put("http://www.w3.org/1999/02/22-rdf-syntax-ns#","rdf");
+	nslist.put("http://www.w3.org/2001/XMLSchema#","xsd");
+	//nslist.put("http://www.omwg.org/TR/d7/ontology/alignment","omwg");
+	// Get the keys of the parameter
+	int gen = 0;
+	for ( Object ext : ((BasicParameters)align.getExtensions()).getValues() ){
+	    String prefix = ((String[])ext)[0];
+	    String name = ((String[])ext)[1];
+	    String tag = (String)nslist.get(prefix);
+	    if ( tag == null ) {
+		tag = "ns"+gen++;
+		nslist.put( prefix, tag );
+	    }
+	    if ( tag.equals("align") ) { tag = name; }
+	    else { tag += ":"+name; }
+	    extensionString += "  <"+tag+">"+((String[])ext)[2]+"</"+tag+">\n";
+	}
+	if ( embedded == false ) {
+	    writer.print("<?xml version='1.0' encoding='utf-8");
+	    writer.print("' standalone='no'?>\n");
+	}
+	writer.print("<rdf:RDF xmlns='"+Annotations.ALIGNNS+"'");
+	for ( Enumeration e = nslist.keys() ; e.hasMoreElements(); ) {
+	    String k = (String)e.nextElement();
+	    writer.print("\n         xmlns:"+nslist.get(k)+"='"+k+"'");
+	}
+	if ( align instanceof BasicAlignment ) {
+	    for ( Enumeration e = ((BasicAlignment)align).getXNamespaces().getNames() ; e.hasMoreElements(); ){
+	    String label = (String)e.nextElement();
+	    if ( !label.equals("rdf") && !label.equals("xsd")
+		 && !label.equals("<default>") )
+		writer.print("\n         xmlns:"+label+"='"+((BasicAlignment)align).getXNamespace( label )+"'");
+	    }
+	}
+	writer.print(">\n");
+	writer.print("<Alignment");
+	String idext = align.getExtension( Annotations.ALIGNNS, Annotations.ID );
+	if ( idext != null ) {
+	    writer.print(" rdf:about=\""+idext+"\"");
+	}
+	writer.print(">\n  <xml>yes</xml>\n");
 	writer.print("  <level>");
 	writer.print( align.getLevel() );
 	writer.print("</level>\n  <type>");
@@ -72,12 +121,29 @@ public class XMLMetadataRendererVisitor implements AlignmentVisitor
 	writer.print("  <uri2>");
 	writer.print( align.getOntology2URI().toString() );
 	writer.print("</uri2>\n");
-	Parameters extensions = align.getExtensions();
-	for ( Enumeration e = extensions.getNames(); e.hasMoreElements();) {
-	    String tag = (String)e.nextElement();
-	    writer.println("  <"+tag+">"+extensions.getParameter(tag)+"</"+tag+">");
+	writer.print(extensionString);
+	if ( newstyle ){
+	    writer.print("  <onto1>\n    <Ontology");
+	    if ( align.getOntology1URI() != null ) {
+		writer.print(" rdf:about=\""+align.getOntology1URI()+"\"");
+	    }
+	    writer.print(">\n      <location>"+align.getFile1()+"</location>");
+	    if ( align instanceof BasicAlignment && ((BasicAlignment)align).getOntologyObject1().getFormalism() != null ) {
+		writer.print("\n      <formalism>\n        <Formalism align:name=\""+((BasicAlignment)align).getOntologyObject1().getFormalism()+"\" align:uri=\""+((BasicAlignment)align).getOntologyObject1().getFormURI()+"\"/>\n      </formalism>");
+	    }
+	    writer.print("\n    </Ontology>\n  </onto1>\n");
+	    writer.print("  <onto2>\n    <Ontology");
+	    if ( align.getOntology2URI() != null ) {
+		writer.print(" rdf:about=\""+align.getOntology2URI()+"\"");
+	    }
+	    writer.print(">\n      <location>"+align.getFile2()+"</location>");
+	    if ( align instanceof BasicAlignment && ((BasicAlignment)align).getOntologyObject2().getFormalism() != null ) {
+		writer.print("\n      <formalism>\n        <Formalism align:name=\""+((BasicAlignment)align).getOntologyObject2().getFormalism()+"\" align:uri=\""+((BasicAlignment)align).getOntologyObject2().getFormURI()+"\"/>\n      </formalism>");
+	    }
+	    writer.print("\n    </Ontology>\n  </onto2>\n");
 	}
-	writer.println("</Alignment>");
+	writer.print("</Alignment>\n");
+	writer.print("</rdf:RDF>\n");
     }
 
     public void visit( Cell c ) {}
-- 
GitLab