From 9091ab3087497d54ffceba81b8216e82ba9fc6b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Euzenat?= <Jerome.Euzenat@inria.fr> Date: Wed, 31 Mar 2010 13:57:07 +0000 Subject: [PATCH] - tweaked EDOAL parser --- examples/omwg/total.xml | 277 +++++++++++++++++- .../impl/edoal/RelationConstruction.java | 4 +- .../impl/renderer/RDFRendererVisitor.java | 36 +-- .../exmo/align/parser/RDFParser.java | 141 +++------ .../exmo/align/parser/SyntaxElement.java | 17 +- test/src/EDOALExportTest.java | 38 +-- 6 files changed, 362 insertions(+), 151 deletions(-) diff --git a/examples/omwg/total.xml b/examples/omwg/total.xml index 57c83e7d..c54e37cb 100644 --- a/examples/omwg/total.xml +++ b/examples/omwg/total.xml @@ -97,20 +97,20 @@ <edoal:or rdf:parseType="Collection"> <edoal:Class> <edoal:not> - <edoal:Class rdf:about="&wine;Bordeaux5"/> + <edoal:Class rdf:about="&vin;Bordeaux5"/> </edoal:not> </edoal:Class> - <edoal:Class rdf:about="&wine;Bordeaux6"/> + <edoal:Class rdf:about="&vin;Bordeaux6"/> </edoal:or> </edoal:Class> <edoal:Class> <edoal:and rdf:parseType="Collection"> <edoal:Class> <edoal:not> - <edoal:Class rdf:about="&wine;Bordeaux7"/> + <edoal:Class rdf:about="&vin;Bordeaux7"/> </edoal:not> </edoal:Class> - <edoal:Class rdf:about="&wine;Bordeaux7"/> + <edoal:Class rdf:about="&vin;Bordeaux7"/> </edoal:and> </edoal:Class> </edoal:and> @@ -127,7 +127,7 @@ <edoal:Class> <edoal:or rdf:parseType="Collection"> <edoal:Class rdf:about="&wine;Vin"/> - <edoal:RelationDomainRestriction> + <edoal:AttributeDomainRestriction> <edoal:onAttribute> <edoal:Relation> <edoal:compose rdf:parseType="Collection"> @@ -137,8 +137,8 @@ </edoal:Relation> </edoal:onAttribute> <edoal:class><edoal:Class rdf:about="&wine;FrenchRegion"/></edoal:class> - </edoal:RelationDomainRestriction> - <edoal:PropertyTypeRestriction> + </edoal:AttributeDomainRestriction> + <edoal:AttributeTypeRestriction> <edoal:onAttribute> <edoal:Property> <edoal:compose rdf:parseType="Collection"> @@ -148,7 +148,7 @@ </edoal:Property> </edoal:onAttribute> <edoal:datatype>An-integer-as-datatype</edoal:datatype> - </edoal:PropertyTypeRestriction> + </edoal:AttributeTypeRestriction> <edoal:AttributeOccurenceRestriction> <edoal:onAttribute> <edoal:Relation> @@ -288,7 +288,7 @@ </edoal:arguments> </edoal:Apply> <edoal:Relation rdf:about="&vin;hasTerroir"/> - <edoal:Instance rdf:about="&wine;Bordelais"/> + <edoal:Instance rdf:about="&vin;Bordelais"/> </edoal:arguments> </edoal:Apply> </edoal:value> @@ -311,7 +311,142 @@ </Cell> </map> <!-- rel const: and or not compose inverse trans refl sym --> + <map> + <Cell rdf:about="MappingRule_rel_const"> + <entity1> + <edoal:Relation> + <edoal:not> + <edoal:Relation> + <edoal:and rdf:parseType="Collection"> + <edoal:Relation> + <edoal:or rdf:parseType="Collection"> + <edoal:Relation> + <edoal:and rdf:parseType="Collection"> + <edoal:Relation rdf:about="&wine;loc1"/> + <edoal:Relation rdf:about="&wine;loc2"/> + </edoal:and> + </edoal:Relation> + <edoal:Relation> + <edoal:not> + <edoal:Relation rdf:about="&wine;loc3"/> + </edoal:not> + </edoal:Relation> + <edoal:Relation> + <edoal:transitive> + <edoal:Relation> + <edoal:compose rdf:parseType="Collection"> + <edoal:Relation rdf:about="&wine;loc3"/> + <edoal:Relation rdf:about="&wine;loc5"/> + </edoal:compose> + </edoal:Relation> + </edoal:transitive> + </edoal:Relation> + <edoal:Relation> + <edoal:reflexive> + <edoal:Relation rdf:about="&wine;loc6"/> + </edoal:reflexive> + </edoal:Relation> + <edoal:Relation> + <edoal:symmetric> + <edoal:Relation rdf:about="&wine;loc7"/> + </edoal:symmetric> + </edoal:Relation> + </edoal:or> + </edoal:Relation> + <edoal:Relation> + <edoal:not> + <edoal:Relation> + <edoal:inverse> + <edoal:Relation rdf:about="&wine;loc4"/> + </edoal:inverse> + </edoal:Relation> + </edoal:not> + </edoal:Relation> + </edoal:and> + </edoal:Relation> + </edoal:not> + </edoal:Relation> + </entity1> + <entity2> + <edoal:Relation> + <edoal:and rdf:parseType="Collection"> + <edoal:Relation rdf:about="&vin;place3"/> + <edoal:Relation> + <edoal:or rdf:parseType="Collection"> + <edoal:Relation> + <edoal:not> + <edoal:Relation rdf:about="&vin;place5"/> + </edoal:not> + </edoal:Relation> + <edoal:Relation rdf:about="&vin;place6"/> + </edoal:or> + </edoal:Relation> + <edoal:Relation> + <edoal:and rdf:parseType="Collection"> + <edoal:Relation> + <edoal:compose rdf:parseType="Collection"> + <edoal:Relation> + <edoal:symmetric> + <edoal:Relation rdf:about="&vin;place1"/> + </edoal:symmetric> + </edoal:Relation> + <edoal:Relation rdf:about="&vin;place2"/> + </edoal:compose> + </edoal:Relation> + <edoal:Relation rdf:about="&vin;place7"/> + </edoal:and> + </edoal:Relation> + </edoal:and> + </edoal:Relation> + </entity2> + <measure rdf:datatype='&xsd;float'>1.</measure> + <relation>SubsumedBy</relation> + </Cell> + </map> <!-- rel rest: att-type... --> + <map> + <Cell rdf:about="MappingRule_rel_rest"> + <entity1> + <edoal:Relation> + <edoal:or rdf:parseType="Collection"> + <edoal:RelationDomainRestriction> + <edoal:class><edoal:Class rdf:about="&wine;Bordeaux1"/></edoal:class> + </edoal:RelationDomainRestriction> + <edoal:RelationCoDomainRestriction> + <edoal:class><edoal:Class rdf:about="&wine;Bordeaux2"/></edoal:class> + </edoal:RelationCoDomainRestriction> + </edoal:or> + </edoal:Relation> + </entity1> + <entity2> + <edoal:Relation> + <edoal:and rdf:parseType="Collection"> + <edoal:RelationDomainRestriction> + <edoal:class> + <edoal:Class> + <edoal:and rdf:parseType="Collection"> + <edoal:Class rdf:about="&vin;Bordeaux5"/> + <edoal:Class rdf:about="&vin;Bordeaux6"/> + </edoal:and> + </edoal:Class> + </edoal:class> + </edoal:RelationDomainRestriction> + <edoal:RelationCoDomainRestriction> + <edoal:class> + <edoal:Class> + <edoal:not> + <edoal:Class rdf:about="&vin;Bordeaux7"/> + </edoal:not> + </edoal:Class> + </edoal:class> + </edoal:RelationCoDomainRestriction> + </edoal:and> + </edoal:Relation> + </entity2> + <measure rdf:datatype='&xsd;float'>1.</measure> + <relation>SubsumedBy</relation> + </Cell> + </map> <!-- rel const and rest --> <!-- prop basis --> <map> @@ -323,7 +458,129 @@ </Cell> </map> <!-- prop const: and or not compose --> + <map> + <Cell rdf:about="MappingRule_prop_const"> + <entity1> + <edoal:Property> + <edoal:not> + <edoal:Property> + <edoal:and rdf:parseType="Collection"> + <edoal:Property> + <edoal:or rdf:parseType="Collection"> + <edoal:Property> + <edoal:and rdf:parseType="Collection"> + <edoal:Property rdf:about="&wine;number1"/> + <edoal:Property rdf:about="&wine;number2"/> + </edoal:and> + </edoal:Property> + <edoal:Property> + <edoal:not> + <edoal:Property rdf:about="&wine;number3"/> + </edoal:not> + </edoal:Property> + <edoal:Property> + <edoal:not> + <edoal:Property> + <edoal:compose rdf:parseType="Collection"> + <edoal:Relation rdf:about="&wine;loc3"/> + <edoal:Relation rdf:about="&wine;loc5"/> + <edoal:Property rdf:about="&wine;number5"/> + </edoal:compose> + </edoal:Property> + </edoal:not> + </edoal:Property> + </edoal:or> + </edoal:Property> + <edoal:Property> + <edoal:not> + <edoal:Property rdf:about="&wine;number4"/> + </edoal:not> + </edoal:Property> + </edoal:and> + </edoal:Property> + </edoal:not> + </edoal:Property> + </entity1> + <entity2> + <edoal:Property> + <edoal:and rdf:parseType="Collection"> + <edoal:Property rdf:about="&vin;dpt3"/> + <edoal:Property> + <edoal:or rdf:parseType="Collection"> + <edoal:Property> + <edoal:not> + <edoal:Property rdf:about="&vin;dpt5"/> + </edoal:not> + </edoal:Property> + <edoal:Property rdf:about="&vin;dpt6"/> + </edoal:or> + </edoal:Property> + <edoal:Property> + <edoal:and rdf:parseType="Collection"> + <edoal:Property> + <edoal:compose rdf:parseType="Collection"> + <edoal:Relation> + <edoal:symmetric> + <edoal:Relation rdf:about="&vin;place1"/> + </edoal:symmetric> + </edoal:Relation> + <edoal:Relation rdf:about="&vin;place2"/> + <edoal:Property rdf:about="&vin;dpt2"/> + </edoal:compose> + </edoal:Property> + <edoal:Property rdf:about="&vin;dpt7"/> + </edoal:and> + </edoal:Property> + </edoal:and> + </edoal:Property> + </entity2> + <measure rdf:datatype='&xsd;float'>1.</measure> + <relation>SubsumedBy</relation> + </Cell> + </map> <!-- prop rest: att-type... --> + <map> + <Cell rdf:about="MappingRule_prop_rest"> + <entity1> + <edoal:Property> + <edoal:or rdf:parseType="Collection"> + <edoal:PropertyDomainRestriction> + <edoal:class><edoal:Class rdf:about="&wine;Bordeaux1"/></edoal:class> + </edoal:PropertyDomainRestriction> + <!--edoal:PropertyTypeRestriction> + <edoal:type><edoal:Datatype rdf:about="&wine;Bordeaux2"/></edoal:type> + </edoal:PropertyTypeRestriction--> + <edoal:PropertyValueRestriction> + <edoal:comparator rdf:resource="http://www.w3.org/2001/XMLSchema#equals"/> + <edoal:value><edoal:Literal edoal:string="Bordeaux"/></edoal:value> + </edoal:PropertyValueRestriction> + </edoal:or> + </edoal:Property> + </entity1> + <entity2> + <edoal:Property> + <edoal:and rdf:parseType="Collection"> + <edoal:PropertyDomainRestriction> + <edoal:class> + <edoal:Class> + <edoal:and rdf:parseType="Collection"> + <edoal:Class rdf:about="&vin;Bordeaux5"/> + <edoal:Class rdf:about="&vin;Bordeaux6"/> + </edoal:and> + </edoal:Class> + </edoal:class> + </edoal:PropertyDomainRestriction> + <!--edoal:PropertyValueRestriction> + <edoal:comparator rdf:resource="http://www.w3.org/2001/XMLSchema#equals"/> + <edoal:value><edoal:Apply edoal:operator="http://example.org/gensym"/></edoal:value> + </edoal:PropertyValueRestriction--> + </edoal:and> + </edoal:Property> + </entity2> + <measure rdf:datatype='&xsd;float'>1.</measure> + <relation>SubsumedBy</relation> + </Cell> + </map> <!-- prop const and rest --> <!-- instance --> <map> @@ -387,7 +644,7 @@ <entity2> <edoal:Class> <edoal:not> - <edoal:Class rdf:about="&wine;WineFlavor"/> + <edoal:Class rdf:about="&vin;WineFlavor"/> </edoal:not> </edoal:Class> </entity2> diff --git a/src/fr/inrialpes/exmo/align/impl/edoal/RelationConstruction.java b/src/fr/inrialpes/exmo/align/impl/edoal/RelationConstruction.java index 6c7cf10c..b67829f7 100644 --- a/src/fr/inrialpes/exmo/align/impl/edoal/RelationConstruction.java +++ b/src/fr/inrialpes/exmo/align/impl/edoal/RelationConstruction.java @@ -46,8 +46,6 @@ import org.semanticweb.owl.align.Visitable; * @version $Revision: 1.5 $ $Date: 2010-03-07 20:40:05 +0100 (Sun, 07 Mar 2010) $ */ -// JE2010: Should it be abstract with RelationConjunction?? - public class RelationConstruction extends RelationExpression { /** Holds all expressions. */ @@ -96,7 +94,7 @@ public class RelationConstruction extends RelationExpression { return components; } - public void addComponents( RelationExpression exp ) { + public void addComponents( PathExpression exp ) { components.add( exp ); } diff --git a/src/fr/inrialpes/exmo/align/impl/renderer/RDFRendererVisitor.java b/src/fr/inrialpes/exmo/align/impl/renderer/RDFRendererVisitor.java index a8201d99..915206b3 100644 --- a/src/fr/inrialpes/exmo/align/impl/renderer/RDFRendererVisitor.java +++ b/src/fr/inrialpes/exmo/align/impl/renderer/RDFRendererVisitor.java @@ -405,7 +405,7 @@ public class RDFRendererVisitor implements AlignmentVisitor { // DONE+TESTED public void visit( final ClassValueRestriction c ) throws AlignmentException { - indentedOutput("<"+SyntaxElement.PROPERTY_VALUE_COND.print(DEF)); + indentedOutput("<"+SyntaxElement.VALUE_COND.print(DEF)); if ( isPattern ) renderVariables( c ); writer.print(">"+NL); increaseIndent(); @@ -423,12 +423,12 @@ public class RDFRendererVisitor implements AlignmentVisitor { visit( c.getValue() ); writer.print("</"+SyntaxElement.VALUE.print(DEF)+">"+NL); decreaseIndent(); - indentedOutput("</"+SyntaxElement.PROPERTY_VALUE_COND.print(DEF)+">"); + indentedOutput("</"+SyntaxElement.VALUE_COND.print(DEF)+">"); } // DONE+TESTED public void visit( final ClassTypeRestriction c ) throws AlignmentException { - indentedOutput("<"+SyntaxElement.PROPERTY_TYPE_COND.print(DEF)); + indentedOutput("<"+SyntaxElement.TYPE_COND.print(DEF)); if ( isPattern ) renderVariables( c ); writer.print(">"+NL); increaseIndent(); @@ -441,12 +441,12 @@ public class RDFRendererVisitor implements AlignmentVisitor { visit( c.getType() ); decreaseIndent(); writer.print(NL); - indentedOutput("</"+SyntaxElement.PROPERTY_TYPE_COND.print(DEF)+">"); + indentedOutput("</"+SyntaxElement.TYPE_COND.print(DEF)+">"); } // DONE+TESTED public void visit( final ClassDomainRestriction c ) throws AlignmentException { - indentedOutput("<"+SyntaxElement.RELATION_DOMAIN_COND.print(DEF)); + indentedOutput("<"+SyntaxElement.DOMAIN_RESTRICTION.print(DEF)); if ( isPattern ) renderVariables( c ); writer.print(">"+NL); increaseIndent(); @@ -463,12 +463,12 @@ public class RDFRendererVisitor implements AlignmentVisitor { decreaseIndent(); indentedOutput("</"+SyntaxElement.TOCLASS.print(DEF)+">"+NL); decreaseIndent(); - indentedOutput("</"+SyntaxElement.RELATION_DOMAIN_COND.print(DEF)+">"); + indentedOutput("</"+SyntaxElement.DOMAIN_RESTRICTION.print(DEF)+">"); } // DONE+TESTED public void visit( final ClassOccurenceRestriction c ) throws AlignmentException { - indentedOutput("<"+SyntaxElement.PROPERTY_OCCURENCE_COND.print(DEF)); + indentedOutput("<"+SyntaxElement.OCCURENCE_COND.print(DEF)); if ( isPattern ) renderVariables( c ); writer.print(">"+NL); increaseIndent(); @@ -486,7 +486,7 @@ public class RDFRendererVisitor implements AlignmentVisitor { writer.print(c.getOccurence()); writer.print("</"+SyntaxElement.VALUE.print(DEF)+">"+NL); decreaseIndent(); - indentedOutput("</"+SyntaxElement.PROPERTY_OCCURENCE_COND.print(DEF)+">"); + indentedOutput("</"+SyntaxElement.OCCURENCE_COND.print(DEF)+">"); } // DONE @@ -552,7 +552,7 @@ public class RDFRendererVisitor implements AlignmentVisitor { // DONE public void visit(final PropertyValueRestriction c) throws AlignmentException { - indentedOutput("<"+SyntaxElement.VALUE_COND.print(DEF)); + indentedOutput("<"+SyntaxElement.PROPERTY_VALUE_COND.print(DEF)); if ( isPattern ) renderVariables( c ); writer.print(">"+NL); increaseIndent(); @@ -564,12 +564,12 @@ public class RDFRendererVisitor implements AlignmentVisitor { visit( c.getValue() ); writer.print("</"+SyntaxElement.VALUE.print(DEF)+">"+NL); decreaseIndent(); - indentedOutput("</"+SyntaxElement.VALUE_COND.print(DEF)+">"); + indentedOutput("</"+SyntaxElement.PROPERTY_VALUE_COND.print(DEF)+">"); } // DONE public void visit(final PropertyDomainRestriction c) throws AlignmentException { - indentedOutput("<"+SyntaxElement.DOMAIN_RESTRICTION.print(DEF)); + indentedOutput("<"+SyntaxElement.PROPERTY_DOMAIN_COND.print(DEF)); if ( isPattern ) renderVariables( c ); writer.print(">"+NL); increaseIndent(); @@ -580,18 +580,18 @@ public class RDFRendererVisitor implements AlignmentVisitor { decreaseIndent(); indentedOutput("</"+SyntaxElement.TOCLASS.print(DEF)+">"+NL); decreaseIndent(); - indentedOutput("</"+SyntaxElement.DOMAIN_RESTRICTION.print(DEF)+">"+NL); + indentedOutput("</"+SyntaxElement.PROPERTY_DOMAIN_COND.print(DEF)+">"+NL); } // DONE public void visit(final PropertyTypeRestriction c) throws AlignmentException { - indentedOutput("<"+SyntaxElement.TYPE_COND.print(DEF)); + indentedOutput("<"+SyntaxElement.PROPERTY_TYPE_COND.print(DEF)); if ( isPattern ) renderVariables( c ); writer.print(">"+NL); increaseIndent(); visit( c.getType() ); decreaseIndent(); - indentedOutput("</"+SyntaxElement.TYPE_COND.print(DEF)+">"); + indentedOutput("</"+SyntaxElement.PROPERTY_TYPE_COND.print(DEF)+">"); } // DONE @@ -651,7 +651,7 @@ public class RDFRendererVisitor implements AlignmentVisitor { // DONE public void visit(final RelationCoDomainRestriction c) throws AlignmentException { - indentedOutput("<"+SyntaxElement.CODOMAIN_RESTRICTION.print(DEF)); + indentedOutput("<"+SyntaxElement.RELATION_CODOMAIN_COND.print(DEF)); if ( isPattern ) renderVariables( c ); writer.print(">"+NL); increaseIndent(); @@ -662,12 +662,12 @@ public class RDFRendererVisitor implements AlignmentVisitor { decreaseIndent(); writer.print("</"+SyntaxElement.TOCLASS.print(DEF)+">"+NL); decreaseIndent(); - indentedOutput("</"+SyntaxElement.CODOMAIN_RESTRICTION.print(DEF)+">"); + indentedOutput("</"+SyntaxElement.RELATION_CODOMAIN_COND.print(DEF)+">"); } // DONE public void visit(final RelationDomainRestriction c) throws AlignmentException { - indentedOutput("<"+SyntaxElement.DOMAIN_RESTRICTION.print(DEF)); + indentedOutput("<"+SyntaxElement.RELATION_DOMAIN_COND.print(DEF)); if ( isPattern ) renderVariables( c ); writer.print(">"+NL); increaseIndent(); @@ -678,7 +678,7 @@ public class RDFRendererVisitor implements AlignmentVisitor { decreaseIndent(); writer.print("</"+SyntaxElement.TOCLASS.print(DEF)+">"+NL); decreaseIndent(); - indentedOutput("</"+SyntaxElement.DOMAIN_RESTRICTION.print(DEF)+">"); + indentedOutput("</"+SyntaxElement.RELATION_DOMAIN_COND.print(DEF)+">"); } // DONE diff --git a/src/fr/inrialpes/exmo/align/parser/RDFParser.java b/src/fr/inrialpes/exmo/align/parser/RDFParser.java index dc8cbde2..f43e1f4c 100644 --- a/src/fr/inrialpes/exmo/align/parser/RDFParser.java +++ b/src/fr/inrialpes/exmo/align/parser/RDFParser.java @@ -272,7 +272,6 @@ public class RDFParser { if ( stmtIt.hasNext() ) { final String arity = stmtIt.nextStatement().getString(); if ((arity != null) && (!arity.equals(""))) { - // JE2009: Certainly some control checking should be useful alignment.setType( arity ); } } else { @@ -283,16 +282,15 @@ public class RDFParser { while (stmtIt.hasNext()) { Statement stmt = stmtIt.nextStatement(); if ( debug > 0 ) System.err.println( " ---------------> "+stmt ); - //alignment.addRule(parseCell(stmt.getResource())); try { alignment.addAlignCell( parseCell( stmt.getResource() ) ); } catch ( AlignmentException ae ) { System.err.println( "Error "+ae ); ae.printStackTrace(); } - // rdf:type must be forgotten } // Remaining resources... + // rdf:type must be forgotten //else if ( !pred.equals( SyntaxElement.getResource("rdftype") ) ) { // Unknown is annotation // parseAnnotation( stmt, alignment ); //} @@ -358,7 +356,7 @@ public class RDFParser { throw new NullPointerException("The node must not be null"); } try { - // JE2009: Should be better to use AlignmentAPI relation recognition + // Should be better to use Alignment API relation recognition // determine the relation, the relation shall be Literal final String relation = node.getProperty((Property)SyntaxElement.RULE_RELATION.resource).getString(); //Get the relation @@ -403,19 +401,19 @@ public class RDFParser { Expression result; Resource rdfType = node.getProperty( RDF.type ).getResource(); if ( rdfType.equals( SyntaxElement.CLASS_EXPR.resource ) || - rdfType.equals( SyntaxElement.PROPERTY_OCCURENCE_COND.resource ) || - rdfType.equals( SyntaxElement.PROPERTY_TYPE_COND.resource ) || - rdfType.equals( SyntaxElement.RELATION_DOMAIN_COND.resource ) || - rdfType.equals( SyntaxElement.PROPERTY_VALUE_COND.resource ) ) { + rdfType.equals( SyntaxElement.OCCURENCE_COND.resource ) || + rdfType.equals( SyntaxElement.DOMAIN_RESTRICTION.resource ) || + rdfType.equals( SyntaxElement.TYPE_COND.resource ) || + rdfType.equals( SyntaxElement.VALUE_COND.resource ) ) { result = parseClass( node ); } else if ( rdfType.equals( SyntaxElement.PROPERTY_EXPR.resource ) || - rdfType.equals( SyntaxElement.DOMAIN_RESTRICTION.resource ) || - rdfType.equals( SyntaxElement.TYPE_COND.resource ) || - rdfType.equals( SyntaxElement.VALUE_COND.resource ) ) { + rdfType.equals( SyntaxElement.PROPERTY_DOMAIN_COND.resource ) || + rdfType.equals( SyntaxElement.PROPERTY_TYPE_COND.resource ) || + rdfType.equals( SyntaxElement.PROPERTY_VALUE_COND.resource ) ) { result = parseProperty( node ); } else if ( rdfType.equals( SyntaxElement.RELATION_EXPR.resource ) || - rdfType.equals( SyntaxElement.DOMAIN_RESTRICTION.resource ) || // JE 2010: no chance - rdfType.equals( SyntaxElement.CODOMAIN_RESTRICTION.resource ) ) { + rdfType.equals( SyntaxElement.RELATION_DOMAIN_COND.resource ) || // JE 2010: no chance + rdfType.equals( SyntaxElement.RELATION_CODOMAIN_COND.resource ) ) { result = parseRelation( node ); } else if ( rdfType.equals( SyntaxElement.INSTANCE_EXPR.resource ) ) { result = parseInstance( node ); @@ -466,24 +464,22 @@ public class RDFParser { throw new AlignmentException( "Class statement must containt one constructor or Id : "+node ); } } - //JE2010MUSTCHECK - Resource coll = stmt.getResource(); //JE2010MUSTCHECK + Resource coll = stmt.getResource(); // MUSTCHECK if ( op == SyntaxElement.NOT.getOperator() ) { clexpr.add( parseClass( coll ) ); } else { // Jena encode these collections as first/rest statements - // THIS IS HORRIBLE BUT I DID NOT FOUND BETTER! - while ( !RDF.nil.getURI().equals( coll.getURI() ) ) { + while ( !RDF.nil.getURI().equals( coll.getURI() ) ) { // THIS IS HORRIBLE clexpr.add( parseClass( coll.getProperty( RDF.first ).getResource() ) ); - coll = coll.getProperty( RDF.rest ).getResource(); + coll = coll.getProperty( RDF.rest ).getResource(); // MUSTCHECK } } return new ClassConstruction( op, clexpr ); } } else { - if ( !rdfType.equals( SyntaxElement.PROPERTY_OCCURENCE_COND.resource ) && - !rdfType.equals( SyntaxElement.PROPERTY_TYPE_COND.resource ) && - !rdfType.equals( SyntaxElement.RELATION_DOMAIN_COND.resource ) && - !rdfType.equals( SyntaxElement.PROPERTY_VALUE_COND.resource ) ) { + if ( !rdfType.equals( SyntaxElement.OCCURENCE_COND.resource ) && + !rdfType.equals( SyntaxElement.DOMAIN_RESTRICTION.resource ) && + !rdfType.equals( SyntaxElement.TYPE_COND.resource ) && + !rdfType.equals( SyntaxElement.VALUE_COND.resource ) ) { throw new AlignmentException( "Bad class restriction type : "+rdfType ); } PathExpression pe; @@ -491,10 +487,9 @@ public class RDFParser { // Find onAttribute Statement stmt = node.getProperty( (Property)SyntaxElement.ONPROPERTY.resource ); if ( stmt == null ) throw new AlignmentException( "Required edoal:onAttribute property" ); - //JE2010MUSTCHECK - pe = parsePathExpression( stmt.getResource() ); - if ( rdfType.equals( SyntaxElement.PROPERTY_TYPE_COND.resource ) ) { - // JEZ010: check that pe is a Property / Relation + pe = parsePathExpression( stmt.getResource() ); // MUSTCHECK + if ( rdfType.equals( SyntaxElement.TYPE_COND.resource ) ) { + // Check that pe is a Property / Relation // ==> different treatment // Datatype could also be defined as objets...? (like rdf:resource="") stmt = node.getProperty( (Property)SyntaxElement.DATATYPE.resource ); @@ -505,7 +500,7 @@ public class RDFParser { } else { throw new AlignmentException( "Bad edoal:datatype value" ); } - } else if ( rdfType.equals( SyntaxElement.RELATION_DOMAIN_COND.resource ) ) { + } else if ( rdfType.equals( SyntaxElement.DOMAIN_RESTRICTION.resource ) ) { stmt = node.getProperty( (Property)SyntaxElement.TOCLASS.resource ); if ( stmt == null ) throw new AlignmentException( "Required edoal:class property" ); RDFNode nn = stmt.getObject(); @@ -521,7 +516,7 @@ public class RDFParser { URI id = getNodeId( stmt.getResource() ); if ( id != null ) comp = new Comparator( id ); else throw new AlignmentException("edoal:comparator requires an URI"); - if ( rdfType.equals( SyntaxElement.PROPERTY_OCCURENCE_COND.resource ) ) { + if ( rdfType.equals( SyntaxElement.OCCURENCE_COND.resource ) ) { stmt = node.getProperty( (Property)SyntaxElement.VALUE.resource ); if ( stmt == null ) throw new AlignmentException( "Required edoal:value property" ); RDFNode nn = stmt.getObject(); @@ -530,28 +525,11 @@ public class RDFParser { } else { throw new AlignmentException( "Bad occurence specification : "+nn ); } - } else if ( rdfType.equals( SyntaxElement.PROPERTY_VALUE_COND.resource ) ) { + } else if ( rdfType.equals( SyntaxElement.VALUE_COND.resource ) ) { stmt = node.getProperty( (Property)SyntaxElement.VALUE.resource ); if ( stmt == null ) throw new AlignmentException( "Required edoal:value property" ); ValueExpression v = parseValue( stmt.getObject() ); return new ClassValueRestriction( pe, comp, v ); - /* TO SUPPRESS - RDFNode nn = stmt.getObject(); - if ( nn.isLiteral() ) { - return new ClassValueRestriction( pe, comp, new Value( ((Literal)nn).getString() ) ); - } else if ( nn.isResource() ) { - // get the type - Resource nnType = ((Resource)nn).getProperty(RDF.type).getResource(); - if ( nnType.equals( SyntaxElement.INSTANCE_EXPR.resource ) ) { - // JE2010: Check that pe is a Relation - return new ClassValueRestriction( pe, comp, parseInstance( (Resource)nn ) ); - } else { - // JE2010: Check that pe is a Property - return new ClassValueRestriction( pe, comp, parsePathExpression( (Resource)nn ) ); - } // This one will raise the error - } else { - throw new AlignmentException( "Bad edoal:value value" ); - }*/ } } } @@ -562,13 +540,13 @@ public class RDFParser { protected PathExpression parsePathExpression( final Resource node ) throws AlignmentException { Resource rdfType = node.getProperty(RDF.type).getResource(); if ( rdfType.equals( SyntaxElement.PROPERTY_EXPR.resource ) || - rdfType.equals( SyntaxElement.DOMAIN_RESTRICTION.resource ) || - rdfType.equals( SyntaxElement.TYPE_COND.resource ) || - rdfType.equals( SyntaxElement.VALUE_COND.resource ) ) { + rdfType.equals( SyntaxElement.PROPERTY_DOMAIN_COND.resource ) || + rdfType.equals( SyntaxElement.PROPERTY_TYPE_COND.resource ) || + rdfType.equals( SyntaxElement.PROPERTY_VALUE_COND.resource ) ) { return parseProperty( node ); } else if ( rdfType.equals( SyntaxElement.RELATION_EXPR.resource ) || - rdfType.equals( SyntaxElement.CODOMAIN_RESTRICTION.resource ) || - rdfType.equals( SyntaxElement.VALUE_COND.resource ) ) { + rdfType.equals( SyntaxElement.RELATION_CODOMAIN_COND.resource ) || + rdfType.equals( SyntaxElement.RELATION_DOMAIN_COND.resource ) ) { return parseRelation( node ); } else throw new AlignmentException( "Cannot parse path expression ("+rdfType+"): "+node ); @@ -605,15 +583,13 @@ public class RDFParser { throw new AlignmentException( "Property statement must containt one constructor or Id : "+node ); } } - Resource coll = stmt.getResource(); //JE2010MUSTCHECK + Resource coll = stmt.getResource(); // MUSTCHECK if ( op == SyntaxElement.NOT.getOperator() ) { clexpr.add( parseProperty( coll ) ); } else if ( op == SyntaxElement.COMPOSE.getOperator() ) { - // THIS IS HORRIBLE BUT I DID NOT FOUND BETTER! - while ( !RDF.nil.getURI().equals( coll.getURI() ) ) { - // In this present case, I have to parse a series of Relations - // followed by a Property - Resource newcoll = coll.getProperty( RDF.rest ).getResource(); //JE2010MUSTCHECK + while ( !RDF.nil.getURI().equals( coll.getURI() ) ) { // THIS IS HORRIBLE + // In this present case, it is a series of Relations followed by a Property + Resource newcoll = coll.getProperty( RDF.rest ).getResource(); // MUSTCHECK if ( !RDF.nil.getURI().equals( newcoll.getURI() ) ) { clexpr.add( parseRelation( coll.getProperty( RDF.first ).getResource() ) ); } else { @@ -622,16 +598,14 @@ public class RDFParser { coll = newcoll; } } else { // This is a first/rest statements - // THIS IS HORRIBLE BUT I DID NOT FOUND BETTER! - while ( !RDF.nil.getURI().equals( coll.getURI() ) ) { - //JE2010MUSTCHECK + while ( !RDF.nil.getURI().equals( coll.getURI() ) ) { // THIS IS HORRIBLE clexpr.add( parseProperty( coll.getProperty( RDF.first ).getResource() ) ); - coll = coll.getProperty( RDF.rest ).getResource(); + coll = coll.getProperty( RDF.rest ).getResource(); // MUSTCHECK } } return new PropertyConstruction( op, clexpr ); } - } else if ( rdfType.equals( SyntaxElement.DOMAIN_RESTRICTION.resource ) ) { + } else if ( rdfType.equals( SyntaxElement.PROPERTY_DOMAIN_COND.resource ) ) { stmt = node.getProperty( (Property)SyntaxElement.TOCLASS.resource ); if ( stmt == null ) throw new AlignmentException( "Required edoal:toClass property" ); RDFNode nn = stmt.getObject(); @@ -640,7 +614,7 @@ public class RDFParser { } else { throw new AlignmentException( "Incorrect class expression "+nn ); } - } else if ( rdfType.equals( SyntaxElement.TYPE_COND.resource ) ) { + } else if ( rdfType.equals( SyntaxElement.PROPERTY_TYPE_COND.resource ) ) { // Datatype could also be defined as objets...? (like rdf:resource="") // Or classes? OF COURSE???? stmt = node.getProperty( (Property)SyntaxElement.DATATYPE.resource ); @@ -651,9 +625,8 @@ public class RDFParser { } else { throw new AlignmentException( "Bad edoal:datatype value" ); } - } else if ( rdfType.equals( SyntaxElement.VALUE_COND.resource ) ) { + } else if ( rdfType.equals( SyntaxElement.PROPERTY_VALUE_COND.resource ) ) { // Find comparator - // JE2010: This is not good as comparator management... stmt = node.getProperty( (Property)SyntaxElement.COMPARATOR.resource ); if ( stmt == null ) throw new AlignmentException( "Required edoal:comparator property" ); URI id = getNodeId( stmt.getResource() ); @@ -663,22 +636,6 @@ public class RDFParser { if ( stmt == null ) throw new AlignmentException( "Required edoal:value property" ); ValueExpression v = parseValue( stmt.getObject() ); return new PropertyValueRestriction( comp, v ); - /* - RDFNode nn = stmt.getObject(); - if ( nn.isLiteral() ) { - return new PropertyValueRestriction( comp, new Value( ((Literal)nn).getString() ) ); - } else if ( nn.isResource() ) { - // get the type - Resource nnType = ((Resource)nn).getProperty(RDF.type).getResource(); - if ( nnType.equals( SyntaxElement.INSTANCE_EXPR.resource ) ) { - return new PropertyValueRestriction( comp, parseInstance( (Resource)nn ) ); - } else { - //return new ClassValueRestriction( pe, comp, parsePathExpression( (Resource)nn ) ); - throw new AlignmentException( "Connot restrict value to "+nnType ); - } - } else { - throw new AlignmentException( "Bad edoal:value value" ); - }*/ } else { throw new AlignmentException("There is no pasrser for entity "+rdfType.getLocalName()); } @@ -693,7 +650,7 @@ public class RDFParser { return new RelationId( id ); } else { Constructor op = null; - // JE2010: does not compile with RelationExpression !! + // Remains a PathExpression (that this is a relation is checked by typing) List<PathExpression> clexpr = new LinkedList<PathExpression>(); if ( node.hasProperty( (Property)SyntaxElement.AND.resource ) ) { op = SyntaxElement.AND.getOperator(); @@ -726,7 +683,7 @@ public class RDFParser { throw new AlignmentException( "Relation statement must containt one constructor or Id : "+node ); } } - Resource coll = stmt.getResource(); //JE2010MUSTCHECK + Resource coll = stmt.getResource(); // MUSTCHECK if ( op == SyntaxElement.NOT.getOperator() || op == SyntaxElement.INVERSE.getOperator() || op == SyntaxElement.REFLEXIVE.getOperator() || @@ -734,16 +691,14 @@ public class RDFParser { op == SyntaxElement.TRANSITIVE.getOperator() ) { clexpr.add( parseRelation( coll ) ); } else { // This is a first/rest statements - // THIS IS HORRIBLE BUT I DID NOT FOUND BETTER! - while ( !RDF.nil.getURI().equals( coll.getURI() ) ) { - //JE2010MUSTCHECK + while ( !RDF.nil.getURI().equals( coll.getURI() ) ) { // THIS IS HORRIBLE clexpr.add( parseRelation( coll.getProperty( RDF.first ).getResource() ) ); - coll = coll.getProperty( RDF.rest ).getResource(); + coll = coll.getProperty( RDF.rest ).getResource(); // MUSTCHECK } } return new RelationConstruction( op, clexpr ); } - } else if ( rdfType.equals( SyntaxElement.DOMAIN_RESTRICTION.resource ) ) { + } else if ( rdfType.equals( SyntaxElement.RELATION_DOMAIN_COND.resource ) ) { stmt = node.getProperty( (Property)SyntaxElement.TOCLASS.resource ); if ( stmt == null ) throw new AlignmentException( "Required edoal:toClass property" ); RDFNode nn = stmt.getObject(); @@ -752,7 +707,7 @@ public class RDFParser { } else { throw new AlignmentException( "Incorrect class expression "+nn ); } - } else if ( rdfType.equals( SyntaxElement.CODOMAIN_RESTRICTION.resource ) ) { + } else if ( rdfType.equals( SyntaxElement.RELATION_CODOMAIN_COND.resource ) ) { stmt = node.getProperty( (Property)SyntaxElement.TOCLASS.resource ); if ( stmt == null ) throw new AlignmentException( "Required edoal:toClass property" ); RDFNode nn = stmt.getObject(); @@ -817,14 +772,14 @@ public class RDFParser { List<ValueExpression> valexpr = new LinkedList<ValueExpression>(); if ( ((Resource)node).hasProperty( (Property)SyntaxElement.ARGUMENTS.resource ) ) { Statement stmt = ((Resource)node).getProperty( (Property)SyntaxElement.ARGUMENTS.resource ); - Resource coll = stmt.getResource(); //JE2010MUSTCHECK + Resource coll = stmt.getResource(); // MUSTCHECK while ( !RDF.nil.getURI().equals( coll.getURI() ) ) { valexpr.add( parseValue( coll.getProperty( RDF.first ).getResource() ) ); coll = coll.getProperty( RDF.rest ).getResource(); } } return new Apply( op, valexpr ); - } else { // JE2010: Check that pe is a Path + } else { // Check that pe is a Path?? return parsePathExpression( (Resource)node ); } } else { @@ -870,11 +825,11 @@ public class RDFParser { name = prefix.substring( pos+1 ); prefix = prefix.substring( 0, pos+1 ); } else { prefix += "#"; } - // JE: this will not work for stuff like dc:creator which has no fragment! + // This will not work for stuff like dc:creator which has no fragment! al.setExtension( prefix, name, anno ); } } catch (Exception e1) { - // JE2009: Would be better to silently ignore annotations + // It would be better to silently ignore annotations // Or report them in a bunch throw new AlignmentException("The annotation is not correct", e1); } diff --git a/src/fr/inrialpes/exmo/align/parser/SyntaxElement.java b/src/fr/inrialpes/exmo/align/parser/SyntaxElement.java index beaa68c4..2b7a230c 100644 --- a/src/fr/inrialpes/exmo/align/parser/SyntaxElement.java +++ b/src/fr/inrialpes/exmo/align/parser/SyntaxElement.java @@ -93,11 +93,10 @@ public enum SyntaxElement { ARGUMENTS( Namespace.EDOAL, "arguments"), ATTR_TRANSF( Namespace.EDOAL, "transf"), CLASS_EXPR( Namespace.EDOAL, "Class", true),//ALIGNMENT - CODOMAIN_RESTRICTION(Namespace.EDOAL, "CodomainRestriction", true), COMPARATOR( Namespace.EDOAL, "comparator"), COMPOSE( Namespace.EDOAL, "compose", Constructor.COMP), DATATYPE( Namespace.EDOAL, "datatype"), - DOMAIN_RESTRICTION(Namespace.EDOAL, "DomainRestriction", true), + DOMAIN_RESTRICTION(Namespace.EDOAL, "AttributeDomainRestriction", true), //ID( Namespace.EDOAL, "Id", true), // Useless INSTANCE_EXPR( Namespace.EDOAL, "Instance", true), INVERSE( Namespace.EDOAL, "inverse", Constructor.INVERSE), @@ -107,12 +106,14 @@ public enum SyntaxElement { OPERATOR( Namespace.EDOAL, "operator"), OR( Namespace.EDOAL, "or", Constructor.OR), //PARAMETERS( Namespace.EDOAL, "parameters"), - PROPERTY( Namespace.EDOAL, "Property", true), - PROPERTY_EXPR( Namespace.EDOAL, "Property"), // ?? - PROPERTY_OCCURENCE_COND(Namespace.EDOAL, "AttributeOccurenceRestriction", true), + //PROPERTY( Namespace.EDOAL, "Property", true), // ?? + PROPERTY_EXPR( Namespace.EDOAL, "Property"), + OCCURENCE_COND(Namespace.EDOAL, "AttributeOccurenceRestriction", true), PROPERTY_TYPE_COND(Namespace.EDOAL, "PropertyTypeRestriction", true), + PROPERTY_DOMAIN_COND(Namespace.EDOAL, "PropertyDomainRestriction", true), + PROPERTY_VALUE_COND( Namespace.EDOAL, "PropertyValueRestriction", true), RELATION_DOMAIN_COND(Namespace.EDOAL, "RelationDomainRestriction", true), - PROPERTY_VALUE_COND(Namespace.EDOAL, "AttributeValueRestriction", true), + RELATION_CODOMAIN_COND(Namespace.EDOAL, "RelationCoDomainRestriction", true), REFLEXIVE( Namespace.EDOAL, "reflexive", Constructor.REFLEXIVE), RELATION_EXPR( Namespace.EDOAL, "Relation", true), //SERVICE( Namespace.EDOAL, "service"), @@ -121,10 +122,10 @@ public enum SyntaxElement { TOCLASS( Namespace.EDOAL, "class"), TRANSF( Namespace.EDOAL, "transf"), TRANSITIVE( Namespace.EDOAL, "transitive", Constructor.TRANSITIVE), - TYPE_COND( Namespace.EDOAL, "TypeRestriction", true), + TYPE_COND(Namespace.EDOAL, "AttributeTypeRestriction", true), // undocumented VALUE( Namespace.EDOAL, "value"), VAR( Namespace.EDOAL, "var"), - VALUE_COND( Namespace.EDOAL, "ValueRestriction", true), + VALUE_COND(Namespace.EDOAL, "AttributeValueRestriction", true), ; /** Operator to determine how to combine the expressions */ diff --git a/test/src/EDOALExportTest.java b/test/src/EDOALExportTest.java index da505fc7..a4f445b5 100644 --- a/test/src/EDOALExportTest.java +++ b/test/src/EDOALExportTest.java @@ -205,11 +205,11 @@ Does bot work anymore because not visitable + "<edoal:value><edoal:Literal edoal:string=\"18\"/></edoal:value>" + "</edoal:AttributeValueRestriction>" ); toExport = new ClassTypeRestriction( new PropertyId(new URI("http://my.sister#age")), new Datatype("integer-under-100")); - assertEquals( render( toExport ), "<edoal:PropertyTypeRestriction>" + assertEquals( render( toExport ), "<edoal:AttributeTypeRestriction>" + "<edoal:onAttribute><edoal:Property rdf:about=\"http://my.sister#age\"/></edoal:onAttribute>" //+ "<edoal:comparator rdf:resource=\"http://www.w3.org/2001/XMLSchema#equals\"/>" + "<edoal:datatype>integer-under-100</edoal:datatype>" - + "</edoal:PropertyTypeRestriction>" ); + + "</edoal:AttributeTypeRestriction>" ); toExport = new ClassOccurenceRestriction( new PropertyId(new URI("http://my.sister#age")), Comparator.GREATER, 18); assertEquals( render( toExport ), "<edoal:AttributeOccurenceRestriction>" + "<edoal:onAttribute><edoal:Property rdf:about=\"http://my.sister#age\"/></edoal:onAttribute>" @@ -283,16 +283,16 @@ Does bot work anymore because not visitable @Test(groups = { "full", "omwg", "raw" }, dependsOnMethods = {"setUp"}) public void testExportPropertyCond() throws Exception { assertEquals( render( new PropertyDomainRestriction(new ClassId("http://meine/tolle/restriction")) ), - "<edoal:DomainRestriction><edoal:class>" + "<edoal:PropertyDomainRestriction><edoal:class>" + "<edoal:Class rdf:about=\"http://meine/tolle/restriction\"/>" - + "</edoal:class></edoal:DomainRestriction>" ); + + "</edoal:class></edoal:PropertyDomainRestriction>" ); assertEquals( render( new PropertyValueRestriction( Comparator.EQUAL, new Value("18"))), - "<edoal:ValueRestriction>" + "<edoal:PropertyValueRestriction>" + "<edoal:comparator rdf:resource=\"http://www.w3.org/2001/XMLSchema#equals\"/>" + "<edoal:value><edoal:Literal edoal:string=\"18\"/></edoal:value>" - + "</edoal:ValueRestriction>" ); + + "</edoal:PropertyValueRestriction>" ); assertEquals( render( new PropertyTypeRestriction(new Datatype("int"))), - "<edoal:TypeRestriction><edoal:datatype>int</edoal:datatype></edoal:TypeRestriction>" ); + "<edoal:PropertyTypeRestriction><edoal:datatype>int</edoal:datatype></edoal:PropertyTypeRestriction>" ); } @Test(groups = { "full", "omwg", "raw" }, dependsOnMethods = {"setUp"}) @@ -331,9 +331,9 @@ Does bot work anymore because not visitable + "<edoal:Property rdf:about=\"http://mein/super/property0\"/>" + "<edoal:Property rdf:about=\"http://mein/super/property1\"/>" + "</edoal:or></edoal:Property>" - + "<edoal:ValueRestriction>" + + "<edoal:PropertyValueRestriction>" + "<edoal:comparator rdf:resource=\"http://www.w3.org/2001/XMLSchema#equals\"/>" - + "<edoal:value><edoal:Literal edoal:string=\"5\"/></edoal:value></edoal:ValueRestriction>" + + "<edoal:value><edoal:Literal edoal:string=\"5\"/></edoal:value></edoal:PropertyValueRestriction>" + "</edoal:and></edoal:Property>"); toExport = new PropertyConstruction( Constructor.NOT, Collections.singleton((PathExpression)new PropertyId(new URI("http://mein/super/property")))); // JE2009-ERROR-HERE @@ -352,13 +352,13 @@ Does bot work anymore because not visitable @Test(groups = { "full", "omwg", "raw" }, dependsOnMethods = {"setUp"}) public void testExportRelationCondCond() throws Exception { RelationRestriction toExport = new RelationDomainRestriction(new ClassId("http://my/super/class")); - assertEquals( render( toExport), "<edoal:DomainRestriction><edoal:class>" + assertEquals( render( toExport), "<edoal:RelationDomainRestriction><edoal:class>" + "<edoal:Class rdf:about=\"http://my/super/class\"/>" - + "</edoal:class></edoal:DomainRestriction>"); + + "</edoal:class></edoal:RelationDomainRestriction>"); toExport = new RelationCoDomainRestriction(new ClassId("http://my/super/class")); - assertEquals( render( toExport), "<edoal:CodomainRestriction><edoal:class>" + assertEquals( render( toExport), "<edoal:RelationCoDomainRestriction><edoal:class>" + "<edoal:Class rdf:about=\"http://my/super/class\"/>" - + "</edoal:class></edoal:CodomainRestriction>"); + + "</edoal:class></edoal:RelationCoDomainRestriction>"); } @Test(groups = { "full", "omwg", "raw" }, dependsOnMethods = {"setUp"}) @@ -395,9 +395,9 @@ Does bot work anymore because not visitable + "<edoal:and rdf:parseType=\"Collection\">" + "<edoal:Relation rdf:about=\"http://my/super/relation0\"/>" + "<edoal:Relation rdf:about=\"http://my/super/relation1\"/>" - + "<edoal:DomainRestriction><edoal:class>" + + "<edoal:RelationDomainRestriction><edoal:class>" + "<edoal:Class rdf:about=\"http://my/super/class\"/>" - + "</edoal:class></edoal:DomainRestriction>" + + "</edoal:class></edoal:RelationDomainRestriction>" + "</edoal:and>" + "</edoal:Relation>"); toExport = new RelationConstruction( Constructor.OR, expressions ); assertEquals( render( toExport ), @@ -405,9 +405,9 @@ Does bot work anymore because not visitable + "<edoal:or rdf:parseType=\"Collection\">" + "<edoal:Relation rdf:about=\"http://my/super/relation0\"/>" + "<edoal:Relation rdf:about=\"http://my/super/relation1\"/>" - + "<edoal:DomainRestriction><edoal:class>" + + "<edoal:RelationDomainRestriction><edoal:class>" + "<edoal:Class rdf:about=\"http://my/super/class\"/>" - + "</edoal:class></edoal:DomainRestriction>" + + "</edoal:class></edoal:RelationDomainRestriction>" + "</edoal:or>" + "</edoal:Relation>"); final Set<PathExpression> expressions2 = new LinkedHashSet<PathExpression>(); @@ -421,9 +421,9 @@ Does bot work anymore because not visitable + "<edoal:Relation><edoal:not>" + "<edoal:Relation rdf:about=\"http://my/super/relation\"/>" + "</edoal:not></edoal:Relation>" - + "<edoal:CodomainRestriction><edoal:class>" + + "<edoal:RelationCoDomainRestriction><edoal:class>" + "<edoal:Class rdf:about=\"http://my/super/class\"/>" - + "</edoal:class></edoal:CodomainRestriction>" + + "</edoal:class></edoal:RelationCoDomainRestriction>" + "</edoal:and>" + "</edoal:Relation>"); toExport = new RelationConstruction( Constructor.INVERSE, Collections.singleton((PathExpression)new RelationId("http://my/super/relation"))); assertEquals( render( toExport ), -- GitLab