diff --git a/src/main/java/be/ugent/mmlab/rml/model/StdTriplesMap.java b/src/main/java/be/ugent/mmlab/rml/model/StdTriplesMap.java index d85f64b..f381cc6 100644 --- a/src/main/java/be/ugent/mmlab/rml/model/StdTriplesMap.java +++ b/src/main/java/be/ugent/mmlab/rml/model/StdTriplesMap.java @@ -90,7 +90,7 @@ public void addPredicateObjectMap(PredicateObjectMap predicateObjectMap) { if (predicateObjectMap != null) predicateObjectMaps.add(predicateObjectMap); } - + public String getName() { return this.name; } diff --git a/src/main/java/be/ugent/mmlab/rml/processor/concrete/XPathProcessor.java b/src/main/java/be/ugent/mmlab/rml/processor/concrete/XPathProcessor.java index 2a9f12c..5d2ed03 100644 --- a/src/main/java/be/ugent/mmlab/rml/processor/concrete/XPathProcessor.java +++ b/src/main/java/be/ugent/mmlab/rml/processor/concrete/XPathProcessor.java @@ -11,6 +11,7 @@ import java.io.File; import java.io.InputStream; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; @@ -19,6 +20,7 @@ import jlibs.xml.Namespaces; import jlibs.xml.sax.dog.NodeItem; import jlibs.xml.sax.dog.XMLDog; +import jlibs.xml.sax.dog.XPathResults; import jlibs.xml.sax.dog.expr.Expression; import jlibs.xml.sax.dog.expr.InstantEvaluationListener; import net.antidot.semantic.rdf.model.impl.sesame.SesameDataSet; @@ -50,43 +52,39 @@ public class XPathProcessor extends AbstractRMLProcessor { private XPathContext nsContext = new XPathContext(); - private DefaultNamespaceContext get_namespaces (){ - //Get the namespaces from xml file? + private DefaultNamespaceContext get_namespaces() { + List list = new ArrayList<>(); + DefaultNamespaceContext dnc = new DefaultNamespaceContext(); - this.nsContext.addNamespace("xsd", Namespaces.URI_XSD); dnc.declarePrefix("xsd", Namespaces.URI_XSD); - this.nsContext.addNamespace("gml", "http://www.opengis.net/gml"); - dnc.declarePrefix("gml", "http://www.opengis.net/gml"); - this.nsContext.addNamespace("agiv", "http://www.agiv.be/agiv"); - dnc.declarePrefix("agiv", "http://www.agiv.be/agiv"); - - this.nsContext.addNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance"); - dnc.declarePrefix("xsi", "http://www.w3.org/2001/XMLSchema-instance"); - this.nsContext.addNamespace("simcore", "http://www.lbl.gov/namespaces/Sim/SimModelCore"); - dnc.declarePrefix("simcore", "http://www.lbl.gov/namespaces/Sim/SimModelCore"); - this.nsContext.addNamespace("simres", "http://www.lbl.gov/namespaces/Sim/ResourcesGeneral"); - dnc.declarePrefix("simres", "http://www.lbl.gov/namespaces/Sim/ResourcesGeneral"); - this.nsContext.addNamespace("simgeom", "http://www.lbl.gov/namespaces/Sim/ResourcesGeometry"); - dnc.declarePrefix("simgeom", "http://www.lbl.gov/namespaces/Sim/ResourcesGeometry"); - this.nsContext.addNamespace("simbldg", "http://www.lbl.gov/namespaces/Sim/BuildingModel"); - dnc.declarePrefix("simbldg", "http://www.lbl.gov/namespaces/Sim/BuildingModel"); - this.nsContext.addNamespace("simmep", "http://www.lbl.gov/namespaces/Sim/MepModel"); - dnc.declarePrefix("simmep", "http://www.lbl.gov/namespaces/Sim/MepModel"); this.nsContext.addNamespace("simmodel", "http://www.lbl.gov/namespaces/Sim/Model"); dnc.declarePrefix("simmodel", "http://www.lbl.gov/namespaces/Sim/Model"); - //spc - this.nsContext.addNamespace("mml","http://www.w3.org/1998/Math/MathML"); - dnc.declarePrefix("mml", "http://www.w3.org/1998/Math/MathML"); - this.nsContext.addNamespace("xlink", "http://www.w3.org/1999/xlink"); - dnc.declarePrefix("xlink", "http://www.w3.org/1999/xlink"); - this.nsContext.addNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance"); - dnc.declarePrefix("xsi", "http://www.w3.org/2001/XMLSchema-instance"); - this.nsContext.addNamespace("tp", "http://www.plazi.org/taxpub"); - dnc.declarePrefix("tp", "http://www.plazi.org/taxpub"); - - return dnc; + XMLDog dog = new XMLDog(dnc); + try { + Expression xpath = dog.addXPath("/*/namespace::*[name()]"); + if (map != null) { + String source = map.getLogicalSource().getIdentifier().toString(); + File sourceFile = new File(source); + log.error("source " + sourceFile.getAbsolutePath()); + + + XPathResults results = dog.sniff(new InputSource(source)); + if (results != null) { + Collection result3 = (Collection) results.getResult(xpath); + for (NodeItem res : result3) { + this.nsContext.addNamespace(res.qualifiedName, res.value); + dnc.declarePrefix(res.qualifiedName, res.value); + } + } + } + } catch (SAXPathException ex) { + Logger.getLogger(XPathProcessor.class.getName()).log(Level.SEVERE, null, ex); + } catch (XPathException ex) { + Logger.getLogger(XPathProcessor.class.getName()).log(Level.SEVERE, null, ex); + } + return dnc; } private String replace (Node node, String expression){ diff --git a/src/test/java/be/ugent/mmlab/rml/MapperTest.java b/src/test/java/be/ugent/mmlab/rml/MapperTest.java index 07d0c87..9b9c19d 100644 --- a/src/test/java/be/ugent/mmlab/rml/MapperTest.java +++ b/src/test/java/be/ugent/mmlab/rml/MapperTest.java @@ -70,12 +70,11 @@ public void testExample4() { assertTrue(desiredOutput(fileToOutputFile).isEqualTo(assertMap(fileToRMLFile))); } - /*public void testExample5() { + public void testExample5() { URL fileToRMLFile = getClass().getResource("/example5/museum-model.rml.ttl"); URL fileToOutputFile = getClass().getResource("/example5/museum.output.ttl"); assertTrue(desiredOutput(fileToOutputFile).isEqualTo(assertMap(fileToRMLFile))); } - }*/ public void testExample6() { URL fileToRMLFile = getClass().getResource("/example6/example.rml.ttl"); diff --git a/src/test/resources/example1/example.rml.ttl b/src/test/resources/example1/example.rml.ttl index 176d92e..421a06e 100755 --- a/src/test/resources/example1/example.rml.ttl +++ b/src/test/resources/example1/example.rml.ttl @@ -8,7 +8,7 @@ <#FromToMaps> rml:logicalSource [ - rml:source "/example1/example1.xml"; + rml:source "src/test/resources/example1/example1.xml"; rml:referenceFormulation ql:XPath; rml:iterator "/notes/note"; ]; @@ -47,7 +47,7 @@ rr:subjectMap [ <#DateTime> rml:logicalSource [ - rml:source "/example1/example1.xml"; + rml:source "src/test/resources/example1/example1.xml"; rml:iterator "/notes/note"; rml:referenceFormulation ql:XPath; ]; diff --git a/src/test/resources/example2/example.rml.ttl b/src/test/resources/example2/example.rml.ttl index df714c7..b076ca8 100755 --- a/src/test/resources/example2/example.rml.ttl +++ b/src/test/resources/example2/example.rml.ttl @@ -8,7 +8,7 @@ <#FromToMaps> rml:logicalSource [ - rml:source "/example2/example2.xml"; + rml:source "src/test/resources/example2/example2.xml"; rml:iterator "/notes/note"; rml:referenceFormulation ql:XPath; ]; @@ -45,7 +45,7 @@ rr:subjectMap [ <#DateTime> rml:logicalSource [ - rml:source "/example2/example2.xml"; + rml:source "src/test/resources/example2/example2.xml"; rml:iterator "/notes/note"; rml:referenceFormulation ql:XPath; ]; diff --git a/src/test/resources/example3/example3.rml.ttl b/src/test/resources/example3/example3.rml.ttl index 64279f1..74924a7 100644 --- a/src/test/resources/example3/example3.rml.ttl +++ b/src/test/resources/example3/example3.rml.ttl @@ -24,7 +24,7 @@ <#AirportMapping> rml:logicalSource [ - rml:source "/example3/Airport.csv"; + rml:source "src/test/resources/example3/Airport.csv"; rml:referenceFormulation ql:CSV ]; rr:subjectMap [ @@ -55,7 +55,7 @@ <#BusMapping> rml:logicalSource[ - rml:source "/example3/Transport.xml"; + rml:source "src/test/resources/example3/Transport.xml"; rml:iterator "/transport/bus"; rml:referenceFormulation ql:XPath; ]; @@ -78,7 +78,7 @@ <#BusStopMapping> rml:logicalSource [ - rml:source "/example3/Transport.xml"; + rml:source "src/test/resources/example3/Transport.xml"; rml:iterator "/transport/bus/route/stop"; rml:referenceFormulation ql:XPath; ]; @@ -96,7 +96,7 @@ <#VenueMapping> rml:logicalSource [ - rml:source "/example3/Venue.json"; + rml:source "src/test/resources/example3/Venue.json"; rml:referenceFormulation ql:JSONPath; rml:iterator "$" ]; @@ -127,7 +127,7 @@ <#LocationMapping> rml:logicalSource [ - rml:source "/example3/Venue.json"; + rml:source "src/test/resources/example3/Venue.json"; rml:referenceFormulation ql:JSONPath; rml:iterator "$" ]; diff --git a/src/test/resources/example4/example4_Venue.rml.ttl b/src/test/resources/example4/example4_Venue.rml.ttl index 14713ae..7203de8 100644 --- a/src/test/resources/example4/example4_Venue.rml.ttl +++ b/src/test/resources/example4/example4_Venue.rml.ttl @@ -17,7 +17,7 @@ <#VenueMapping> rml:logicalSource [ - rml:source "/example4/Venue4.json"; + rml:source "src/test/resources/example4/Venue4.json"; rml:referenceFormulation ql:JSONPath; rml:iterator "$"; ]; diff --git a/src/test/resources/example5/museum-model.rml.ttl b/src/test/resources/example5/museum-model.rml.ttl index cc924a4..6efec8c 100644 --- a/src/test/resources/example5/museum-model.rml.ttl +++ b/src/test/resources/example5/museum-model.rml.ttl @@ -9,9 +9,9 @@ <#SitterMapping> rml:logicalSource [ - rml:source "museum.json"; + rml:source "src/test/resources/example5/museum.json"; rml:referenceFormulation ql:JSONPath; - rml:iterator "$.Sitter"; + rml:iterator "$.[*].Sitter"; ]; rr:subjectMap [ rr:template "http://ex.com/{Name}"; @@ -29,7 +29,7 @@ <#ProductionMapping> rml:logicalSource [ - rml:source "/example5/museum.json"; + rml:source "src/test/resources/example5/museum.json"; rml:referenceFormulation ql:JSONPath; rml:iterator "$.[*]"; ]; @@ -66,7 +66,7 @@ <#ArtworkMapping> rml:logicalSource [ - rml:source "/example5/museum.json"; + rml:source "src/test/resources/example5/museum.json"; rml:referenceFormulation ql:JSONPath; rml:iterator "$.[*]"; ]; @@ -105,7 +105,7 @@ <#ArtistMapping> rml:logicalSource [ - rml:source "/example5/museum.json"; + rml:source "src/test/resources/example5/museum.json"; rml:referenceFormulation ql:JSONPath; rml:iterator "$.[*]"; ]; @@ -139,7 +139,7 @@ <#MoonWalkersMapping> rml:logicalSource [ - rml:source "/example5/museum.json"; + rml:source "src/test/resources/example5/museum.json"; rml:referenceFormulation ql:JSONPath; rml:iterator "$.[*].Sitter[*]"; ]; @@ -161,7 +161,7 @@ <#WikipediaExportMapping> rml:logicalSource [ - rml:source "/example5/moon-walkers.csv"; + rml:source "src/test/resources/example5/moon-walkers.csv"; rml:referenceFormulation ql:CSV; ]; rr:subjectMap [ diff --git a/src/test/resources/example6/example.rml.ttl b/src/test/resources/example6/example.rml.ttl index c8a4b2e..a5a87eb 100644 --- a/src/test/resources/example6/example.rml.ttl +++ b/src/test/resources/example6/example.rml.ttl @@ -8,7 +8,7 @@ <#FromToMaps> rml:logicalSource [ - rml:source "/example6/example6.xml"; + rml:source "src/test/resources/example6/example6.xml"; rml:referenceFormulation ql:XPath; rml:iterator "/notes/note"; ]; @@ -48,7 +48,7 @@ <#DateTime> rml:logicalSource [ - rml:source "/example6/example6.xml"; + rml:source "src/test/resources/example6/example6.xml"; rml:iterator "/notes/note"; rml:referenceFormulation ql:XPath; ]; diff --git a/src/test/resources/example7/example7.rml.ttl b/src/test/resources/example7/example7.rml.ttl index 88b261f..58ea5ce 100644 --- a/src/test/resources/example7/example7.rml.ttl +++ b/src/test/resources/example7/example7.rml.ttl @@ -14,7 +14,7 @@ <#AirportMapping> rml:logicalSource [ - rml:source "/example3/Airport.csv"; + rml:source "src/test/resources/example3/Airport.csv"; rml:referenceFormulation ql:CSV ]; rr:subjectMap [ diff --git a/src/test/resources/example8/simergy.rml.ttl b/src/test/resources/example8/simergy.rml.ttl index 9b18f79..302514b 100644 --- a/src/test/resources/example8/simergy.rml.ttl +++ b/src/test/resources/example8/simergy.rml.ttl @@ -10,7 +10,7 @@ <#SimModelMapping> rml:logicalSource [ - rml:source "/example8/simergy.xml" ; + rml:source "src/test/resources/example8/simergy.xml" ; rml:iterator "/simmodel:SimModel/simmodel:SimAppLibraryDefault_AppLibraryDefault_GlobalLibrary"; rml:referenceFormulation ql:XPath ; ];