commit c87b9151425cf3d71d573c784184422c23981666 parent 40152613d397638b595eb43cb41aac14ac088000 Author: Dan Callaghan <djc@djc.id.au> Date: Sun, 15 Nov 2009 16:48:05 +1000 allow namespace prefix mappings to be customised in rdftemplate Diffstat:
13 files changed, 127 insertions(+), 117 deletions(-) diff --git a/src/main/antlr3/au/com/miskinhill/rdftemplate/selector/Selector.g b/src/main/antlr3/au/com/miskinhill/rdftemplate/selector/Selector.g @@ -2,6 +2,7 @@ grammar Selector; @parser::header { package au.com.miskinhill.rdftemplate.selector; +import java.util.Map; } @parser::members { @@ -13,6 +14,7 @@ package au.com.miskinhill.rdftemplate.selector; private AdaptationResolver adaptationResolver; private PredicateResolver predicateResolver; + private Map<String, String> namespacePrefixMap; public void setAdaptationResolver(AdaptationResolver adaptationResolver) { this.adaptationResolver = adaptationResolver; @@ -22,6 +24,17 @@ package au.com.miskinhill.rdftemplate.selector; this.predicateResolver = predicateResolver; } + public void setNamespacePrefixMap(Map<String, String> map) { + this.namespacePrefixMap = map; + } + + private String ns(String prefix) { + String ns = namespacePrefixMap.get(prefix); + if (ns == null) + throw new InvalidSelectorSyntaxException("Unbound namespace prefix " + prefix); + return ns; + } + } @lexer::header { @@ -119,7 +132,7 @@ traversal returns [Traversal result] : ( '!' { $result.setInverse(true); } | // optional ) - nsprefix=XMLTOKEN { $result.setPropertyNamespacePrefix($nsprefix.text); } + nsprefix=XMLTOKEN { $result.setPropertyNamespace(ns($nsprefix.text)); } ':' localname=XMLTOKEN { $result.setPropertyLocalName($localname.text); } ( '[' @@ -186,7 +199,7 @@ predicate returns [Predicate result] localname=XMLTOKEN { try { - result = predicateClass.getConstructor(String.class, String.class).newInstance($nsprefix.text, $localname.text); + result = predicateClass.getConstructor(String.class, String.class).newInstance(ns($nsprefix.text), $localname.text); } catch (Exception e) { throw new InvalidSelectorSyntaxException(e); } diff --git a/src/main/java/au/com/miskinhill/rdftemplate/NamespacePrefixMapper.java b/src/main/java/au/com/miskinhill/rdftemplate/NamespacePrefixMapper.java @@ -1,41 +0,0 @@ -package au.com.miskinhill.rdftemplate; - -import java.util.HashMap; - -import com.hp.hpl.jena.sparql.vocabulary.FOAF; -import com.hp.hpl.jena.vocabulary.DCTerms; -import com.hp.hpl.jena.vocabulary.DC_11; -import com.hp.hpl.jena.vocabulary.OWL; -import com.hp.hpl.jena.vocabulary.RDF; -import com.hp.hpl.jena.vocabulary.RDFS; -import com.hp.hpl.jena.vocabulary.XSD; - -public final class NamespacePrefixMapper extends HashMap<String, String> { - - private static final long serialVersionUID = 2119318190108418682L; - - private static final NamespacePrefixMapper instance = new NamespacePrefixMapper(); - public static NamespacePrefixMapper getInstance() { - return instance; - } - - private NamespacePrefixMapper() { - put("mhs", "http://miskinhill.com.au/rdfschema/1.0/"); - put("dc", DCTerms.NS); - put("old-dc", DC_11.NS); - put("foaf", FOAF.NS); - put("rdf", RDF.getURI()); - put("rdfs", RDFS.getURI()); - put("xs", XSD.getURI()); - put("xsd", "http://www.w3.org/TR/xmlschema-2/#"); - put("contact", "http://www.w3.org/2000/10/swap/pim/contact#"); - put("geonames", "http://www.geonames.org/ontology#"); - put("sioc", "http://rdfs.org/sioc/ns#"); - put("awol", "http://bblfish.net/work/atom-owl/2006-06-06/#"); - put("lingvoj", "http://www.lingvoj.org/ontology#"); - put("prism", "http://prismstandard.org/namespaces/1.2/basic/"); - put("owl", OWL.NS); - put("rev", "http://purl.org/stuff/rev#"); - } - -} diff --git a/src/main/java/au/com/miskinhill/rdftemplate/selector/AntlrSelectorFactory.java b/src/main/java/au/com/miskinhill/rdftemplate/selector/AntlrSelectorFactory.java @@ -1,5 +1,8 @@ package au.com.miskinhill.rdftemplate.selector; +import java.util.Collections; +import java.util.Map; + import org.antlr.runtime.ANTLRStringStream; import org.antlr.runtime.CharStream; import org.antlr.runtime.CommonTokenStream; @@ -7,27 +10,23 @@ import org.antlr.runtime.RecognitionException; public class AntlrSelectorFactory implements SelectorFactory { - private final AdaptationResolver adaptationResolver; - private final PredicateResolver predicateResolver; + private AdaptationResolver adaptationResolver = new DefaultAdaptationResolver(); + private PredicateResolver predicateResolver = new DefaultPredicateResolver(); + private Map<String, String> namespacePrefixMap = Collections.emptyMap(); public AntlrSelectorFactory() { - this.adaptationResolver = new DefaultAdaptationResolver(); - this.predicateResolver = new DefaultPredicateResolver(); } - public AntlrSelectorFactory(AdaptationResolver adaptationResolver) { + public void setAdaptationResolver(AdaptationResolver adaptationResolver) { this.adaptationResolver = adaptationResolver; - this.predicateResolver = new DefaultPredicateResolver(); } - public AntlrSelectorFactory(PredicateResolver predicateResolver) { - this.adaptationResolver = new DefaultAdaptationResolver(); + public void setPredicateResolver(PredicateResolver predicateResolver) { this.predicateResolver = predicateResolver; } - public AntlrSelectorFactory(AdaptationResolver adaptationResolver, PredicateResolver predicateResolver) { - this.adaptationResolver = adaptationResolver; - this.predicateResolver = predicateResolver; + public void setNamespacePrefixMap(Map<String, String> namespacePrefixMap) { + this.namespacePrefixMap = namespacePrefixMap; } @Override @@ -38,6 +37,7 @@ public class AntlrSelectorFactory implements SelectorFactory { SelectorParser parser = new SelectorParser(tokens); parser.setAdaptationResolver(adaptationResolver); parser.setPredicateResolver(predicateResolver); + parser.setNamespacePrefixMap(namespacePrefixMap); try { return parser.unionSelector(); } catch (RecognitionException e) { diff --git a/src/main/java/au/com/miskinhill/rdftemplate/selector/Traversal.java b/src/main/java/au/com/miskinhill/rdftemplate/selector/Traversal.java @@ -14,11 +14,9 @@ import com.hp.hpl.jena.rdf.model.Resource; import com.hp.hpl.jena.rdf.model.StmtIterator; import org.apache.commons.lang.builder.ToStringBuilder; -import au.com.miskinhill.rdftemplate.NamespacePrefixMapper; - public class Traversal { - private String propertyNamespacePrefix; + private String propertyNamespace; private String propertyLocalName; private boolean inverse = false; private Predicate predicate; @@ -42,9 +40,7 @@ public class Traversal { throw new SelectorEvaluationException("Attempted to traverse non-resource node " + node); } Resource resource = (Resource) node; - Property property = resource.getModel().createProperty( - NamespacePrefixMapper.getInstance().get(propertyNamespacePrefix), - propertyLocalName); + Property property = resource.getModel().createProperty(propertyNamespace, propertyLocalName); List<RDFNode> destinations = new ArrayList<RDFNode>(); if (!inverse) { for (StmtIterator it = resource.listProperties(property); it.hasNext(); ) { @@ -70,7 +66,7 @@ public class Traversal { @Override public String toString() { return new ToStringBuilder(this) - .append("propertyNamespacePrefix", propertyNamespacePrefix) + .append("propertyNamespace", propertyNamespace) .append("propertyLocalName", propertyLocalName) .append("inverse", inverse) .append("predicate", predicate) @@ -87,12 +83,12 @@ public class Traversal { this.propertyLocalName = propertyLocalName; } - public String getPropertyNamespacePrefix() { - return propertyNamespacePrefix; + public String getPropertyNamespace() { + return propertyNamespace; } - public void setPropertyNamespacePrefix(String propertyNamespacePrefix) { - this.propertyNamespacePrefix = propertyNamespacePrefix; + public void setPropertyNamespace(String propertyNamespace) { + this.propertyNamespace = propertyNamespace; } public boolean isInverse() { diff --git a/src/main/java/au/com/miskinhill/rdftemplate/selector/TypePredicate.java b/src/main/java/au/com/miskinhill/rdftemplate/selector/TypePredicate.java @@ -8,20 +8,18 @@ import com.hp.hpl.jena.rdf.model.Statement; import com.hp.hpl.jena.vocabulary.RDF; import org.apache.commons.lang.builder.ToStringBuilder; -import au.com.miskinhill.rdftemplate.NamespacePrefixMapper; - public class TypePredicate implements Predicate { - private final String namespacePrefix; + private final String namespace; private final String localName; - public TypePredicate(String namespacePrefix, String localName) { - this.namespacePrefix = namespacePrefix; + public TypePredicate(String namespace, String localName) { + this.namespace = namespace; this.localName = localName; } - public String getNamespacePrefix() { - return namespacePrefix; + public String getNamespace() { + return namespace; } public String getLocalName() { @@ -35,8 +33,7 @@ public class TypePredicate implements Predicate { throw new SelectorEvaluationException("Attempted to apply [type] to non-resource node " + node); } Resource resource = (Resource) node; - Resource type = resource.getModel().createResource( - NamespacePrefixMapper.getInstance().get(namespacePrefix) + localName); + Resource type = resource.getModel().createResource(namespace + localName); for (Statement statement: (Set<Statement>) resource.listProperties(RDF.type).toSet()) { if (statement.getObject().equals(type)) return true; @@ -46,7 +43,7 @@ public class TypePredicate implements Predicate { @Override public String toString() { - return new ToStringBuilder(this).append(namespacePrefix).append(localName).toString(); + return new ToStringBuilder(this).append(namespace).append(localName).toString(); } } diff --git a/src/test/java/au/com/miskinhill/rdftemplate/TemplateInterpolatorUnitTest.java b/src/test/java/au/com/miskinhill/rdftemplate/TemplateInterpolatorUnitTest.java @@ -33,7 +33,9 @@ public class TemplateInterpolatorUnitTest { InputStream stream = this.getClass().getResourceAsStream( "/au/com/miskinhill/rdftemplate/test-data.xml"); model.read(stream, ""); - templateInterpolator = new TemplateInterpolator(new AntlrSelectorFactory()); + AntlrSelectorFactory selectorFactory = new AntlrSelectorFactory(); + selectorFactory.setNamespacePrefixMap(TestNamespacePrefixMap.getInstance()); + templateInterpolator = new TemplateInterpolator(selectorFactory); } @Test diff --git a/src/test/java/au/com/miskinhill/rdftemplate/TestNamespacePrefixMap.java b/src/test/java/au/com/miskinhill/rdftemplate/TestNamespacePrefixMap.java @@ -0,0 +1,31 @@ +package au.com.miskinhill.rdftemplate; + +import java.util.HashMap; + +import com.hp.hpl.jena.sparql.vocabulary.FOAF; +import com.hp.hpl.jena.vocabulary.DCTerms; +import com.hp.hpl.jena.vocabulary.RDF; +import org.junit.Ignore; + +@Ignore // why does JUnit think this is a test? +public final class TestNamespacePrefixMap extends HashMap<String, String> { + + public static final String MHS_NS = "http://miskinhill.com.au/rdfschema/1.0/"; + + private static final long serialVersionUID = 2119318190108418683L; + + private static final TestNamespacePrefixMap instance = new TestNamespacePrefixMap(); + public static TestNamespacePrefixMap getInstance() { + return instance; + } + + private TestNamespacePrefixMap() { + put("mhs", MHS_NS); + put("dc", DCTerms.NS); + put("foaf", FOAF.NS); + put("rdf", RDF.getURI()); + put("sioc", "http://rdfs.org/sioc/ns#"); + put("lingvoj", "http://www.lingvoj.org/ontology#"); + } + +} diff --git a/src/test/java/au/com/miskinhill/rdftemplate/selector/EternallyCachingSelectorFactoryUnitTest.java b/src/test/java/au/com/miskinhill/rdftemplate/selector/EternallyCachingSelectorFactoryUnitTest.java @@ -5,11 +5,15 @@ import static org.junit.Assert.assertThat; import org.junit.Test; +import au.com.miskinhill.rdftemplate.TestNamespacePrefixMap; + public class EternallyCachingSelectorFactoryUnitTest { @Test public void shouldCacheSelectors() { - EternallyCachingSelectorFactory factory = new EternallyCachingSelectorFactory(new AntlrSelectorFactory()); + AntlrSelectorFactory wrappedFactory = new AntlrSelectorFactory(); + wrappedFactory.setNamespacePrefixMap(TestNamespacePrefixMap.getInstance()); + EternallyCachingSelectorFactory factory = new EternallyCachingSelectorFactory(wrappedFactory); Selector<?> first = factory.get("dc:creator/foaf:name"); Selector<?> second = factory.get("dc:creator/foaf:name"); assertThat((Selector) first, sameInstance((Selector) second)); diff --git a/src/test/java/au/com/miskinhill/rdftemplate/selector/PredicateMatcher.java b/src/test/java/au/com/miskinhill/rdftemplate/selector/PredicateMatcher.java @@ -16,9 +16,9 @@ public class PredicateMatcher<T extends Predicate> extends BeanPropertyMatcher<T return m; } - public static PredicateMatcher<TypePredicate> typePredicate(String namespacePrefix, String localName) { + public static PredicateMatcher<TypePredicate> typePredicate(String namespace, String localName) { PredicateMatcher<TypePredicate> m = new PredicateMatcher<TypePredicate>(TypePredicate.class); - m.addRequiredProperty("namespacePrefix", equalTo(namespacePrefix)); + m.addRequiredProperty("namespace", equalTo(namespace)); m.addRequiredProperty("localName", equalTo(localName)); return m; } diff --git a/src/test/java/au/com/miskinhill/rdftemplate/selector/SelectorEvaluationUnitTest.java b/src/test/java/au/com/miskinhill/rdftemplate/selector/SelectorEvaluationUnitTest.java @@ -16,6 +16,7 @@ import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; +import au.com.miskinhill.rdftemplate.TestNamespacePrefixMap; import au.com.miskinhill.rdftemplate.datatype.DateDataType; import au.com.miskinhill.rdftemplate.datatype.DateTimeDataType; @@ -23,7 +24,7 @@ public class SelectorEvaluationUnitTest { private Model m; private Resource journal, issue, article, citedArticle, author, anotherAuthor, book, review, anotherReview, obituary, en, ru, forum; - private SelectorFactory selectorFactory; + private AntlrSelectorFactory selectorFactory; @BeforeClass public static void ensureDatatypesRegistered() { @@ -50,6 +51,7 @@ public class SelectorEvaluationUnitTest { ru = m.createResource("http://www.lingvoj.org/lang/ru"); forum = m.createResource("http://miskinhill.com.au/"); selectorFactory = new AntlrSelectorFactory(); + selectorFactory.setNamespacePrefixMap(TestNamespacePrefixMap.getInstance()); } @Test diff --git a/src/test/java/au/com/miskinhill/rdftemplate/selector/SelectorParserUnitTest.java b/src/test/java/au/com/miskinhill/rdftemplate/selector/SelectorParserUnitTest.java @@ -1,54 +1,60 @@ package au.com.miskinhill.rdftemplate.selector; +import static au.com.miskinhill.rdftemplate.TestNamespacePrefixMap.MHS_NS; import static au.com.miskinhill.rdftemplate.selector.AdaptationMatcher.*; import static au.com.miskinhill.rdftemplate.selector.PredicateMatcher.*; -import static au.com.miskinhill.rdftemplate.selector.SelectorMatcher.*; import static au.com.miskinhill.rdftemplate.selector.SelectorComparatorMatcher.*; +import static au.com.miskinhill.rdftemplate.selector.SelectorMatcher.*; import static au.com.miskinhill.rdftemplate.selector.TraversalMatcher.*; import static org.junit.Assert.*; -import org.junit.Before; - import com.hp.hpl.jena.rdf.model.RDFNode; +import com.hp.hpl.jena.sparql.vocabulary.FOAF; +import com.hp.hpl.jena.vocabulary.DCTerms; +import com.hp.hpl.jena.vocabulary.RDF; +import org.junit.Before; import org.junit.Test; +import au.com.miskinhill.rdftemplate.TestNamespacePrefixMap; + public class SelectorParserUnitTest { - private SelectorFactory factory; + private AntlrSelectorFactory factory; @Before public void setUp() { factory = new AntlrSelectorFactory(); + factory.setNamespacePrefixMap(TestNamespacePrefixMap.getInstance()); } @Test public void shouldRecogniseSingleTraversal() throws Exception { Selector<RDFNode> selector = factory.get("dc:creator").withResultType(RDFNode.class); - assertThat(selector, selector(traversal("dc", "creator"))); + assertThat(selector, selector(traversal(DCTerms.NS, "creator"))); } @Test public void shouldRecogniseMultipleTraversals() throws Exception { Selector<RDFNode> selector = factory.get("dc:creator/foaf:name").withResultType(RDFNode.class); assertThat(selector, selector( - traversal("dc", "creator"), - traversal("foaf", "name"))); + traversal(DCTerms.NS, "creator"), + traversal(FOAF.NS, "name"))); } @Test public void shouldRecogniseInverseTraversal() throws Exception { Selector<RDFNode> selector = factory.get("!dc:isPartOf/!dc:isPartOf").withResultType(RDFNode.class); assertThat(selector, selector( - traversal("dc", "isPartOf").inverse(), - traversal("dc", "isPartOf").inverse())); + traversal(DCTerms.NS, "isPartOf").inverse(), + traversal(DCTerms.NS, "isPartOf").inverse())); } @Test public void shouldRecogniseSortOrder() throws Exception { Selector<RDFNode> selector = factory.get("!mhs:isIssueOf(mhs:publicationDate#comparable-lv)").withResultType(RDFNode.class); assertThat(selector, selector( - traversal("mhs", "isIssueOf").inverse() - .withSortOrder(selectorComparator(selector(traversal("mhs", "publicationDate")) + traversal(MHS_NS, "isIssueOf").inverse() + .withSortOrder(selectorComparator(selector(traversal(MHS_NS, "publicationDate")) .withAdaptation(comparableLVAdaptation()))))); } @@ -56,8 +62,8 @@ public class SelectorParserUnitTest { public void shouldRecogniseReverseSortOrder() throws Exception { Selector<RDFNode> selector = factory.get("!mhs:isIssueOf(~mhs:publicationDate#comparable-lv)").withResultType(RDFNode.class); assertThat(selector, selector( - traversal("mhs", "isIssueOf").inverse() - .withSortOrder(selectorComparator(selector(traversal("mhs", "publicationDate")) + traversal(MHS_NS, "isIssueOf").inverse() + .withSortOrder(selectorComparator(selector(traversal(MHS_NS, "publicationDate")) .withAdaptation(comparableLVAdaptation())).reversed()))); } @@ -65,8 +71,8 @@ public class SelectorParserUnitTest { public void shouldRecogniseComplexSortOrder() throws Exception { Selector<RDFNode> selector = factory.get("!mhs:reviews(dc:isPartOf/mhs:publicationDate#comparable-lv)").withResultType(RDFNode.class); assertThat(selector, selector( - traversal("mhs", "reviews") - .withSortOrder(selectorComparator(selector(traversal("dc", "isPartOf"), traversal("mhs", "publicationDate")) + traversal(MHS_NS, "reviews") + .withSortOrder(selectorComparator(selector(traversal(DCTerms.NS, "isPartOf"), traversal(MHS_NS, "publicationDate")) .withAdaptation(comparableLVAdaptation()))))); } @@ -74,7 +80,7 @@ public class SelectorParserUnitTest { public void shouldRecogniseUriAdaptation() throws Exception { Selector<?> selector = factory.get("mhs:coverThumbnail#uri"); assertThat(selector, selector( - traversal("mhs", "coverThumbnail")) + traversal(MHS_NS, "coverThumbnail")) .withAdaptation(uriAdaptation())); } @@ -88,7 +94,7 @@ public class SelectorParserUnitTest { public void shouldRecogniseUriSliceAdaptation() throws Exception { Selector<?> selector = factory.get("dc:identifier[uri-prefix='urn:issn:']#uri-slice(9)"); assertThat(selector, selector( - traversal("dc", "identifier") + traversal(DCTerms.NS, "identifier") .withPredicate(uriPrefixPredicate("urn:issn:"))) .withAdaptation(uriSliceAdaptation(9))); } @@ -99,10 +105,10 @@ public class SelectorParserUnitTest { "!mhs:isIssueOf[uri-prefix='http://miskinhill.com.au/journals/'](~mhs:publicationDate#comparable-lv)") .withResultType(RDFNode.class); assertThat(selector, selector( - traversal("mhs", "isIssueOf") + traversal(MHS_NS, "isIssueOf") .inverse() .withPredicate(uriPrefixPredicate("http://miskinhill.com.au/journals/")) - .withSortOrder(selectorComparator(selector(traversal("mhs", "publicationDate")) + .withSortOrder(selectorComparator(selector(traversal(MHS_NS, "publicationDate")) .withAdaptation(comparableLVAdaptation())).reversed()))); } @@ -112,12 +118,12 @@ public class SelectorParserUnitTest { "!mhs:isIssueOf(~mhs:publicationDate#comparable-lv)[0]/mhs:coverThumbnail#uri") .withResultType(String.class); assertThat(selector, selector( - traversal("mhs", "isIssueOf") + traversal(MHS_NS, "isIssueOf") .inverse() - .withSortOrder(selectorComparator(selector(traversal("mhs", "publicationDate")) + .withSortOrder(selectorComparator(selector(traversal(MHS_NS, "publicationDate")) .withAdaptation(comparableLVAdaptation())).reversed()) .withSubscript(0), - traversal("mhs", "coverThumbnail")) + traversal(MHS_NS, "coverThumbnail")) .withAdaptation(uriAdaptation())); } @@ -125,8 +131,8 @@ public class SelectorParserUnitTest { public void shouldRecogniseLVAdaptation() throws Exception { Selector<Object> selector = factory.get("dc:language/lingvoj:iso1#lv").withResultType(Object.class); assertThat(selector, selector( - traversal("dc", "language"), - traversal("lingvoj", "iso1")) + traversal(DCTerms.NS, "language"), + traversal("http://www.lingvoj.org/ontology#", "iso1")) .withAdaptation(lvAdaptation())); } @@ -134,16 +140,16 @@ public class SelectorParserUnitTest { public void shouldRecogniseTypePredicate() throws Exception { Selector<RDFNode> selector = factory.get("!dc:creator[type=mhs:Review]").withResultType(RDFNode.class); assertThat(selector, selector( - traversal("dc", "creator").inverse().withPredicate(typePredicate("mhs", "Review")))); + traversal(DCTerms.NS, "creator").inverse().withPredicate(typePredicate(MHS_NS, "Review")))); } @Test public void shouldRecogniseAndCombinationOfPredicates() throws Exception { Selector<RDFNode> selector = factory.get("!dc:creator[type=mhs:Review and uri-prefix='http://miskinhill.com.au/journals/']").withResultType(RDFNode.class); assertThat(selector, selector( - traversal("dc", "creator").inverse() + traversal(DCTerms.NS, "creator").inverse() .withPredicate(booleanAndPredicate( - typePredicate("mhs", "Review"), + typePredicate(MHS_NS, "Review"), uriPrefixPredicate("http://miskinhill.com.au/journals/"))))); } @@ -151,25 +157,25 @@ public class SelectorParserUnitTest { public void shouldRecogniseUnion() throws Exception { Selector<RDFNode> selector = factory.get("!dc:creator | !mhs:translator").withResultType(RDFNode.class); assertThat((UnionSelector<RDFNode>) selector, unionSelector( - selector(traversal("dc", "creator").inverse()), - selector(traversal("mhs", "translator").inverse()))); + selector(traversal(DCTerms.NS, "creator").inverse()), + selector(traversal(MHS_NS, "translator").inverse()))); } @Test public void shouldRecogniseMultipleSortSelectors() throws Exception { Selector<RDFNode> selector = factory.get("!dc:creator(~dc:isPartOf/mhs:publicationDate#comparable-lv,mhs:startPage#comparable-lv)").withResultType(RDFNode.class); assertThat(selector, selector( - traversal("dc", "creator").inverse() + traversal(DCTerms.NS, "creator").inverse() .withSortOrder( - selectorComparator(selector(traversal("dc", "isPartOf"), traversal("mhs", "publicationDate")) + selectorComparator(selector(traversal(DCTerms.NS, "isPartOf"), traversal(MHS_NS, "publicationDate")) .withAdaptation(comparableLVAdaptation())).reversed(), - selectorComparator(selector(traversal("mhs", "startPage")).withAdaptation(comparableLVAdaptation()))))); + selectorComparator(selector(traversal(MHS_NS, "startPage")).withAdaptation(comparableLVAdaptation()))))); } @Test public void shouldRecogniseFormattedDTAdaptation() throws Exception { Selector<?> selector = factory.get("dc:created#formatted-dt('d MMMM yyyy')"); - assertThat(selector, selector(traversal("dc", "created")) + assertThat(selector, selector(traversal(DCTerms.NS, "created")) .withAdaptation(formattedDTAdaptation("d MMMM yyyy"))); } @@ -177,7 +183,7 @@ public class SelectorParserUnitTest { public void shouldRecogniseRdfType() throws Exception { // was broken due to ANTLR being confused about the literal string "type" which was hardcoded to be a predicate Selector<RDFNode> selector = factory.get("rdf:type").withResultType(RDFNode.class); - assertThat(selector, selector(traversal("rdf", "type"))); + assertThat(selector, selector(traversal(RDF.getURI(), "type"))); } @Test(expected = InvalidSelectorSyntaxException.class) diff --git a/src/test/java/au/com/miskinhill/rdftemplate/selector/TraversalMatcher.java b/src/test/java/au/com/miskinhill/rdftemplate/selector/TraversalMatcher.java @@ -14,9 +14,9 @@ public class TraversalMatcher extends BeanPropertyMatcher<Traversal> { super(Traversal.class); } - public static TraversalMatcher traversal(String propertyNamespacePrefix, String propertyLocalName) { + public static TraversalMatcher traversal(String propertyNamespace, String propertyLocalName) { TraversalMatcher m = new TraversalMatcher(); - m.addRequiredProperty("propertyNamespacePrefix", equalTo(propertyNamespacePrefix)); + m.addRequiredProperty("propertyNamespace", equalTo(propertyNamespace)); m.addRequiredProperty("propertyLocalName", equalTo(propertyLocalName)); return m; } diff --git a/src/test/resources/au/com/miskinhill/rdftemplate/test-data.xml b/src/test/resources/au/com/miskinhill/rdftemplate/test-data.xml @@ -43,7 +43,7 @@ <dc:description rdf:parseType="Literal"><div xmlns="http://www.w3.org/1999/xhtml" lang="en"><p><em>Test Journal</em> is a journal.</p></div></dc:description> <dc:language rdf:resource="http://www.lingvoj.org/lang/en" /> <dc:language rdf:resource="http://www.lingvoj.org/lang/ru" /> - <mhs:beginningDate>1987</mhs:beginningDate> + <mhs:beginningDate rdf:datatype="http://www.w3.org/TR/xmlschema-2/#date">1987</mhs:beginningDate> </mhs:Journal> <lingvoj:Lingvo rdf:about="http://www.lingvoj.org/lang/en"> <lingvoj:iso1>en</lingvoj:iso1>