http://git-wip-us.apache.org/repos/asf/jena/blob/3d70d735/jena-core/testing/wg/localtests/ManifestRestriction001.rdf ---------------------------------------------------------------------- diff --git a/jena-core/testing/wg/localtests/ManifestRestriction001.rdf b/jena-core/testing/wg/localtests/ManifestRestriction001.rdf index b125d17..1cee138 100644 --- a/jena-core/testing/wg/localtests/ManifestRestriction001.rdf +++ b/jena-core/testing/wg/localtests/ManifestRestriction001.rdf @@ -1,30 +1,30 @@ -<!-- - Local test files use in Jena2 development ---> -<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' - xmlns:rdfs='http://www.w3.org/2000/01/rdf-schema#' - xmlns:rtest='http://www.w3.org/2000/10/rdf-tests/rdfcore/testSchema#' - xmlns:otest='http://www.w3.org/2002/03owlt/testOntology#' - xmlns:dc='http://purl.org/dc/elements/1.0/' - xmlns='http://www.w3.org/2002/03owlt/localtests/ManifestRestriction001#' - xmlns:owl='http://www.w3.org/2002/07/owl#' - xml:base='http://www.w3.org/2002/03owlt/localtests/ManifestRestriction001' -> -<otest:PositiveEntailmentTest rdf:ID='intersection1'> - <rtest:status>Jena internal</rtest:status> - <dc:creator>Dave Reynolds</dc:creator> - <rtest:description rdf:parseType='Literal'> - Test core intersectionOf processing - 'if' direction. - </rtest:description> - <rtest:premiseDocument> - <rtest:RDF-XML-Document rdf:about='premisesRestriction001' > - <otest:level rdf:resource='http://www.w3.org/2002/03owlt/testOntology#Lite' /> - </rtest:RDF-XML-Document> - </rtest:premiseDocument> - <rtest:conclusionDocument> - <rtest:RDF-XML-Document rdf:about='conclusionsRestriction001' > - <otest:level rdf:resource='http://www.w3.org/2002/03owlt/testOntology#Lite' /> - </rtest:RDF-XML-Document> - </rtest:conclusionDocument> -</otest:PositiveEntailmentTest > -</rdf:RDF> +<!-- + Local test files use in Jena2 development +--> +<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' + xmlns:rdfs='http://www.w3.org/2000/01/rdf-schema#' + xmlns:rtest='http://www.w3.org/2000/10/rdf-tests/rdfcore/testSchema#' + xmlns:otest='http://www.w3.org/2002/03owlt/testOntology#' + xmlns:dc='http://purl.org/dc/elements/1.0/' + xmlns='http://www.w3.org/2002/03owlt/localtests/ManifestRestriction001#' + xmlns:owl='http://www.w3.org/2002/07/owl#' + xml:base='http://www.w3.org/2002/03owlt/localtests/ManifestRestriction001' +> +<otest:PositiveEntailmentTest rdf:ID='intersection1'> + <rtest:status>Jena internal</rtest:status> + <dc:creator>Dave Reynolds</dc:creator> + <rtest:description rdf:parseType='Literal'> + Test core intersectionOf processing - 'if' direction. + </rtest:description> + <rtest:premiseDocument> + <rtest:RDF-XML-Document rdf:about='premisesRestriction001' > + <otest:level rdf:resource='http://www.w3.org/2002/03owlt/testOntology#Lite' /> + </rtest:RDF-XML-Document> + </rtest:premiseDocument> + <rtest:conclusionDocument> + <rtest:RDF-XML-Document rdf:about='conclusionsRestriction001' > + <otest:level rdf:resource='http://www.w3.org/2002/03owlt/testOntology#Lite' /> + </rtest:RDF-XML-Document> + </rtest:conclusionDocument> +</otest:PositiveEntailmentTest > +</rdf:RDF>
http://git-wip-us.apache.org/repos/asf/jena/blob/3d70d735/jena-core/testing/wg/localtests/ManifestSubclass001.rdf ---------------------------------------------------------------------- diff --git a/jena-core/testing/wg/localtests/ManifestSubclass001.rdf b/jena-core/testing/wg/localtests/ManifestSubclass001.rdf index 603a183..b91aa4a 100644 --- a/jena-core/testing/wg/localtests/ManifestSubclass001.rdf +++ b/jena-core/testing/wg/localtests/ManifestSubclass001.rdf @@ -1,30 +1,30 @@ -<!-- - Local test files use in Jena2 development ---> -<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' - xmlns:rdfs='http://www.w3.org/2000/01/rdf-schema#' - xmlns:rtest='http://www.w3.org/2000/10/rdf-tests/rdfcore/testSchema#' - xmlns:otest='http://www.w3.org/2002/03owlt/testOntology#' - xmlns:dc='http://purl.org/dc/elements/1.0/' - xmlns='http://www.w3.org/2002/03owlt/localtests/ManifestSubclass001#' - xmlns:owl='http://www.w3.org/2002/07/owl#' - xml:base='http://www.w3.org/2002/03owlt/localtests/ManifestSubclass001' -> -<otest:PositiveEntailmentTest rdf:ID='intersection1'> - <rtest:status>Jena internal</rtest:status> - <dc:creator>Dave Reynolds</dc:creator> - <rtest:description rdf:parseType='Literal'> - Basic subclass closure checking. - </rtest:description> - <rtest:premiseDocument> - <rtest:RDF-XML-Document rdf:about='premisesSubclass001' > - <otest:level rdf:resource='http://www.w3.org/2002/03owlt/testOntology#Lite' /> - </rtest:RDF-XML-Document> - </rtest:premiseDocument> - <rtest:conclusionDocument> - <rtest:RDF-XML-Document rdf:about='conclusionsSubclass001' > - <otest:level rdf:resource='http://www.w3.org/2002/03owlt/testOntology#Lite' /> - </rtest:RDF-XML-Document> - </rtest:conclusionDocument> -</otest:PositiveEntailmentTest > -</rdf:RDF> +<!-- + Local test files use in Jena2 development +--> +<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' + xmlns:rdfs='http://www.w3.org/2000/01/rdf-schema#' + xmlns:rtest='http://www.w3.org/2000/10/rdf-tests/rdfcore/testSchema#' + xmlns:otest='http://www.w3.org/2002/03owlt/testOntology#' + xmlns:dc='http://purl.org/dc/elements/1.0/' + xmlns='http://www.w3.org/2002/03owlt/localtests/ManifestSubclass001#' + xmlns:owl='http://www.w3.org/2002/07/owl#' + xml:base='http://www.w3.org/2002/03owlt/localtests/ManifestSubclass001' +> +<otest:PositiveEntailmentTest rdf:ID='intersection1'> + <rtest:status>Jena internal</rtest:status> + <dc:creator>Dave Reynolds</dc:creator> + <rtest:description rdf:parseType='Literal'> + Basic subclass closure checking. + </rtest:description> + <rtest:premiseDocument> + <rtest:RDF-XML-Document rdf:about='premisesSubclass001' > + <otest:level rdf:resource='http://www.w3.org/2002/03owlt/testOntology#Lite' /> + </rtest:RDF-XML-Document> + </rtest:premiseDocument> + <rtest:conclusionDocument> + <rtest:RDF-XML-Document rdf:about='conclusionsSubclass001' > + <otest:level rdf:resource='http://www.w3.org/2002/03owlt/testOntology#Lite' /> + </rtest:RDF-XML-Document> + </rtest:conclusionDocument> +</otest:PositiveEntailmentTest > +</rdf:RDF> http://git-wip-us.apache.org/repos/asf/jena/blob/3d70d735/jena-core/testing/wg/localtests/conclusions008.rdf ---------------------------------------------------------------------- diff --git a/jena-core/testing/wg/localtests/conclusions008.rdf b/jena-core/testing/wg/localtests/conclusions008.rdf index 4aec7e5..394347b 100644 --- a/jena-core/testing/wg/localtests/conclusions008.rdf +++ b/jena-core/testing/wg/localtests/conclusions008.rdf @@ -1,24 +1,24 @@ -<?xml version="1.0"?> -<!-- - Local test files use in Jena2 development - - Infer domain/range from inverseof ---> - -<!DOCTYPE rdf:RDF [ - <!ENTITY eg 'urn:x-hp:eg'> - <!ENTITY rdf 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'> - <!ENTITY rdfs 'http://www.w3.org/2000/01/rdf-schema#'> - <!ENTITY xsd 'http://www.w3.org/2001/XMLSchema#'> - <!ENTITY owl "http://www.w3.org/2002/07/owl#" > -]> - -<rdf:RDF xmlns:rdf="&rdf;" xmlns:rdfs="&rdfs;" xmlns:xsd="&xsd;" xmlns:owl="&owl;" - xml:base="⪚" xmlns="⪚#"> - - <owl:ObjectProperty rdf:about="#q"> - <rdfs:domain rdf:resource="⪚#B" /> - <rdfs:range rdf:resource="⪚#A" /> - </owl:ObjectProperty> - -</rdf:RDF> +<?xml version="1.0"?> +<!-- + Local test files use in Jena2 development + + Infer domain/range from inverseof +--> + +<!DOCTYPE rdf:RDF [ + <!ENTITY eg 'urn:x-hp:eg'> + <!ENTITY rdf 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'> + <!ENTITY rdfs 'http://www.w3.org/2000/01/rdf-schema#'> + <!ENTITY xsd 'http://www.w3.org/2001/XMLSchema#'> + <!ENTITY owl "http://www.w3.org/2002/07/owl#" > +]> + +<rdf:RDF xmlns:rdf="&rdf;" xmlns:rdfs="&rdfs;" xmlns:xsd="&xsd;" xmlns:owl="&owl;" + xml:base="⪚" xmlns="⪚#"> + + <owl:ObjectProperty rdf:about="#q"> + <rdfs:domain rdf:resource="⪚#B" /> + <rdfs:range rdf:resource="⪚#A" /> + </owl:ObjectProperty> + +</rdf:RDF> http://git-wip-us.apache.org/repos/asf/jena/blob/3d70d735/jena-core/testing/wg/localtests/conclusionsRestriction001.rdf ---------------------------------------------------------------------- diff --git a/jena-core/testing/wg/localtests/conclusionsRestriction001.rdf b/jena-core/testing/wg/localtests/conclusionsRestriction001.rdf index 20de9e2..90a6ff9 100644 --- a/jena-core/testing/wg/localtests/conclusionsRestriction001.rdf +++ b/jena-core/testing/wg/localtests/conclusionsRestriction001.rdf @@ -1,17 +1,17 @@ -<!-- - Local test files use in Jena2 development - - Test core intersectionOf processing - 'if' direction. ---> -<rdf:RDF - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" - xmlns:owl="http://www.w3.org/2002/07/owl#" - xml:base="http://www.w3.org/2002/03owlt/equivalentClass/premisesRestriction001" > - - <owl:Class rdf:ID="c1"> - <!-- <owl:equivalentClass rdf:resource="#c2" /> --> - <rdfs:subClassOf rdf:resource="#c2" /> - </owl:Class> - -</rdf:RDF> +<!-- + Local test files use in Jena2 development + + Test core intersectionOf processing - 'if' direction. +--> +<rdf:RDF + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" + xmlns:owl="http://www.w3.org/2002/07/owl#" + xml:base="http://www.w3.org/2002/03owlt/equivalentClass/premisesRestriction001" > + + <owl:Class rdf:ID="c1"> + <!-- <owl:equivalentClass rdf:resource="#c2" /> --> + <rdfs:subClassOf rdf:resource="#c2" /> + </owl:Class> + +</rdf:RDF> http://git-wip-us.apache.org/repos/asf/jena/blob/3d70d735/jena-core/testing/wg/localtests/conclusionsSubclass001.rdf ---------------------------------------------------------------------- diff --git a/jena-core/testing/wg/localtests/conclusionsSubclass001.rdf b/jena-core/testing/wg/localtests/conclusionsSubclass001.rdf index fa2fe3a..269c1d3 100644 --- a/jena-core/testing/wg/localtests/conclusionsSubclass001.rdf +++ b/jena-core/testing/wg/localtests/conclusionsSubclass001.rdf @@ -1,20 +1,20 @@ -<!-- - Local test files use in Jena2 development - - Test core intersectionOf processing - 'if' direction. ---> -<rdf:RDF - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" - xmlns:owl="http://www.w3.org/2002/07/owl#" - xml:base="http://www.w3.org/2002/03owlt/equivalentClass/premisesSubclass001" > - - <rdf:Description rdf:about="#a"> - <rdfs:subClassOf rdf:resource="#c"/> - </rdf:Description> - - <rdf:Description rdf:about="http://www.w3.org/2002/07/owl#Thing"> - <owl:equivalentClass rdf:resource="#d"/> - </rdf:Description> - -</rdf:RDF> +<!-- + Local test files use in Jena2 development + + Test core intersectionOf processing - 'if' direction. +--> +<rdf:RDF + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" + xmlns:owl="http://www.w3.org/2002/07/owl#" + xml:base="http://www.w3.org/2002/03owlt/equivalentClass/premisesSubclass001" > + + <rdf:Description rdf:about="#a"> + <rdfs:subClassOf rdf:resource="#c"/> + </rdf:Description> + + <rdf:Description rdf:about="http://www.w3.org/2002/07/owl#Thing"> + <owl:equivalentClass rdf:resource="#d"/> + </rdf:Description> + +</rdf:RDF> http://git-wip-us.apache.org/repos/asf/jena/blob/3d70d735/jena-core/testing/wg/localtests/premises008.rdf ---------------------------------------------------------------------- diff --git a/jena-core/testing/wg/localtests/premises008.rdf b/jena-core/testing/wg/localtests/premises008.rdf index f85c1f5..9df8af7 100644 --- a/jena-core/testing/wg/localtests/premises008.rdf +++ b/jena-core/testing/wg/localtests/premises008.rdf @@ -1,31 +1,31 @@ -<?xml version="1.0"?> -<!-- - Local test files use in Jena2 development - - Infer domain/range from inverseof ---> - -<!DOCTYPE rdf:RDF [ - <!ENTITY eg 'urn:x-hp:eg'> - <!ENTITY rdf 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'> - <!ENTITY rdfs 'http://www.w3.org/2000/01/rdf-schema#'> - <!ENTITY xsd 'http://www.w3.org/2001/XMLSchema#'> - <!ENTITY owl "http://www.w3.org/2002/07/owl#" > -]> - -<rdf:RDF xmlns:rdf="&rdf;" xmlns:rdfs="&rdfs;" xmlns:xsd="&xsd;" xmlns:owl="&owl;" - xml:base="⪚" xmlns="⪚#"> - - <owl:Class rdf:about="#A" /> - <owl:Class rdf:about="#B" /> - - <owl:ObjectProperty rdf:about="#p"> - <rdfs:domain rdf:resource="⪚#A" /> - <rdfs:range rdf:resource="⪚#B" /> - </owl:ObjectProperty> - - <owl:ObjectProperty rdf:about="#q"> - <owl:inverseOf rdf:resource="⪚#p"/> - </owl:ObjectProperty> - -</rdf:RDF> +<?xml version="1.0"?> +<!-- + Local test files use in Jena2 development + + Infer domain/range from inverseof +--> + +<!DOCTYPE rdf:RDF [ + <!ENTITY eg 'urn:x-hp:eg'> + <!ENTITY rdf 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'> + <!ENTITY rdfs 'http://www.w3.org/2000/01/rdf-schema#'> + <!ENTITY xsd 'http://www.w3.org/2001/XMLSchema#'> + <!ENTITY owl "http://www.w3.org/2002/07/owl#" > +]> + +<rdf:RDF xmlns:rdf="&rdf;" xmlns:rdfs="&rdfs;" xmlns:xsd="&xsd;" xmlns:owl="&owl;" + xml:base="⪚" xmlns="⪚#"> + + <owl:Class rdf:about="#A" /> + <owl:Class rdf:about="#B" /> + + <owl:ObjectProperty rdf:about="#p"> + <rdfs:domain rdf:resource="⪚#A" /> + <rdfs:range rdf:resource="⪚#B" /> + </owl:ObjectProperty> + + <owl:ObjectProperty rdf:about="#q"> + <owl:inverseOf rdf:resource="⪚#p"/> + </owl:ObjectProperty> + +</rdf:RDF> http://git-wip-us.apache.org/repos/asf/jena/blob/3d70d735/jena-core/testing/wg/localtests/premisesRestriction001.rdf ---------------------------------------------------------------------- diff --git a/jena-core/testing/wg/localtests/premisesRestriction001.rdf b/jena-core/testing/wg/localtests/premisesRestriction001.rdf index 2e724bc..1ecf367 100644 --- a/jena-core/testing/wg/localtests/premisesRestriction001.rdf +++ b/jena-core/testing/wg/localtests/premisesRestriction001.rdf @@ -1,33 +1,33 @@ -<!-- - Local test files use in Jena2 development - - Test core intersectionOf processing - 'if' direction. ---> -<rdf:RDF - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" - xmlns:owl="http://www.w3.org/2002/07/owl#" - xml:base="http://www.w3.org/2002/03owlt/equivalentClass/premisesRestriction001" > - - <owl:Class rdf:about="#d" /> - <owl:ObjectProperty rdf:about="#p" /> - - <owl:Class rdf:ID="c1"> - <owl:equivalentClass> - <owl:Restriction> - <owl:onProperty rdf:resource="#p"/> - <owl:someValuesFrom rdf:resource="#d" /> - </owl:Restriction> - </owl:equivalentClass> - </owl:Class> - - <owl:Class rdf:ID="c2"> - <owl:equivalentClass> - <owl:Restriction> - <owl:onProperty rdf:resource="#p"/> - <owl:someValuesFrom rdf:resource="#d" /> - </owl:Restriction> - </owl:equivalentClass> - </owl:Class> - -</rdf:RDF> +<!-- + Local test files use in Jena2 development + + Test core intersectionOf processing - 'if' direction. +--> +<rdf:RDF + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" + xmlns:owl="http://www.w3.org/2002/07/owl#" + xml:base="http://www.w3.org/2002/03owlt/equivalentClass/premisesRestriction001" > + + <owl:Class rdf:about="#d" /> + <owl:ObjectProperty rdf:about="#p" /> + + <owl:Class rdf:ID="c1"> + <owl:equivalentClass> + <owl:Restriction> + <owl:onProperty rdf:resource="#p"/> + <owl:someValuesFrom rdf:resource="#d" /> + </owl:Restriction> + </owl:equivalentClass> + </owl:Class> + + <owl:Class rdf:ID="c2"> + <owl:equivalentClass> + <owl:Restriction> + <owl:onProperty rdf:resource="#p"/> + <owl:someValuesFrom rdf:resource="#d" /> + </owl:Restriction> + </owl:equivalentClass> + </owl:Class> + +</rdf:RDF> http://git-wip-us.apache.org/repos/asf/jena/blob/3d70d735/jena-core/testing/wg/localtests/premisesSubclass001.rdf ---------------------------------------------------------------------- diff --git a/jena-core/testing/wg/localtests/premisesSubclass001.rdf b/jena-core/testing/wg/localtests/premisesSubclass001.rdf index e80bf40..d61c3b9 100644 --- a/jena-core/testing/wg/localtests/premisesSubclass001.rdf +++ b/jena-core/testing/wg/localtests/premisesSubclass001.rdf @@ -1,31 +1,31 @@ -<!-- - Local test files use in Jena2 development - - Test core intersectionOf processing - 'if' direction. ---> -<rdf:RDF - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" - xmlns:owl="http://www.w3.org/2002/07/owl#" - xml:base="http://www.w3.org/2002/03owlt/equivalentClass/premisesSubclass001" > - - <owl:Class rdf:about="#a"> - <rdfs:subClassOf rdf:resource="#b"/> - </owl:Class> - - <owl:Class rdf:about="#b"> - <rdfs:subClassOf rdf:resource="#c"/> - </owl:Class> - - <owl:Class rdf:about="#c"> - <rdfs:subClassOf rdf:resource="#d"/> - </owl:Class> - - <owl:Class rdf:about="#d"> - </owl:Class> - - <rdf:Description rdf:about="http://www.w3.org/2002/07/owl#Thing"> - <rdfs:subClassOf rdf:resource="#d"/> - </rdf:Description> - -</rdf:RDF> +<!-- + Local test files use in Jena2 development + + Test core intersectionOf processing - 'if' direction. +--> +<rdf:RDF + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" + xmlns:owl="http://www.w3.org/2002/07/owl#" + xml:base="http://www.w3.org/2002/03owlt/equivalentClass/premisesSubclass001" > + + <owl:Class rdf:about="#a"> + <rdfs:subClassOf rdf:resource="#b"/> + </owl:Class> + + <owl:Class rdf:about="#b"> + <rdfs:subClassOf rdf:resource="#c"/> + </owl:Class> + + <owl:Class rdf:about="#c"> + <rdfs:subClassOf rdf:resource="#d"/> + </owl:Class> + + <owl:Class rdf:about="#d"> + </owl:Class> + + <rdf:Description rdf:about="http://www.w3.org/2002/07/owl#Thing"> + <rdfs:subClassOf rdf:resource="#d"/> + </rdf:Description> + +</rdf:RDF> http://git-wip-us.apache.org/repos/asf/jena/blob/3d70d735/jena-csv/src/main/java/org/apache/jena/propertytable/Column.java ---------------------------------------------------------------------- diff --git a/jena-csv/src/main/java/org/apache/jena/propertytable/Column.java b/jena-csv/src/main/java/org/apache/jena/propertytable/Column.java index 50d7ebf..5650d07 100644 --- a/jena-csv/src/main/java/org/apache/jena/propertytable/Column.java +++ b/jena-csv/src/main/java/org/apache/jena/propertytable/Column.java @@ -1,45 +1,45 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jena.propertytable; - -import java.util.List; - -import org.apache.jena.graph.Node ; - -/** - * Each Column of the PropertyTable has an unique columnKey Node of the predicate (or p for short). - * - */ -public interface Column { - - /** - * @return the PropertyTable it belongs to - */ - PropertyTable getTable(); - - /** - * @return the columnKey Node of the predicate - */ - Node getColumnKey(); - - /** - * @return all the values within a Column - */ - List<Node> getValues(); - -} +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jena.propertytable; + +import java.util.List; + +import org.apache.jena.graph.Node ; + +/** + * Each Column of the PropertyTable has an unique columnKey Node of the predicate (or p for short). + * + */ +public interface Column { + + /** + * @return the PropertyTable it belongs to + */ + PropertyTable getTable(); + + /** + * @return the columnKey Node of the predicate + */ + Node getColumnKey(); + + /** + * @return all the values within a Column + */ + List<Node> getValues(); + +} http://git-wip-us.apache.org/repos/asf/jena/blob/3d70d735/jena-csv/src/main/java/org/apache/jena/propertytable/PropertyTable.java ---------------------------------------------------------------------- diff --git a/jena-csv/src/main/java/org/apache/jena/propertytable/PropertyTable.java b/jena-csv/src/main/java/org/apache/jena/propertytable/PropertyTable.java index 78c6967..93b68c1 100644 --- a/jena-csv/src/main/java/org/apache/jena/propertytable/PropertyTable.java +++ b/jena-csv/src/main/java/org/apache/jena/propertytable/PropertyTable.java @@ -1,126 +1,126 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jena.propertytable; - -import java.util.Collection; -import java.util.List; - -import org.apache.jena.graph.Node ; -import org.apache.jena.graph.Triple ; -import org.apache.jena.util.iterator.ExtendedIterator ; - -/** - * PropertyTable is designed to be a table of RDF terms, or Nodes in Jena. - * Each Column of the PropertyTable has an unique columnKey Node of the predicate (or p for short). - * Each Row of the PropertyTable has an unique rowKey Node of the subject (or s for short). - * You can use getColumn() to get the Column by its columnKey Node of the predicate, while getRow() for Row. - * - */ -public interface PropertyTable { - - /** - * Query for ?s <p> <o> - * @param column the Column with the columnKey Node of the predicate - * @param value the object (or value) Node - * @return the ExtendedIterator of the matching Triples - */ - ExtendedIterator<Triple> getTripleIterator(Column column, Node value); - - /** - * Query for ?s <p> ?o - * @param column the Column with the columnKey Node of the predicate - * @return the ExtendedIterator of the matching Triples - */ - ExtendedIterator<Triple> getTripleIterator(Column column); - - /** - * Query for ?s ?p <o> - * @param value the object (or value) Node - * @return the ExtendedIterator of the matching Triples - */ - ExtendedIterator<Triple> getTripleIterator(Node value); - - /** - * Query for <s> ?p ?o - * @param row the Row with the rowKey Node of the subject - * @return the ExtendedIterator of the matching Triples - */ - ExtendedIterator<Triple> getTripleIterator(Row row); - - /** - * Query for ?s ?p ?o - * @return all of the Triples of the PropertyTable - */ - ExtendedIterator<Triple> getTripleIterator(); - - /** - * @return all of the Columns of the PropertyTable - */ - Collection<Column> getColumns(); - - /** - * Get Column by its columnKey Node of the predicate - * @param p columnKey Node of the predicate - * @return the Column - */ - Column getColumn(Node p); - - /** - * Create a Column by its columnKey Node of the predicate - * @param p - */ - Column createColumn(Node p); - - /** - * Get Row by its rowKey Node of the subject - * @param s rowKey Node of the subject - * @return the Row - */ - Row getRow(Node s); - - - /** - * Create Row by its rowKey Node of the subject - * @param s rowKey Node of the subject - * @return the Row created - */ - Row createRow(Node s); - - - /** - * Get all of the rows - */ - List<Row> getAllRows() ; - - - /** - * Get all the values within a Column - * @param column - * @return the values - */ - List<Node> getColumnValues(Column column); - - /** - * Get the Rows matching the value of a Column - * @param column the Column with the columnKey Node of the predicate - * @param value the object (or value) Node - * @return the matching Rows - */ - Collection<Row> getMatchingRows(Column column, Node value); - -} +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jena.propertytable; + +import java.util.Collection; +import java.util.List; + +import org.apache.jena.graph.Node ; +import org.apache.jena.graph.Triple ; +import org.apache.jena.util.iterator.ExtendedIterator ; + +/** + * PropertyTable is designed to be a table of RDF terms, or Nodes in Jena. + * Each Column of the PropertyTable has an unique columnKey Node of the predicate (or p for short). + * Each Row of the PropertyTable has an unique rowKey Node of the subject (or s for short). + * You can use getColumn() to get the Column by its columnKey Node of the predicate, while getRow() for Row. + * + */ +public interface PropertyTable { + + /** + * Query for ?s <p> <o> + * @param column the Column with the columnKey Node of the predicate + * @param value the object (or value) Node + * @return the ExtendedIterator of the matching Triples + */ + ExtendedIterator<Triple> getTripleIterator(Column column, Node value); + + /** + * Query for ?s <p> ?o + * @param column the Column with the columnKey Node of the predicate + * @return the ExtendedIterator of the matching Triples + */ + ExtendedIterator<Triple> getTripleIterator(Column column); + + /** + * Query for ?s ?p <o> + * @param value the object (or value) Node + * @return the ExtendedIterator of the matching Triples + */ + ExtendedIterator<Triple> getTripleIterator(Node value); + + /** + * Query for <s> ?p ?o + * @param row the Row with the rowKey Node of the subject + * @return the ExtendedIterator of the matching Triples + */ + ExtendedIterator<Triple> getTripleIterator(Row row); + + /** + * Query for ?s ?p ?o + * @return all of the Triples of the PropertyTable + */ + ExtendedIterator<Triple> getTripleIterator(); + + /** + * @return all of the Columns of the PropertyTable + */ + Collection<Column> getColumns(); + + /** + * Get Column by its columnKey Node of the predicate + * @param p columnKey Node of the predicate + * @return the Column + */ + Column getColumn(Node p); + + /** + * Create a Column by its columnKey Node of the predicate + * @param p + */ + Column createColumn(Node p); + + /** + * Get Row by its rowKey Node of the subject + * @param s rowKey Node of the subject + * @return the Row + */ + Row getRow(Node s); + + + /** + * Create Row by its rowKey Node of the subject + * @param s rowKey Node of the subject + * @return the Row created + */ + Row createRow(Node s); + + + /** + * Get all of the rows + */ + List<Row> getAllRows() ; + + + /** + * Get all the values within a Column + * @param column + * @return the values + */ + List<Node> getColumnValues(Column column); + + /** + * Get the Rows matching the value of a Column + * @param column the Column with the columnKey Node of the predicate + * @param value the object (or value) Node + * @return the matching Rows + */ + Collection<Row> getMatchingRows(Column column, Node value); + +} http://git-wip-us.apache.org/repos/asf/jena/blob/3d70d735/jena-csv/src/main/java/org/apache/jena/propertytable/Row.java ---------------------------------------------------------------------- diff --git a/jena-csv/src/main/java/org/apache/jena/propertytable/Row.java b/jena-csv/src/main/java/org/apache/jena/propertytable/Row.java index cb2ae9b..3824d8f 100644 --- a/jena-csv/src/main/java/org/apache/jena/propertytable/Row.java +++ b/jena-csv/src/main/java/org/apache/jena/propertytable/Row.java @@ -1,75 +1,75 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.propertytable; - -import java.util.Collection; - -import org.apache.jena.graph.Node ; -import org.apache.jena.graph.Triple ; -import org.apache.jena.util.iterator.ExtendedIterator ; - -/** - * Each Row of the PropertyTable has an unique rowKey Node of the subject (or s for short). - * - */ -public interface Row { - - /** - * @return the PropertyTable it belongs to - */ - PropertyTable getTable(); - - /** - * Set the value of the Column in this Row - * @param column - * @param value - */ - void setValue(Column column, Node value); - - /** - * Get the value of the Column in this Row - * @param column - * @return value - */ - Node getValue(Column column); - - - /** - * Get the value of the Column in this Row - * @param ColumnKey - * @return value - */ - Node getValue(Node ColumnKey); - - /** - * @return the rowKey Node of the subject - */ - Node getRowKey(); - - /** - * @return the Triple Iterator over the values in this Row - */ - ExtendedIterator<Triple> getTripleIterator(); - - /** - * @return all of the Columns of the PropertyTable - */ - Collection<Column> getColumns(); - -} +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.jena.propertytable; + +import java.util.Collection; + +import org.apache.jena.graph.Node ; +import org.apache.jena.graph.Triple ; +import org.apache.jena.util.iterator.ExtendedIterator ; + +/** + * Each Row of the PropertyTable has an unique rowKey Node of the subject (or s for short). + * + */ +public interface Row { + + /** + * @return the PropertyTable it belongs to + */ + PropertyTable getTable(); + + /** + * Set the value of the Column in this Row + * @param column + * @param value + */ + void setValue(Column column, Node value); + + /** + * Get the value of the Column in this Row + * @param column + * @return value + */ + Node getValue(Column column); + + + /** + * Get the value of the Column in this Row + * @param ColumnKey + * @return value + */ + Node getValue(Node ColumnKey); + + /** + * @return the rowKey Node of the subject + */ + Node getRowKey(); + + /** + * @return the Triple Iterator over the values in this Row + */ + ExtendedIterator<Triple> getTripleIterator(); + + /** + * @return all of the Columns of the PropertyTable + */ + Collection<Column> getColumns(); + +} http://git-wip-us.apache.org/repos/asf/jena/blob/3d70d735/jena-csv/src/main/java/org/apache/jena/propertytable/graph/GraphCSV.java ---------------------------------------------------------------------- diff --git a/jena-csv/src/main/java/org/apache/jena/propertytable/graph/GraphCSV.java b/jena-csv/src/main/java/org/apache/jena/propertytable/graph/GraphCSV.java index 4f2e3fd..d002ec6 100644 --- a/jena-csv/src/main/java/org/apache/jena/propertytable/graph/GraphCSV.java +++ b/jena-csv/src/main/java/org/apache/jena/propertytable/graph/GraphCSV.java @@ -1,62 +1,62 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.propertytable.graph; - -import org.apache.jena.propertytable.PropertyTable; -import org.apache.jena.propertytable.impl.PropertyTableBuilder; - - -/** - * GraphCSV is a sub class of GraphPropertyTable aiming at CSV data. - * Its constructor takes a CSV file path as the parameter, parse the file using a CSV Parser, - * and makes a PropertyTable through PropertyTableBuilder. - * - */ -public class GraphCSV extends GraphPropertyTable { - - public static GraphCSV createHashMapImpl( String csvFilePath ){ - return new GraphCSVHashMapImpl(csvFilePath); - } - - public static GraphCSV createArrayImpl( String csvFilePath ){ - return new GraphCSVArrayImpl(csvFilePath); - } - - protected GraphCSV (PropertyTable table) { - super(table); - } - - // use the Java array implementation of PropertyTable for default - public GraphCSV ( String csvFilePath ){ - super(PropertyTableBuilder.buildPropetyTableArrayImplFromCsv(csvFilePath)); - } -} - - -class GraphCSVHashMapImpl extends GraphCSV{ - protected GraphCSVHashMapImpl(String csvFilePath){ - super(PropertyTableBuilder.buildPropetyTableHashMapImplFromCsv(csvFilePath)); - } -} - -class GraphCSVArrayImpl extends GraphCSV{ - protected GraphCSVArrayImpl(String csvFilePath){ - super(PropertyTableBuilder.buildPropetyTableArrayImplFromCsv(csvFilePath)); - } -} +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.jena.propertytable.graph; + +import org.apache.jena.propertytable.PropertyTable; +import org.apache.jena.propertytable.impl.PropertyTableBuilder; + + +/** + * GraphCSV is a sub class of GraphPropertyTable aiming at CSV data. + * Its constructor takes a CSV file path as the parameter, parse the file using a CSV Parser, + * and makes a PropertyTable through PropertyTableBuilder. + * + */ +public class GraphCSV extends GraphPropertyTable { + + public static GraphCSV createHashMapImpl( String csvFilePath ){ + return new GraphCSVHashMapImpl(csvFilePath); + } + + public static GraphCSV createArrayImpl( String csvFilePath ){ + return new GraphCSVArrayImpl(csvFilePath); + } + + protected GraphCSV (PropertyTable table) { + super(table); + } + + // use the Java array implementation of PropertyTable for default + public GraphCSV ( String csvFilePath ){ + super(PropertyTableBuilder.buildPropetyTableArrayImplFromCsv(csvFilePath)); + } +} + + +class GraphCSVHashMapImpl extends GraphCSV{ + protected GraphCSVHashMapImpl(String csvFilePath){ + super(PropertyTableBuilder.buildPropetyTableHashMapImplFromCsv(csvFilePath)); + } +} + +class GraphCSVArrayImpl extends GraphCSV{ + protected GraphCSVArrayImpl(String csvFilePath){ + super(PropertyTableBuilder.buildPropetyTableArrayImplFromCsv(csvFilePath)); + } +} http://git-wip-us.apache.org/repos/asf/jena/blob/3d70d735/jena-csv/src/main/java/org/apache/jena/propertytable/graph/GraphPropertyTable.java ---------------------------------------------------------------------- diff --git a/jena-csv/src/main/java/org/apache/jena/propertytable/graph/GraphPropertyTable.java b/jena-csv/src/main/java/org/apache/jena/propertytable/graph/GraphPropertyTable.java index b538173..7e5e5b5 100644 --- a/jena-csv/src/main/java/org/apache/jena/propertytable/graph/GraphPropertyTable.java +++ b/jena-csv/src/main/java/org/apache/jena/propertytable/graph/GraphPropertyTable.java @@ -1,200 +1,200 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.propertytable.graph; - -import java.util.ArrayList ; -import java.util.Locale ; -import java.util.function.Predicate; - -import org.apache.jena.graph.Node ; -import org.apache.jena.graph.NodeFactory ; -import org.apache.jena.graph.Triple ; -import org.apache.jena.graph.impl.GraphBase ; -import org.apache.jena.propertytable.Column ; -import org.apache.jena.propertytable.PropertyTable ; -import org.apache.jena.propertytable.Row ; -import org.apache.jena.sparql.core.BasicPattern ; -import org.apache.jena.util.iterator.ExtendedIterator ; -import org.apache.jena.util.iterator.NullIterator ; -import org.apache.jena.util.iterator.WrappedIterator ; - -/** - * GraphPropertyTable implements the Graph interface (read-only) over a PropertyTable. - * This is subclass from GraphBase and implements find(). - * The graphBaseFind()(for matching a Triple) and propertyTableBaseFind()(for matching a whole Row) methods can choose the access route based on the find arguments. - * GraphPropertyTable holds/wraps an reference of the PropertyTable instance, so that such a Graph can be treated in a more table-like fashion. - * - */ -public class GraphPropertyTable extends GraphBase { - - private PropertyTable pt; - - public GraphPropertyTable(PropertyTable pt) { - this.pt = pt; - } - - public PropertyTable getPropertyTable() { - return pt; - } - - @Override - protected ExtendedIterator<Triple> graphBaseFind(Triple triple) { - //System.out.println(m); - - if (this.pt == null) { - return NullIterator.instance(); - } - - ExtendedIterator<Triple> iter = null; - - Node s = triple.getMatchSubject(); - Node p = triple.getMatchPredicate(); - Node o = triple.getMatchObject(); - - if (isConcrete(p) && isConcrete(o)) { - //System.out.println("1"); - iter = pt.getTripleIterator(pt.getColumn(p), o); - } else if (isConcrete(p)) { - //System.out.println("2"); - Column column = this.pt.getColumn(p); - if (column != null) { - iter = pt.getTripleIterator(column); - } else { - return NullIterator.instance(); - } - } else if (isConcrete(o)) { - //System.out.println("3"); - iter = pt.getTripleIterator(o); - } else{ - //System.out.println("4"); - iter = pt.getTripleIterator(); - } - - return iter.filterKeep(new TripleMatchFilterEquality(triple)); - - } - - protected ExtendedIterator<Row> propertyTableBaseFind(RowMatch m) { - - if (this.pt == null) { - return NullIterator.instance(); - } - - ExtendedIterator<Row> iter = null; - - Node s = m.getMatchSubject(); - - if ( isConcrete(s) ){ - Row row= pt.getRow(s); - if (row == null){ - return NullIterator.instance(); - } else { - ArrayList<Row> rows = new ArrayList<Row>(); - rows.add(row); - return WrappedIterator.create(rows.iterator()); - } - } else { - iter = WrappedIterator.create(pt.getAllRows().iterator()); - } - - return iter.filterKeep(new RowMatchFilterEquality( m )); - - } - - static class RowMatchFilterEquality implements Predicate<Row> { - final protected RowMatch rMatch; - - public RowMatchFilterEquality(RowMatch rMatch) { - this.rMatch = rMatch; - } - - @Override - public boolean test(Row r) { - return rowContained(rMatch, r); - } - - } - - static boolean rowContained(RowMatch rMatch, Row row) { - - boolean contained = equalNode(rMatch.getSubject(), row.getRowKey()); - if(contained){ - BasicPattern pattern =rMatch.getBasicPattern(); - for(Triple triple: pattern ){ - contained = equalNode(triple.getObject(), row.getValue( triple.getPredicate()) ); - if (! contained){ - break; - } - } - } - return contained; - } - - - static class TripleMatchFilterEquality implements Predicate<Triple> { - final protected Triple tMatch; - - /** Creates new TripleMatchFilter */ - public TripleMatchFilterEquality(Triple tMatch) { - this.tMatch = tMatch; - } - - @Override - public boolean test(Triple t) { - return tripleContained(tMatch, t); - } - - } - - static boolean tripleContained(Triple patternTriple, Triple dataTriple) { - return equalNode(patternTriple.getSubject(), dataTriple.getSubject()) - && equalNode(patternTriple.getPredicate(), - dataTriple.getPredicate()) - && equalNode(patternTriple.getObject(), dataTriple.getObject()); - } - - private static boolean equalNode(Node m, Node n) { - // m should not be null unless .getMatchXXXX used to get the node. - // Language tag canonicalization - n = fixupNode(n); - m = fixupNode(m); - return (m == null) || (m == Node.ANY) || m.equals(n); - } - - private static Node fixupNode(Node node) { - if (node == null || node == Node.ANY) - return node; - - // RDF says ... language tags should be canonicalized to lower case. - if (node.isLiteral()) { - String lang = node.getLiteralLanguage(); - if (lang != null && !lang.equals("")) - node = NodeFactory.createLiteral(node.getLiteralLexicalForm(), - lang.toLowerCase(Locale.ROOT), - node.getLiteralDatatype()); - } - return node; - } - - private boolean isConcrete(Node node) { - boolean wild = (node == null || node == Node.ANY); - return !wild; - } - -} +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.jena.propertytable.graph; + +import java.util.ArrayList ; +import java.util.Locale ; +import java.util.function.Predicate; + +import org.apache.jena.graph.Node ; +import org.apache.jena.graph.NodeFactory ; +import org.apache.jena.graph.Triple ; +import org.apache.jena.graph.impl.GraphBase ; +import org.apache.jena.propertytable.Column ; +import org.apache.jena.propertytable.PropertyTable ; +import org.apache.jena.propertytable.Row ; +import org.apache.jena.sparql.core.BasicPattern ; +import org.apache.jena.util.iterator.ExtendedIterator ; +import org.apache.jena.util.iterator.NullIterator ; +import org.apache.jena.util.iterator.WrappedIterator ; + +/** + * GraphPropertyTable implements the Graph interface (read-only) over a PropertyTable. + * This is subclass from GraphBase and implements find(). + * The graphBaseFind()(for matching a Triple) and propertyTableBaseFind()(for matching a whole Row) methods can choose the access route based on the find arguments. + * GraphPropertyTable holds/wraps an reference of the PropertyTable instance, so that such a Graph can be treated in a more table-like fashion. + * + */ +public class GraphPropertyTable extends GraphBase { + + private PropertyTable pt; + + public GraphPropertyTable(PropertyTable pt) { + this.pt = pt; + } + + public PropertyTable getPropertyTable() { + return pt; + } + + @Override + protected ExtendedIterator<Triple> graphBaseFind(Triple triple) { + //System.out.println(m); + + if (this.pt == null) { + return NullIterator.instance(); + } + + ExtendedIterator<Triple> iter = null; + + Node s = triple.getMatchSubject(); + Node p = triple.getMatchPredicate(); + Node o = triple.getMatchObject(); + + if (isConcrete(p) && isConcrete(o)) { + //System.out.println("1"); + iter = pt.getTripleIterator(pt.getColumn(p), o); + } else if (isConcrete(p)) { + //System.out.println("2"); + Column column = this.pt.getColumn(p); + if (column != null) { + iter = pt.getTripleIterator(column); + } else { + return NullIterator.instance(); + } + } else if (isConcrete(o)) { + //System.out.println("3"); + iter = pt.getTripleIterator(o); + } else{ + //System.out.println("4"); + iter = pt.getTripleIterator(); + } + + return iter.filterKeep(new TripleMatchFilterEquality(triple)); + + } + + protected ExtendedIterator<Row> propertyTableBaseFind(RowMatch m) { + + if (this.pt == null) { + return NullIterator.instance(); + } + + ExtendedIterator<Row> iter = null; + + Node s = m.getMatchSubject(); + + if ( isConcrete(s) ){ + Row row= pt.getRow(s); + if (row == null){ + return NullIterator.instance(); + } else { + ArrayList<Row> rows = new ArrayList<Row>(); + rows.add(row); + return WrappedIterator.create(rows.iterator()); + } + } else { + iter = WrappedIterator.create(pt.getAllRows().iterator()); + } + + return iter.filterKeep(new RowMatchFilterEquality( m )); + + } + + static class RowMatchFilterEquality implements Predicate<Row> { + final protected RowMatch rMatch; + + public RowMatchFilterEquality(RowMatch rMatch) { + this.rMatch = rMatch; + } + + @Override + public boolean test(Row r) { + return rowContained(rMatch, r); + } + + } + + static boolean rowContained(RowMatch rMatch, Row row) { + + boolean contained = equalNode(rMatch.getSubject(), row.getRowKey()); + if(contained){ + BasicPattern pattern =rMatch.getBasicPattern(); + for(Triple triple: pattern ){ + contained = equalNode(triple.getObject(), row.getValue( triple.getPredicate()) ); + if (! contained){ + break; + } + } + } + return contained; + } + + + static class TripleMatchFilterEquality implements Predicate<Triple> { + final protected Triple tMatch; + + /** Creates new TripleMatchFilter */ + public TripleMatchFilterEquality(Triple tMatch) { + this.tMatch = tMatch; + } + + @Override + public boolean test(Triple t) { + return tripleContained(tMatch, t); + } + + } + + static boolean tripleContained(Triple patternTriple, Triple dataTriple) { + return equalNode(patternTriple.getSubject(), dataTriple.getSubject()) + && equalNode(patternTriple.getPredicate(), + dataTriple.getPredicate()) + && equalNode(patternTriple.getObject(), dataTriple.getObject()); + } + + private static boolean equalNode(Node m, Node n) { + // m should not be null unless .getMatchXXXX used to get the node. + // Language tag canonicalization + n = fixupNode(n); + m = fixupNode(m); + return (m == null) || (m == Node.ANY) || m.equals(n); + } + + private static Node fixupNode(Node node) { + if (node == null || node == Node.ANY) + return node; + + // RDF says ... language tags should be canonicalized to lower case. + if (node.isLiteral()) { + String lang = node.getLiteralLanguage(); + if (lang != null && !lang.equals("")) + node = NodeFactory.createLiteral(node.getLiteralLexicalForm(), + lang.toLowerCase(Locale.ROOT), + node.getLiteralDatatype()); + } + return node; + } + + private boolean isConcrete(Node node) { + boolean wild = (node == null || node == Node.ANY); + return !wild; + } + +} http://git-wip-us.apache.org/repos/asf/jena/blob/3d70d735/jena-csv/src/main/java/org/apache/jena/propertytable/graph/QueryIterPropertyTable.java ---------------------------------------------------------------------- diff --git a/jena-csv/src/main/java/org/apache/jena/propertytable/graph/QueryIterPropertyTable.java b/jena-csv/src/main/java/org/apache/jena/propertytable/graph/QueryIterPropertyTable.java index 4349623..8ebfa72 100644 --- a/jena-csv/src/main/java/org/apache/jena/propertytable/graph/QueryIterPropertyTable.java +++ b/jena-csv/src/main/java/org/apache/jena/propertytable/graph/QueryIterPropertyTable.java @@ -1,114 +1,114 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.propertytable.graph; - -import java.util.ArrayList ; -import java.util.Collection ; -import java.util.HashMap ; -import java.util.List ; - -import org.apache.jena.atlas.io.IndentedWriter ; -import org.apache.jena.atlas.lib.Lib ; -import org.apache.jena.graph.Graph ; -import org.apache.jena.graph.Node ; -import org.apache.jena.graph.Triple ; -import org.apache.jena.sparql.core.BasicPattern ; -import org.apache.jena.sparql.engine.ExecutionContext ; -import org.apache.jena.sparql.engine.QueryIterator ; -import org.apache.jena.sparql.engine.binding.Binding ; -import org.apache.jena.sparql.engine.iterator.QueryIter1 ; -import org.apache.jena.sparql.serializer.SerializationContext ; -import org.apache.jena.sparql.util.FmtUtils ; - -/** - * Split the incoming BasicPattern by subjects, (i.e. it becomes multiple sub BasicPatterns grouped by the same subjects. - * - */ -public class QueryIterPropertyTable extends QueryIter1 { - - private BasicPattern pattern; - private Graph graph; - private QueryIterator output; - - public static QueryIterator create(QueryIterator input, - BasicPattern pattern, ExecutionContext execContext) { - return new QueryIterPropertyTable(input, pattern, execContext); - } - - private QueryIterPropertyTable(QueryIterator input, BasicPattern pattern, - ExecutionContext execContext) { - super(input, execContext); - this.pattern = pattern; - graph = execContext.getActiveGraph(); - // Create a chain of triple iterators. - QueryIterator chain = getInput(); - Collection<BasicPattern> patterns = sort(pattern); - for (BasicPattern p : patterns) - chain = new QueryIterPropertyTableRow(chain, p, execContext); - output = chain; - } - - private Collection<BasicPattern> sort(BasicPattern pattern) { - HashMap<Node, BasicPattern> map = new HashMap<Node, BasicPattern>(); - for (Triple triple : pattern.getList()) { - Node subject = triple.getSubject(); - if (!map.containsKey(subject)) { - List<Triple> triples = new ArrayList<Triple>(); - BasicPattern p = BasicPattern.wrap(triples); - map.put(subject, p); - p.add(triple); - } else { - map.get(subject).add(triple); - } - } - return map.values(); - } - - @Override - protected boolean hasNextBinding() { - return output.hasNext(); - } - - @Override - protected Binding moveToNextBinding() { - return output.nextBinding(); - } - - @Override - protected void closeSubIterator() { - if (output != null) - output.close(); - output = null; - } - - @Override - protected void requestSubCancel() { - if (output != null) - output.cancel(); - } - - @Override - protected void details(IndentedWriter out, SerializationContext sCxt) { - out.print(Lib.className(this)); - out.println(); - out.incIndent(); - FmtUtils.formatPattern(out, pattern, sCxt); - out.decIndent(); - } -} +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.jena.propertytable.graph; + +import java.util.ArrayList ; +import java.util.Collection ; +import java.util.HashMap ; +import java.util.List ; + +import org.apache.jena.atlas.io.IndentedWriter ; +import org.apache.jena.atlas.lib.Lib ; +import org.apache.jena.graph.Graph ; +import org.apache.jena.graph.Node ; +import org.apache.jena.graph.Triple ; +import org.apache.jena.sparql.core.BasicPattern ; +import org.apache.jena.sparql.engine.ExecutionContext ; +import org.apache.jena.sparql.engine.QueryIterator ; +import org.apache.jena.sparql.engine.binding.Binding ; +import org.apache.jena.sparql.engine.iterator.QueryIter1 ; +import org.apache.jena.sparql.serializer.SerializationContext ; +import org.apache.jena.sparql.util.FmtUtils ; + +/** + * Split the incoming BasicPattern by subjects, (i.e. it becomes multiple sub BasicPatterns grouped by the same subjects. + * + */ +public class QueryIterPropertyTable extends QueryIter1 { + + private BasicPattern pattern; + private Graph graph; + private QueryIterator output; + + public static QueryIterator create(QueryIterator input, + BasicPattern pattern, ExecutionContext execContext) { + return new QueryIterPropertyTable(input, pattern, execContext); + } + + private QueryIterPropertyTable(QueryIterator input, BasicPattern pattern, + ExecutionContext execContext) { + super(input, execContext); + this.pattern = pattern; + graph = execContext.getActiveGraph(); + // Create a chain of triple iterators. + QueryIterator chain = getInput(); + Collection<BasicPattern> patterns = sort(pattern); + for (BasicPattern p : patterns) + chain = new QueryIterPropertyTableRow(chain, p, execContext); + output = chain; + } + + private Collection<BasicPattern> sort(BasicPattern pattern) { + HashMap<Node, BasicPattern> map = new HashMap<Node, BasicPattern>(); + for (Triple triple : pattern.getList()) { + Node subject = triple.getSubject(); + if (!map.containsKey(subject)) { + List<Triple> triples = new ArrayList<Triple>(); + BasicPattern p = BasicPattern.wrap(triples); + map.put(subject, p); + p.add(triple); + } else { + map.get(subject).add(triple); + } + } + return map.values(); + } + + @Override + protected boolean hasNextBinding() { + return output.hasNext(); + } + + @Override + protected Binding moveToNextBinding() { + return output.nextBinding(); + } + + @Override + protected void closeSubIterator() { + if (output != null) + output.close(); + output = null; + } + + @Override + protected void requestSubCancel() { + if (output != null) + output.cancel(); + } + + @Override + protected void details(IndentedWriter out, SerializationContext sCxt) { + out.print(Lib.className(this)); + out.println(); + out.incIndent(); + FmtUtils.formatPattern(out, pattern, sCxt); + out.decIndent(); + } +} http://git-wip-us.apache.org/repos/asf/jena/blob/3d70d735/jena-csv/src/main/java/org/apache/jena/propertytable/graph/QueryIterPropertyTableRow.java ---------------------------------------------------------------------- diff --git a/jena-csv/src/main/java/org/apache/jena/propertytable/graph/QueryIterPropertyTableRow.java b/jena-csv/src/main/java/org/apache/jena/propertytable/graph/QueryIterPropertyTableRow.java index 3b28f24..8aeec57 100644 --- a/jena-csv/src/main/java/org/apache/jena/propertytable/graph/QueryIterPropertyTableRow.java +++ b/jena-csv/src/main/java/org/apache/jena/propertytable/graph/QueryIterPropertyTableRow.java @@ -1,243 +1,243 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.propertytable.graph; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.jena.graph.Node ; -import org.apache.jena.graph.Triple ; -import org.apache.jena.propertytable.PropertyTable; -import org.apache.jena.propertytable.Row; - - -import org.apache.jena.sparql.ARQInternalErrorException ; -import org.apache.jena.sparql.core.BasicPattern ; -import org.apache.jena.sparql.core.Var ; -import org.apache.jena.sparql.engine.ExecutionContext ; -import org.apache.jena.sparql.engine.QueryIterator ; -import org.apache.jena.sparql.engine.binding.Binding ; -import org.apache.jena.sparql.engine.binding.BindingFactory ; -import org.apache.jena.sparql.engine.binding.BindingMap ; -import org.apache.jena.sparql.engine.iterator.QueryIter ; -import org.apache.jena.sparql.engine.iterator.QueryIterRepeatApply ; -import org.apache.jena.util.iterator.ClosableIterator ; -import org.apache.jena.util.iterator.ExtendedIterator ; -import org.apache.jena.util.iterator.NiceIterator ; -import org.apache.jena.util.iterator.WrappedIterator ; - -/** - * If the triple size within a BasicePattern is greater than 1 (i.e. at least 2 triples), it's turned into a row querying. - * - */ -public class QueryIterPropertyTableRow extends QueryIterRepeatApply{ - - - private final BasicPattern pattern ; - - public QueryIterPropertyTableRow( QueryIterator input, - BasicPattern pattern , - ExecutionContext cxt) - { - super(input, cxt) ; - this.pattern = pattern ; - } - - @Override - protected QueryIterator nextStage(Binding binding) - { - return new RowMapper(binding, pattern, getExecContext()) ; - } - - static int countMapper = 0 ; - static class RowMapper extends QueryIter - { - private PropertyTable table; - - private BasicPattern pattern; - private Binding binding ; - private ClosableIterator<Row> graphIter ; - private Binding slot = null ; - private boolean finished = false ; - private volatile boolean cancelled = false ; - - RowMapper(Binding binding, BasicPattern pattern, ExecutionContext cxt) - { - super(cxt) ; - GraphPropertyTable graph = (GraphPropertyTable)cxt.getActiveGraph() ; - - this.pattern = substitute(pattern, binding); - this.binding = binding ; - BasicPattern pattern2 = tripleNode(pattern); - - ExtendedIterator<Row> iter = graph.propertyTableBaseFind( new RowMatch( pattern2) ); - - if ( false ) - { - // Materialize the results now. Debugging only. - List<Row> x = iter.toList() ; - this.graphIter = WrappedIterator.create(x.iterator()) ; - iter.close(); - } - else - // Stream. - this.graphIter = iter ; - } - - private static Node tripleNode(Node node) - { - if ( node.isVariable() ) - return Node.ANY ; - return node ; - } - - private static BasicPattern tripleNode(BasicPattern pattern) - { - List<Triple> triples = new ArrayList<Triple>(); - for (Triple triple: pattern){ - triples.add( tripleNode(triple) ); - } - return BasicPattern.wrap(triples); - } - - private static Triple tripleNode(Triple triple){ - Node s = tripleNode(triple.getSubject()) ; - Node p = tripleNode(triple.getPredicate()) ; - Node o = tripleNode(triple.getObject()) ; - return Triple.create(s, p, o); - } - - private static Node substitute(Node node, Binding binding) - { - if ( Var.isVar(node) ) - { - Node x = binding.get(Var.alloc(node)) ; - if ( x != null ) - return x ; - } - return node ; - } - - private static Triple substitute(Triple triple, Binding binding){ - Node s = substitute(triple.getSubject(), binding) ; - Node p = substitute(triple.getPredicate(), binding) ; - Node o = substitute(triple.getObject(), binding) ; - return Triple.create(s, p, o); - } - - private static BasicPattern substitute(BasicPattern pattern , Binding binding) - { - List<Triple> triples = new ArrayList<Triple>(); - for (Triple triple: pattern){ - triples.add( substitute(triple,binding) ); - } - return BasicPattern.wrap(triples); - } - - private Binding mapper(Row r) - { - BindingMap results = BindingFactory.create(binding) ; - - if ( ! insert(pattern, r, results) ) - return null ; - return results ; - } - - private static boolean insert(BasicPattern input, Row output, BindingMap results) - { - for (Triple triple: input){ - if (! insert(triple, output, results) ){ - return false; - } - } - return true; - } - - private static boolean insert(Triple input, Row output, BindingMap results){ - if ( ! insert(input.getSubject(), output.getRowKey(), results) ) - return false ; -// if ( ! insert(input.getPredicate(), output.get, results) ) -// return false ; - if ( ! insert(input.getObject(), output.getValue( input.getPredicate() ), results) ) - return false ; - return true; - } - - private static boolean insert(Node inputNode, Node outputNode, BindingMap results) - { - if ( ! Var.isVar(inputNode) ) - return true ; - - Var v = Var.alloc(inputNode) ; - Node x = results.get(v) ; - if ( x != null ) - return outputNode.equals(x) ; - - results.add(v, outputNode) ; - return true ; - } - - @Override - protected boolean hasNextBinding() - { - if ( finished ) return false ; - if ( slot != null ) return true ; - if ( cancelled ) - { - graphIter.close() ; - finished = true ; - return false ; - } - - while(graphIter.hasNext() && slot == null ) - { - Row r = graphIter.next() ; - slot = mapper(r) ; - } - if ( slot == null ) - finished = true ; - return slot != null ; - } - - @Override - protected Binding moveToNextBinding() - { - if ( ! hasNextBinding() ) - throw new ARQInternalErrorException() ; - Binding r = slot ; - slot = null ; - return r ; - } - - @Override - protected void closeIterator() - { - if ( graphIter != null ) - NiceIterator.close(graphIter) ; - graphIter = null ; - } - - @Override - protected void requestCancel() - { - // The QueryIteratorBase machinary will do the real work. - cancelled = true ; - } - } -} +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.jena.propertytable.graph; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.jena.graph.Node ; +import org.apache.jena.graph.Triple ; +import org.apache.jena.propertytable.PropertyTable; +import org.apache.jena.propertytable.Row; + + +import org.apache.jena.sparql.ARQInternalErrorException ; +import org.apache.jena.sparql.core.BasicPattern ; +import org.apache.jena.sparql.core.Var ; +import org.apache.jena.sparql.engine.ExecutionContext ; +import org.apache.jena.sparql.engine.QueryIterator ; +import org.apache.jena.sparql.engine.binding.Binding ; +import org.apache.jena.sparql.engine.binding.BindingFactory ; +import org.apache.jena.sparql.engine.binding.BindingMap ; +import org.apache.jena.sparql.engine.iterator.QueryIter ; +import org.apache.jena.sparql.engine.iterator.QueryIterRepeatApply ; +import org.apache.jena.util.iterator.ClosableIterator ; +import org.apache.jena.util.iterator.ExtendedIterator ; +import org.apache.jena.util.iterator.NiceIterator ; +import org.apache.jena.util.iterator.WrappedIterator ; + +/** + * If the triple size within a BasicePattern is greater than 1 (i.e. at least 2 triples), it's turned into a row querying. + * + */ +public class QueryIterPropertyTableRow extends QueryIterRepeatApply{ + + + private final BasicPattern pattern ; + + public QueryIterPropertyTableRow( QueryIterator input, + BasicPattern pattern , + ExecutionContext cxt) + { + super(input, cxt) ; + this.pattern = pattern ; + } + + @Override + protected QueryIterator nextStage(Binding binding) + { + return new RowMapper(binding, pattern, getExecContext()) ; + } + + static int countMapper = 0 ; + static class RowMapper extends QueryIter + { + private PropertyTable table; + + private BasicPattern pattern; + private Binding binding ; + private ClosableIterator<Row> graphIter ; + private Binding slot = null ; + private boolean finished = false ; + private volatile boolean cancelled = false ; + + RowMapper(Binding binding, BasicPattern pattern, ExecutionContext cxt) + { + super(cxt) ; + GraphPropertyTable graph = (GraphPropertyTable)cxt.getActiveGraph() ; + + this.pattern = substitute(pattern, binding); + this.binding = binding ; + BasicPattern pattern2 = tripleNode(pattern); + + ExtendedIterator<Row> iter = graph.propertyTableBaseFind( new RowMatch( pattern2) ); + + if ( false ) + { + // Materialize the results now. Debugging only. + List<Row> x = iter.toList() ; + this.graphIter = WrappedIterator.create(x.iterator()) ; + iter.close(); + } + else + // Stream. + this.graphIter = iter ; + } + + private static Node tripleNode(Node node) + { + if ( node.isVariable() ) + return Node.ANY ; + return node ; + } + + private static BasicPattern tripleNode(BasicPattern pattern) + { + List<Triple> triples = new ArrayList<Triple>(); + for (Triple triple: pattern){ + triples.add( tripleNode(triple) ); + } + return BasicPattern.wrap(triples); + } + + private static Triple tripleNode(Triple triple){ + Node s = tripleNode(triple.getSubject()) ; + Node p = tripleNode(triple.getPredicate()) ; + Node o = tripleNode(triple.getObject()) ; + return Triple.create(s, p, o); + } + + private static Node substitute(Node node, Binding binding) + { + if ( Var.isVar(node) ) + { + Node x = binding.get(Var.alloc(node)) ; + if ( x != null ) + return x ; + } + return node ; + } + + private static Triple substitute(Triple triple, Binding binding){ + Node s = substitute(triple.getSubject(), binding) ; + Node p = substitute(triple.getPredicate(), binding) ; + Node o = substitute(triple.getObject(), binding) ; + return Triple.create(s, p, o); + } + + private static BasicPattern substitute(BasicPattern pattern , Binding binding) + { + List<Triple> triples = new ArrayList<Triple>(); + for (Triple triple: pattern){ + triples.add( substitute(triple,binding) ); + } + return BasicPattern.wrap(triples); + } + + private Binding mapper(Row r) + { + BindingMap results = BindingFactory.create(binding) ; + + if ( ! insert(pattern, r, results) ) + return null ; + return results ; + } + + private static boolean insert(BasicPattern input, Row output, BindingMap results) + { + for (Triple triple: input){ + if (! insert(triple, output, results) ){ + return false; + } + } + return true; + } + + private static boolean insert(Triple input, Row output, BindingMap results){ + if ( ! insert(input.getSubject(), output.getRowKey(), results) ) + return false ; +// if ( ! insert(input.getPredicate(), output.get, results) ) +// return false ; + if ( ! insert(input.getObject(), output.getValue( input.getPredicate() ), results) ) + return false ; + return true; + } + + private static boolean insert(Node inputNode, Node outputNode, BindingMap results) + { + if ( ! Var.isVar(inputNode) ) + return true ; + + Var v = Var.alloc(inputNode) ; + Node x = results.get(v) ; + if ( x != null ) + return outputNode.equals(x) ; + + results.add(v, outputNode) ; + return true ; + } + + @Override + protected boolean hasNextBinding() + { + if ( finished ) return false ; + if ( slot != null ) return true ; + if ( cancelled ) + { + graphIter.close() ; + finished = true ; + return false ; + } + + while(graphIter.hasNext() && slot == null ) + { + Row r = graphIter.next() ; + slot = mapper(r) ; + } + if ( slot == null ) + finished = true ; + return slot != null ; + } + + @Override + protected Binding moveToNextBinding() + { + if ( ! hasNextBinding() ) + throw new ARQInternalErrorException() ; + Binding r = slot ; + slot = null ; + return r ; + } + + @Override + protected void closeIterator() + { + if ( graphIter != null ) + NiceIterator.close(graphIter) ; + graphIter = null ; + } + + @Override + protected void requestCancel() + { + // The QueryIteratorBase machinary will do the real work. + cancelled = true ; + } + } +} http://git-wip-us.apache.org/repos/asf/jena/blob/3d70d735/jena-csv/src/main/java/org/apache/jena/propertytable/graph/RowMatch.java ---------------------------------------------------------------------- diff --git a/jena-csv/src/main/java/org/apache/jena/propertytable/graph/RowMatch.java b/jena-csv/src/main/java/org/apache/jena/propertytable/graph/RowMatch.java index f5b9c18..971438b 100644 --- a/jena-csv/src/main/java/org/apache/jena/propertytable/graph/RowMatch.java +++ b/jena-csv/src/main/java/org/apache/jena/propertytable/graph/RowMatch.java @@ -1,48 +1,48 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.propertytable.graph; - -import org.apache.jena.graph.Node ; -import org.apache.jena.sparql.core.BasicPattern ; - -/** - * The data structure for matching a Row - * - */ -public class RowMatch { - - private BasicPattern pattern; - - public RowMatch( BasicPattern pattern ){ - this.pattern=pattern; - } - - public Node getMatchSubject(){ - return pattern.get(0).getMatchSubject(); - } - - public Node getSubject(){ - return pattern.get(0).getSubject(); - } - - public BasicPattern getBasicPattern(){ - return pattern; - } - -} +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.jena.propertytable.graph; + +import org.apache.jena.graph.Node ; +import org.apache.jena.sparql.core.BasicPattern ; + +/** + * The data structure for matching a Row + * + */ +public class RowMatch { + + private BasicPattern pattern; + + public RowMatch( BasicPattern pattern ){ + this.pattern=pattern; + } + + public Node getMatchSubject(){ + return pattern.get(0).getMatchSubject(); + } + + public Node getSubject(){ + return pattern.get(0).getSubject(); + } + + public BasicPattern getBasicPattern(){ + return pattern; + } + +} http://git-wip-us.apache.org/repos/asf/jena/blob/3d70d735/jena-csv/src/main/java/org/apache/jena/propertytable/graph/StageGeneratorPropertyTable.java ---------------------------------------------------------------------- diff --git a/jena-csv/src/main/java/org/apache/jena/propertytable/graph/StageGeneratorPropertyTable.java b/jena-csv/src/main/java/org/apache/jena/propertytable/graph/StageGeneratorPropertyTable.java index 4692472..53df0c9 100644 --- a/jena-csv/src/main/java/org/apache/jena/propertytable/graph/StageGeneratorPropertyTable.java +++ b/jena-csv/src/main/java/org/apache/jena/propertytable/graph/StageGeneratorPropertyTable.java @@ -1,57 +1,57 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.propertytable.graph; - - -import org.apache.jena.graph.Graph ; -import org.apache.jena.sparql.core.BasicPattern ; -import org.apache.jena.sparql.engine.ExecutionContext ; -import org.apache.jena.sparql.engine.QueryIterator ; -import org.apache.jena.sparql.engine.main.StageGenerator ; - -/** - * The extension of StageGenerator for querying a Row. - * - */ -public class StageGeneratorPropertyTable implements StageGenerator { - - // Using OpExecutor is preferred. - StageGenerator above = null ; - - public StageGeneratorPropertyTable(StageGenerator original) - { - above = original ; - } - - @Override - public QueryIterator execute(BasicPattern pattern, QueryIterator input, ExecutionContext execCxt) - { - // --- In case this isn't for GraphPropertyTable - Graph g = execCxt.getActiveGraph() ; - - if ( ! ( g instanceof GraphPropertyTable ) ) - return above.execute(pattern, input, execCxt) ; - if (pattern.size() <= 1){ - return above.execute(pattern, input, execCxt) ; - } - return QueryIterPropertyTable.create(input, pattern, execCxt); - } - - -} +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.jena.propertytable.graph; + + +import org.apache.jena.graph.Graph ; +import org.apache.jena.sparql.core.BasicPattern ; +import org.apache.jena.sparql.engine.ExecutionContext ; +import org.apache.jena.sparql.engine.QueryIterator ; +import org.apache.jena.sparql.engine.main.StageGenerator ; + +/** + * The extension of StageGenerator for querying a Row. + * + */ +public class StageGeneratorPropertyTable implements StageGenerator { + + // Using OpExecutor is preferred. + StageGenerator above = null ; + + public StageGeneratorPropertyTable(StageGenerator original) + { + above = original ; + } + + @Override + public QueryIterator execute(BasicPattern pattern, QueryIterator input, ExecutionContext execCxt) + { + // --- In case this isn't for GraphPropertyTable + Graph g = execCxt.getActiveGraph() ; + + if ( ! ( g instanceof GraphPropertyTable ) ) + return above.execute(pattern, input, execCxt) ; + if (pattern.size() <= 1){ + return above.execute(pattern, input, execCxt) ; + } + return QueryIterPropertyTable.create(input, pattern, execCxt); + } + + +}
