From c8f8aea874088756d6745d87e1868803ba36a6eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Euzenat?= <Jerome.Euzenat@inria.fr> Date: Sat, 19 Jan 2008 02:00:15 +0000 Subject: [PATCH] - back to previous renderer version - added unused embryo code of a rewritten renderer - corrected errors in namespace header --- .../impl/renderer/RDFRendererVisitor.java | 148 ++++++++++++++++-- 1 file changed, 137 insertions(+), 11 deletions(-) diff --git a/src/fr/inrialpes/exmo/align/impl/renderer/RDFRendererVisitor.java b/src/fr/inrialpes/exmo/align/impl/renderer/RDFRendererVisitor.java index f2eb264a..0d92dd3c 100644 --- a/src/fr/inrialpes/exmo/align/impl/renderer/RDFRendererVisitor.java +++ b/src/fr/inrialpes/exmo/align/impl/renderer/RDFRendererVisitor.java @@ -22,6 +22,7 @@ package fr.inrialpes.exmo.align.impl.renderer; import java.util.Enumeration; import java.io.PrintWriter; +//import java.util.Set; import org.semanticweb.owl.align.Alignment; import org.semanticweb.owl.align.AlignmentVisitor; @@ -33,7 +34,7 @@ import org.semanticweb.owl.align.Relation; // using the namespace facility of BasicAlignment import fr.inrialpes.exmo.align.impl.BasicAlignment; -//import org.omwg.mediation.language.export.omwg.OmwgSyntaxFormat; +import org.omwg.mediation.language.export.omwg.OmwgSyntaxFormat; import org.omwg.mediation.language.export.rdf.RdfSyntaxFormat; import org.omwg.mediation.parser.alignment.NamespaceDefs; import org.omwg.mediation.language.objectmodel.api.Expression; @@ -42,6 +43,41 @@ import org.omwg.mediation.language.objectmodel.api.Expression; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ModelFactory; +// Instead +import org.omwg.mediation.language.objectmodel.api.Arity; +import org.omwg.mediation.language.objectmodel.api.AttributeExpr; +import org.omwg.mediation.language.objectmodel.api.ClassExpr; +import org.omwg.mediation.language.objectmodel.api.ComplexExpression; +import org.omwg.mediation.language.objectmodel.api.Expression; +import org.omwg.mediation.language.objectmodel.api.ExpressionDefinition; +import org.omwg.mediation.language.objectmodel.api.IRI; +import org.omwg.mediation.language.objectmodel.api.Id; +import org.omwg.mediation.language.objectmodel.api.InstanceExpr; +import org.omwg.mediation.language.objectmodel.api.Level; +import org.omwg.mediation.language.objectmodel.api.MappingDocument; +import org.omwg.mediation.language.objectmodel.api.MappingRule; +import org.omwg.mediation.language.objectmodel.api.OntologyId; +import org.omwg.mediation.language.objectmodel.api.Path; +import org.omwg.mediation.language.objectmodel.api.RelationExpr; +import org.omwg.mediation.language.objectmodel.api.SimpleValue; +import org.omwg.mediation.language.objectmodel.api.TransfService; +import org.omwg.mediation.language.objectmodel.api.ComplexExpression.Operator; +import org.omwg.mediation.language.objectmodel.api.MappingRule.Direction; +import org.omwg.mediation.language.objectmodel.api.RelationExpr.RelationId; +import org.omwg.mediation.language.objectmodel.api.conditions.AttributeCondition; +import org.omwg.mediation.language.objectmodel.api.conditions.AttributeOccurenceCondition; +import org.omwg.mediation.language.objectmodel.api.conditions.AttributeTypeCondition; +import org.omwg.mediation.language.objectmodel.api.conditions.AttributeValueCondition; +import org.omwg.mediation.language.objectmodel.api.conditions.CoDomainRelationCondition; +import org.omwg.mediation.language.objectmodel.api.conditions.Condition; +import org.omwg.mediation.language.objectmodel.api.conditions.DomainAttributeCondition; +import org.omwg.mediation.language.objectmodel.api.conditions.DomainRelationCondition; +import org.omwg.mediation.language.objectmodel.api.conditions.Restriction; +import org.omwg.mediation.language.objectmodel.api.conditions.TypeCondition; +import org.omwg.mediation.parser.alignment.ComparatorMapping; +import org.omwg.mediation.parser.alignment.OperatorMapping; +import org.omwg.mediation.parser.rdf.Omwg; + /** * Renders an alignment in its RDF format * @@ -55,8 +91,8 @@ public class RDFRendererVisitor implements AlignmentVisitor PrintWriter writer = null; Alignment alignment = null; Cell cell = null; - //OmwgSyntaxFormat oMWGformatter = null; - RdfSyntaxFormat oMWGformatter = null; + OmwgSyntaxFormat oMWGformatter = null; + //RdfSyntaxFormat oMWGformatter = null; Model model = null; public RDFRendererVisitor( PrintWriter writer ){ @@ -68,7 +104,7 @@ 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 xml:align='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 xmlns:align='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"); if ( align instanceof BasicAlignment ) { for ( Enumeration e = ((BasicAlignment)align).getXNamespaces().getNames() ; e.hasMoreElements(); ){ String label = (String)e.nextElement(); @@ -86,10 +122,10 @@ public class RDFRendererVisitor implements AlignmentVisitor writer.print(" <level>"); writer.print( align.getLevel() ); if ( align.getLevel().equals("2OMWG") ) { - //oMWGformatter = new OmwgSyntaxFormat(); - oMWGformatter = new RdfSyntaxFormat(); + oMWGformatter = new OmwgSyntaxFormat(); + //oMWGformatter = new RdfSyntaxFormat(); // This is a trick for having namespaces output - //oMWGformatter.setDefaultNamespace( NamespaceDefs.ALIGNMENT ); + oMWGformatter.setDefaultNamespace( NamespaceDefs.ALIGNMENT ); } writer.print("</level>\n <type>"); writer.print( align.getType() ); @@ -155,11 +191,13 @@ public class RDFRendererVisitor implements AlignmentVisitor // But this should be it! (at least for this one) if ( alignment.getLevel().equals("2OMWG") ) { writer.print(" <entity1>"); - //writer.print( oMWGformatter.export( (Expression)cell.getObject1() ) ); - writer.print( oMWGformatter.getExprNode( (Expression)cell.getObject1(), model ) ); + //print( (Expression)cell.getObject1() , 4 ); + writer.print( oMWGformatter.export( (Expression)cell.getObject1() ) ); + //writer.print( oMWGformatter.getExprNode( (Expression)cell.getObject1(), model ) ); writer.print("</entity1>\n <entity2>"); - //writer.print( oMWGformatter.export( (Expression)cell.getObject2() ) ); - writer.print( oMWGformatter.getExprNode( (Expression)cell.getObject2(), model ) ); + writer.print( oMWGformatter.export( (Expression)cell.getObject2() ) ); + //writer.print( oMWGformatter.getExprNode( (Expression)cell.getObject2(), model ) ); + //print( (Expression)cell.getObject2() , 4 ); writer.print("</entity2>\n <relation>"); //writer.print(cell.getRelation().getRelation()); cell.getRelation().accept( this ); @@ -194,4 +232,92 @@ public class RDFRendererVisitor implements AlignmentVisitor public void visit( Relation rel ) { rel.write( writer ); }; + + public void print( Expression expr, int ind ) { + if ( expr instanceof ClassExpr ) { // I hate this dispatch + print( (ClassExpr)expr, ind ); + } else if ( expr instanceof AttributeExpr ) { + print( (AttributeExpr)expr, ind ); + } else if ( expr instanceof RelationExpr ) { + print( (RelationExpr)expr, ind ); + } else if ( expr instanceof InstanceExpr ) { + print( (InstanceExpr)expr, ind ); + } else { + System.err.println("Strange: an expression"); + } + } + public void print( ClassExpr expr, int ind ) { + ExpressionDefinition def = expr.getExpresionDefinition(); + // dummy: to be suppressed + Object conds = null; + //Set<Condition> conds = expr.getConditions(); + if ( def.isComplexExpression() || conds != null ) { + writer.println(); + for ( int i = ind; i > 0; i-- ) writer.print( " " ); + writer.print( "<"+Omwg.Class); + if ( !def.isComplexExpression() ) { // strange + writer.print(" rdf:resource=\""+((Id)def).plainText()+"\">"); + } else { + writer.println(">"); ind++; + for ( int i = ind; i > 0; i-- ) writer.print( " " ); + ComplexExpression ce = (ComplexExpression)def; + Operator op = ce.getOperator(); + switch (op){ + case NOT: + writer.print("<"+Omwg.not+" rdf:parseType=\"Collection\">"); + print( (ClassExpr)(ce.getSubExpressions().iterator().next()), ind+1 ); + writer.println(); + for ( int i = ind; i > 0; i-- ) writer.print( " " ); + writer.print("</"+Omwg.not+"\">"); + break; + case AND: + writer.print("<"+Omwg.and+" rdf:parseType=\"Collection\">"); + writer.println(); + for ( int i = ind; i > 0; i-- ) writer.print( " " ); + writer.print("</"+Omwg.and+"\">"); + break; + case OR: + writer.print("<"+Omwg.or+" rdf:parseType=\"Collection\">"); + writer.println(); + for ( int i = ind; i > 0; i-- ) writer.print( " " ); + writer.print("</"+Omwg.or+"\">"); + break; + }; + ind--; + } + // Deal with operators + // Deal with restrictions + writer.print( "</"+Omwg.Class+">"); + } else { + writer.print( "<"+Omwg.Class+" rdf:resource=\""+((Id)def).plainText()+"\"/>" ); + } + } + public void print( AttributeExpr expr, int ind ) { + ExpressionDefinition def = expr.getExpresionDefinition(); + if (def.isComplexExpression()) { + writer.println(); + for ( int i = ind; i > 0; i-- ) writer.print( " " ); + } else { + writer.print( "<"+Omwg.Attribute+" rdf:resource=\""+((Id)def).plainText()+"\"/>" ); + } + } + public void print( RelationExpr expr, int ind ) { + ExpressionDefinition def = expr.getExpresionDefinition(); + if (def.isComplexExpression()) { + writer.println(); + for ( int i = ind; i > 0; i-- ) writer.print( " " ); + } else { + writer.print( "<"+Omwg.Relation+" rdf:resource=\""+((Id)def).plainText()+"\"/>" ); + } + } + public void print( InstanceExpr expr, int ind ) { + ExpressionDefinition def = expr.getExpresionDefinition(); + if (def.isComplexExpression()) { + writer.println(); + for ( int i = ind; i > 0; i-- ) writer.print( " " ); + } else { + writer.print( "<"+Omwg.Instance+" rdf:resource=\""+((Id)def).plainText()+"\"/>" ); + } + } + } -- GitLab