[GitHub] jena pull request #432: JENA-1560: PrefixMappingUtils

2018-06-12 Thread asfgit
Github user asfgit closed the pull request at:

https://github.com/apache/jena/pull/432


---


[GitHub] jena pull request #432: JENA-1560: PrefixMappingUtils

2018-06-12 Thread afs
Github user afs commented on a diff in the pull request:

https://github.com/apache/jena/pull/432#discussion_r194708154
  
--- Diff: 
jena-core/src/main/java/org/apache/jena/util/PrefixMappingUtils.java ---
@@ -0,0 +1,362 @@
+/*
+ * 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.util;
+
+import java.util.* ;
+import java.util.function.Consumer ;
+import java.util.stream.Collectors ;
+
+import org.apache.jena.atlas.lib.SetUtils ;
+import org.apache.jena.atlas.lib.Trie ;
+import org.apache.jena.graph.Graph ;
+import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple ;
+import org.apache.jena.graph.impl.WrappedGraph;
+import org.apache.jena.rdf.model.Model ;
+import org.apache.jena.shared.PrefixMapping ;
+import org.apache.jena.shared.impl.PrefixMappingImpl ;
+
+public class PrefixMappingUtils {
+/**
+ * Return a read-only graph that has the same data (RDF triples) as 
the one given, but has a
+ * prefix mapping that only includes "in use " prefixes.
+ * 
+ * The prefix mappings of the two graphs are not connected. 
+ * Later changes to the prefix mapping of the original graph are not 
reflected in the returned graph.
+ * Modifications to the triples conatained in the underlying graph are 
reflected.   
+ */
+public static Graph graphInUsePrefixMapping(Graph graph) {
+final PrefixMapping prefixMapping = calcInUsePrefixMapping(graph) ;
+prefixMapping.lock() ;
+Graph graph2 = new WrappedGraph(graph) {
+@Override
+public void performAdd(Triple triple)
+{ throw new UnsupportedOperationException() ; }
+
+@Override
+public void performDelete(Triple triple)
+{ throw new UnsupportedOperationException() ; }
+
+@Override
+public PrefixMapping getPrefixMapping() {
+return prefixMapping ;
+}
+} ;
+return graph2 ;
+}
+
+/**
+ * Analyse the graph to see which prefixes of the graph are in use.
+ * 
+ * In the case of overlapping prefixes (where one prefix declaration 
is has an initial
+ * URI string which matches another prefix declaration), all are 
included, though
+ * they may not be used when printing (that depends on the output 
process). In effect,
+ * this process has "false positives".
+ * 
+ * This function does not calculate new prefixes.
+ * 
+ * @see #calcInUsePrefixMappingTTL(Graph)
+ */
+public static PrefixMapping calcInUsePrefixMapping(Graph graph) {
+PrefixMapping prefixMapping = graph.getPrefixMapping() ;
+if ( prefixMapping == null )
+return null ;
+return calcInUsePrefixMapping(graph, prefixMapping) ;
+}
+
+/**
+ * Analyse the graph to see which prefixes of the given {@link 
PrefixMapping} are in
+ * use.
+ * 
+ * In the case of overlapping prefixes (where one prefix declaration 
is has an initial
+ * URI string which matches another prefix declaration), all are 
included, though
+ * they may not be used when printing (that depends on the output 
process). In effect,
+ * this process has "false positives".
+ * 
+ * This function does not calculate new prefixes.
+ * 
+ * @see #calcInUsePrefixMappingTTL(Graph, PrefixMapping)
+ */
+public static PrefixMapping calcInUsePrefixMapping(Graph graph, 
PrefixMapping prefixMapping) {
+
+/* Method:
+ * 
+ * For each URI in the data, look it up in the trie.
+ * to see if has a declared prefix.
+ * 
+ * Exit early if every prefix is accounted for. 
+ */
+   
+// Map prefix to URI.
+

[GitHub] jena pull request #432: JENA-1560: PrefixMappingUtils

2018-06-12 Thread afs
Github user afs commented on a diff in the pull request:

https://github.com/apache/jena/pull/432#discussion_r194708146
  
--- Diff: 
jena-core/src/main/java/org/apache/jena/util/PrefixMappingUtils.java ---
@@ -0,0 +1,362 @@
+/*
+ * 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.util;
+
+import java.util.* ;
+import java.util.function.Consumer ;
+import java.util.stream.Collectors ;
+
+import org.apache.jena.atlas.lib.SetUtils ;
+import org.apache.jena.atlas.lib.Trie ;
+import org.apache.jena.graph.Graph ;
+import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple ;
+import org.apache.jena.graph.impl.WrappedGraph;
+import org.apache.jena.rdf.model.Model ;
+import org.apache.jena.shared.PrefixMapping ;
+import org.apache.jena.shared.impl.PrefixMappingImpl ;
+
+public class PrefixMappingUtils {
+/**
+ * Return a read-only graph that has the same data (RDF triples) as 
the one given, but has a
+ * prefix mapping that only includes "in use " prefixes.
+ * 
+ * The prefix mappings of the two graphs are not connected. 
+ * Later changes to the prefix mapping of the original graph are not 
reflected in the returned graph.
+ * Modifications to the triples conatained in the underlying graph are 
reflected.   
+ */
+public static Graph graphInUsePrefixMapping(Graph graph) {
+final PrefixMapping prefixMapping = calcInUsePrefixMapping(graph) ;
+prefixMapping.lock() ;
+Graph graph2 = new WrappedGraph(graph) {
+@Override
+public void performAdd(Triple triple)
+{ throw new UnsupportedOperationException() ; }
+
+@Override
+public void performDelete(Triple triple)
+{ throw new UnsupportedOperationException() ; }
+
+@Override
+public PrefixMapping getPrefixMapping() {
+return prefixMapping ;
+}
+} ;
+return graph2 ;
+}
+
+/**
+ * Analyse the graph to see which prefixes of the graph are in use.
+ * 
+ * In the case of overlapping prefixes (where one prefix declaration 
is has an initial
+ * URI string which matches another prefix declaration), all are 
included, though
+ * they may not be used when printing (that depends on the output 
process). In effect,
+ * this process has "false positives".
+ * 
+ * This function does not calculate new prefixes.
+ * 
+ * @see #calcInUsePrefixMappingTTL(Graph)
+ */
+public static PrefixMapping calcInUsePrefixMapping(Graph graph) {
+PrefixMapping prefixMapping = graph.getPrefixMapping() ;
+if ( prefixMapping == null )
+return null ;
+return calcInUsePrefixMapping(graph, prefixMapping) ;
+}
+
+/**
+ * Analyse the graph to see which prefixes of the given {@link 
PrefixMapping} are in
+ * use.
+ * 
+ * In the case of overlapping prefixes (where one prefix declaration 
is has an initial
+ * URI string which matches another prefix declaration), all are 
included, though
+ * they may not be used when printing (that depends on the output 
process). In effect,
+ * this process has "false positives".
+ * 
+ * This function does not calculate new prefixes.
+ * 
+ * @see #calcInUsePrefixMappingTTL(Graph, PrefixMapping)
+ */
+public static PrefixMapping calcInUsePrefixMapping(Graph graph, 
PrefixMapping prefixMapping) {
+
+/* Method:
+ * 
+ * For each URI in the data, look it up in the trie.
+ * to see if has a declared prefix.
+ * 
+ * Exit early if every prefix is accounted for. 
+ */
+   
+// Map prefix to URI.
+

[GitHub] jena pull request #432: JENA-1560: PrefixMappingUtils

2018-06-12 Thread afs
Github user afs commented on a diff in the pull request:

https://github.com/apache/jena/pull/432#discussion_r194708134
  
--- Diff: 
jena-core/src/main/java/org/apache/jena/util/PrefixMappingUtils.java ---
@@ -0,0 +1,362 @@
+/*
+ * 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.util;
+
+import java.util.* ;
+import java.util.function.Consumer ;
+import java.util.stream.Collectors ;
+
+import org.apache.jena.atlas.lib.SetUtils ;
+import org.apache.jena.atlas.lib.Trie ;
+import org.apache.jena.graph.Graph ;
+import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple ;
+import org.apache.jena.graph.impl.WrappedGraph;
+import org.apache.jena.rdf.model.Model ;
+import org.apache.jena.shared.PrefixMapping ;
+import org.apache.jena.shared.impl.PrefixMappingImpl ;
+
+public class PrefixMappingUtils {
+/**
+ * Return a read-only graph that has the same data (RDF triples) as 
the one given, but has a
+ * prefix mapping that only includes "in use " prefixes.
+ * 
+ * The prefix mappings of the two graphs are not connected. 
+ * Later changes to the prefix mapping of the original graph are not 
reflected in the returned graph.
+ * Modifications to the triples conatained in the underlying graph are 
reflected.   
+ */
+public static Graph graphInUsePrefixMapping(Graph graph) {
+final PrefixMapping prefixMapping = calcInUsePrefixMapping(graph) ;
+prefixMapping.lock() ;
+Graph graph2 = new WrappedGraph(graph) {
+@Override
+public void performAdd(Triple triple)
+{ throw new UnsupportedOperationException() ; }
+
+@Override
+public void performDelete(Triple triple)
+{ throw new UnsupportedOperationException() ; }
+
+@Override
+public PrefixMapping getPrefixMapping() {
+return prefixMapping ;
+}
+} ;
+return graph2 ;
+}
+
+/**
+ * Analyse the graph to see which prefixes of the graph are in use.
+ * 
+ * In the case of overlapping prefixes (where one prefix declaration 
is has an initial
+ * URI string which matches another prefix declaration), all are 
included, though
+ * they may not be used when printing (that depends on the output 
process). In effect,
+ * this process has "false positives".
+ * 
+ * This function does not calculate new prefixes.
+ * 
+ * @see #calcInUsePrefixMappingTTL(Graph)
+ */
+public static PrefixMapping calcInUsePrefixMapping(Graph graph) {
+PrefixMapping prefixMapping = graph.getPrefixMapping() ;
+if ( prefixMapping == null )
+return null ;
+return calcInUsePrefixMapping(graph, prefixMapping) ;
+}
+
+/**
+ * Analyse the graph to see which prefixes of the given {@link 
PrefixMapping} are in
+ * use.
+ * 
+ * In the case of overlapping prefixes (where one prefix declaration 
is has an initial
+ * URI string which matches another prefix declaration), all are 
included, though
+ * they may not be used when printing (that depends on the output 
process). In effect,
+ * this process has "false positives".
+ * 
+ * This function does not calculate new prefixes.
+ * 
+ * @see #calcInUsePrefixMappingTTL(Graph, PrefixMapping)
+ */
+public static PrefixMapping calcInUsePrefixMapping(Graph graph, 
PrefixMapping prefixMapping) {
+
+/* Method:
+ * 
+ * For each URI in the data, look it up in the trie.
+ * to see if has a declared prefix.
+ * 
+ * Exit early if every prefix is accounted for. 
+ */
+   
+// Map prefix to URI.
+

[GitHub] jena pull request #432: JENA-1560: PrefixMappingUtils

2018-06-12 Thread afs
Github user afs commented on a diff in the pull request:

https://github.com/apache/jena/pull/432#discussion_r194707130
  
--- Diff: 
jena-core/src/main/java/org/apache/jena/util/PrefixMappingUtils.java ---
@@ -0,0 +1,362 @@
+/*
+ * 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.util;
+
+import java.util.* ;
+import java.util.function.Consumer ;
+import java.util.stream.Collectors ;
+
+import org.apache.jena.atlas.lib.SetUtils ;
+import org.apache.jena.atlas.lib.Trie ;
+import org.apache.jena.graph.Graph ;
+import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple ;
+import org.apache.jena.graph.impl.WrappedGraph;
+import org.apache.jena.rdf.model.Model ;
+import org.apache.jena.shared.PrefixMapping ;
+import org.apache.jena.shared.impl.PrefixMappingImpl ;
+
+public class PrefixMappingUtils {
+/**
+ * Return a read-only graph that has the same data (RDF triples) as 
the one given, but has a
+ * prefix mapping that only includes "in use " prefixes.
--- End diff --

Done


---


[GitHub] jena pull request #432: JENA-1560: PrefixMappingUtils

2018-06-11 Thread ajs6f
Github user ajs6f commented on a diff in the pull request:

https://github.com/apache/jena/pull/432#discussion_r194564667
  
--- Diff: 
jena-core/src/main/java/org/apache/jena/util/PrefixMappingUtils.java ---
@@ -0,0 +1,362 @@
+/*
+ * 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.util;
+
+import java.util.* ;
+import java.util.function.Consumer ;
+import java.util.stream.Collectors ;
+
+import org.apache.jena.atlas.lib.SetUtils ;
+import org.apache.jena.atlas.lib.Trie ;
+import org.apache.jena.graph.Graph ;
+import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple ;
+import org.apache.jena.graph.impl.WrappedGraph;
+import org.apache.jena.rdf.model.Model ;
+import org.apache.jena.shared.PrefixMapping ;
+import org.apache.jena.shared.impl.PrefixMappingImpl ;
+
+public class PrefixMappingUtils {
+/**
+ * Return a read-only graph that has the same data (RDF triples) as 
the one given, but has a
+ * prefix mapping that only includes "in use " prefixes.
+ * 
+ * The prefix mappings of the two graphs are not connected. 
+ * Later changes to the prefix mapping of the original graph are not 
reflected in the returned graph.
+ * Modifications to the triples conatained in the underlying graph are 
reflected.   
--- End diff --

Typo "conatained" => "contained"


---


[GitHub] jena pull request #432: JENA-1560: PrefixMappingUtils

2018-06-11 Thread ajs6f
Github user ajs6f commented on a diff in the pull request:

https://github.com/apache/jena/pull/432#discussion_r194566823
  
--- Diff: 
jena-core/src/main/java/org/apache/jena/util/PrefixMappingUtils.java ---
@@ -0,0 +1,362 @@
+/*
+ * 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.util;
+
+import java.util.* ;
+import java.util.function.Consumer ;
+import java.util.stream.Collectors ;
+
+import org.apache.jena.atlas.lib.SetUtils ;
+import org.apache.jena.atlas.lib.Trie ;
+import org.apache.jena.graph.Graph ;
+import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple ;
+import org.apache.jena.graph.impl.WrappedGraph;
+import org.apache.jena.rdf.model.Model ;
+import org.apache.jena.shared.PrefixMapping ;
+import org.apache.jena.shared.impl.PrefixMappingImpl ;
+
+public class PrefixMappingUtils {
+/**
+ * Return a read-only graph that has the same data (RDF triples) as 
the one given, but has a
+ * prefix mapping that only includes "in use " prefixes.
+ * 
+ * The prefix mappings of the two graphs are not connected. 
+ * Later changes to the prefix mapping of the original graph are not 
reflected in the returned graph.
+ * Modifications to the triples conatained in the underlying graph are 
reflected.   
+ */
+public static Graph graphInUsePrefixMapping(Graph graph) {
+final PrefixMapping prefixMapping = calcInUsePrefixMapping(graph) ;
+prefixMapping.lock() ;
+Graph graph2 = new WrappedGraph(graph) {
+@Override
+public void performAdd(Triple triple)
+{ throw new UnsupportedOperationException() ; }
+
+@Override
+public void performDelete(Triple triple)
+{ throw new UnsupportedOperationException() ; }
+
+@Override
+public PrefixMapping getPrefixMapping() {
+return prefixMapping ;
+}
+} ;
+return graph2 ;
+}
+
+/**
+ * Analyse the graph to see which prefixes of the graph are in use.
+ * 
+ * In the case of overlapping prefixes (where one prefix declaration 
is has an initial
+ * URI string which matches another prefix declaration), all are 
included, though
+ * they may not be used when printing (that depends on the output 
process). In effect,
+ * this process has "false positives".
+ * 
+ * This function does not calculate new prefixes.
+ * 
+ * @see #calcInUsePrefixMappingTTL(Graph)
+ */
+public static PrefixMapping calcInUsePrefixMapping(Graph graph) {
+PrefixMapping prefixMapping = graph.getPrefixMapping() ;
+if ( prefixMapping == null )
+return null ;
+return calcInUsePrefixMapping(graph, prefixMapping) ;
+}
+
+/**
+ * Analyse the graph to see which prefixes of the given {@link 
PrefixMapping} are in
+ * use.
+ * 
+ * In the case of overlapping prefixes (where one prefix declaration 
is has an initial
+ * URI string which matches another prefix declaration), all are 
included, though
+ * they may not be used when printing (that depends on the output 
process). In effect,
+ * this process has "false positives".
+ * 
+ * This function does not calculate new prefixes.
+ * 
+ * @see #calcInUsePrefixMappingTTL(Graph, PrefixMapping)
+ */
+public static PrefixMapping calcInUsePrefixMapping(Graph graph, 
PrefixMapping prefixMapping) {
+
+/* Method:
+ * 
+ * For each URI in the data, look it up in the trie.
+ * to see if has a declared prefix.
+ * 
+ * Exit early if every prefix is accounted for. 
+ */
+   
+// Map prefix to URI.
+  

[GitHub] jena pull request #432: JENA-1560: PrefixMappingUtils

2018-06-11 Thread ajs6f
Github user ajs6f commented on a diff in the pull request:

https://github.com/apache/jena/pull/432#discussion_r194567840
  
--- Diff: 
jena-core/src/main/java/org/apache/jena/util/PrefixMappingUtils.java ---
@@ -0,0 +1,362 @@
+/*
+ * 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.util;
+
+import java.util.* ;
+import java.util.function.Consumer ;
+import java.util.stream.Collectors ;
+
+import org.apache.jena.atlas.lib.SetUtils ;
+import org.apache.jena.atlas.lib.Trie ;
+import org.apache.jena.graph.Graph ;
+import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple ;
+import org.apache.jena.graph.impl.WrappedGraph;
+import org.apache.jena.rdf.model.Model ;
+import org.apache.jena.shared.PrefixMapping ;
+import org.apache.jena.shared.impl.PrefixMappingImpl ;
+
+public class PrefixMappingUtils {
+/**
+ * Return a read-only graph that has the same data (RDF triples) as 
the one given, but has a
+ * prefix mapping that only includes "in use " prefixes.
+ * 
+ * The prefix mappings of the two graphs are not connected. 
+ * Later changes to the prefix mapping of the original graph are not 
reflected in the returned graph.
+ * Modifications to the triples conatained in the underlying graph are 
reflected.   
+ */
+public static Graph graphInUsePrefixMapping(Graph graph) {
+final PrefixMapping prefixMapping = calcInUsePrefixMapping(graph) ;
+prefixMapping.lock() ;
+Graph graph2 = new WrappedGraph(graph) {
+@Override
+public void performAdd(Triple triple)
+{ throw new UnsupportedOperationException() ; }
+
+@Override
+public void performDelete(Triple triple)
+{ throw new UnsupportedOperationException() ; }
+
+@Override
+public PrefixMapping getPrefixMapping() {
+return prefixMapping ;
+}
+} ;
+return graph2 ;
+}
+
+/**
+ * Analyse the graph to see which prefixes of the graph are in use.
+ * 
+ * In the case of overlapping prefixes (where one prefix declaration 
is has an initial
+ * URI string which matches another prefix declaration), all are 
included, though
+ * they may not be used when printing (that depends on the output 
process). In effect,
+ * this process has "false positives".
+ * 
+ * This function does not calculate new prefixes.
+ * 
+ * @see #calcInUsePrefixMappingTTL(Graph)
+ */
+public static PrefixMapping calcInUsePrefixMapping(Graph graph) {
+PrefixMapping prefixMapping = graph.getPrefixMapping() ;
+if ( prefixMapping == null )
+return null ;
+return calcInUsePrefixMapping(graph, prefixMapping) ;
+}
+
+/**
+ * Analyse the graph to see which prefixes of the given {@link 
PrefixMapping} are in
+ * use.
+ * 
+ * In the case of overlapping prefixes (where one prefix declaration 
is has an initial
+ * URI string which matches another prefix declaration), all are 
included, though
+ * they may not be used when printing (that depends on the output 
process). In effect,
+ * this process has "false positives".
+ * 
+ * This function does not calculate new prefixes.
+ * 
+ * @see #calcInUsePrefixMappingTTL(Graph, PrefixMapping)
+ */
+public static PrefixMapping calcInUsePrefixMapping(Graph graph, 
PrefixMapping prefixMapping) {
+
+/* Method:
+ * 
+ * For each URI in the data, look it up in the trie.
+ * to see if has a declared prefix.
+ * 
+ * Exit early if every prefix is accounted for. 
+ */
+   
+// Map prefix to URI.
+  

[GitHub] jena pull request #432: JENA-1560: PrefixMappingUtils

2018-06-11 Thread ajs6f
Github user ajs6f commented on a diff in the pull request:

https://github.com/apache/jena/pull/432#discussion_r194564937
  
--- Diff: 
jena-core/src/main/java/org/apache/jena/util/PrefixMappingUtils.java ---
@@ -0,0 +1,362 @@
+/*
+ * 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.util;
+
+import java.util.* ;
+import java.util.function.Consumer ;
+import java.util.stream.Collectors ;
+
+import org.apache.jena.atlas.lib.SetUtils ;
+import org.apache.jena.atlas.lib.Trie ;
+import org.apache.jena.graph.Graph ;
+import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple ;
+import org.apache.jena.graph.impl.WrappedGraph;
+import org.apache.jena.rdf.model.Model ;
+import org.apache.jena.shared.PrefixMapping ;
+import org.apache.jena.shared.impl.PrefixMappingImpl ;
+
+public class PrefixMappingUtils {
+/**
+ * Return a read-only graph that has the same data (RDF triples) as 
the one given, but has a
+ * prefix mapping that only includes "in use " prefixes.
--- End diff --

Might want to put a link here to `calcInUsePrefixMapping` below just in 
case someone wants to the precise meaning of "in use". 


---


[GitHub] jena pull request #432: JENA-1560: PrefixMappingUtils

2018-06-11 Thread ajs6f
Github user ajs6f commented on a diff in the pull request:

https://github.com/apache/jena/pull/432#discussion_r194568224
  
--- Diff: 
jena-core/src/main/java/org/apache/jena/util/PrefixMappingUtils.java ---
@@ -0,0 +1,362 @@
+/*
+ * 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.util;
+
+import java.util.* ;
+import java.util.function.Consumer ;
+import java.util.stream.Collectors ;
+
+import org.apache.jena.atlas.lib.SetUtils ;
+import org.apache.jena.atlas.lib.Trie ;
+import org.apache.jena.graph.Graph ;
+import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple ;
+import org.apache.jena.graph.impl.WrappedGraph;
+import org.apache.jena.rdf.model.Model ;
+import org.apache.jena.shared.PrefixMapping ;
+import org.apache.jena.shared.impl.PrefixMappingImpl ;
+
+public class PrefixMappingUtils {
+/**
+ * Return a read-only graph that has the same data (RDF triples) as 
the one given, but has a
+ * prefix mapping that only includes "in use " prefixes.
+ * 
+ * The prefix mappings of the two graphs are not connected. 
+ * Later changes to the prefix mapping of the original graph are not 
reflected in the returned graph.
+ * Modifications to the triples conatained in the underlying graph are 
reflected.   
+ */
+public static Graph graphInUsePrefixMapping(Graph graph) {
+final PrefixMapping prefixMapping = calcInUsePrefixMapping(graph) ;
+prefixMapping.lock() ;
+Graph graph2 = new WrappedGraph(graph) {
+@Override
+public void performAdd(Triple triple)
+{ throw new UnsupportedOperationException() ; }
+
+@Override
+public void performDelete(Triple triple)
+{ throw new UnsupportedOperationException() ; }
+
+@Override
+public PrefixMapping getPrefixMapping() {
+return prefixMapping ;
+}
+} ;
+return graph2 ;
+}
+
+/**
+ * Analyse the graph to see which prefixes of the graph are in use.
+ * 
+ * In the case of overlapping prefixes (where one prefix declaration 
is has an initial
+ * URI string which matches another prefix declaration), all are 
included, though
+ * they may not be used when printing (that depends on the output 
process). In effect,
+ * this process has "false positives".
+ * 
+ * This function does not calculate new prefixes.
+ * 
+ * @see #calcInUsePrefixMappingTTL(Graph)
+ */
+public static PrefixMapping calcInUsePrefixMapping(Graph graph) {
+PrefixMapping prefixMapping = graph.getPrefixMapping() ;
+if ( prefixMapping == null )
+return null ;
+return calcInUsePrefixMapping(graph, prefixMapping) ;
+}
+
+/**
+ * Analyse the graph to see which prefixes of the given {@link 
PrefixMapping} are in
+ * use.
+ * 
+ * In the case of overlapping prefixes (where one prefix declaration 
is has an initial
+ * URI string which matches another prefix declaration), all are 
included, though
+ * they may not be used when printing (that depends on the output 
process). In effect,
+ * this process has "false positives".
+ * 
+ * This function does not calculate new prefixes.
+ * 
+ * @see #calcInUsePrefixMappingTTL(Graph, PrefixMapping)
+ */
+public static PrefixMapping calcInUsePrefixMapping(Graph graph, 
PrefixMapping prefixMapping) {
+
+/* Method:
+ * 
+ * For each URI in the data, look it up in the trie.
+ * to see if has a declared prefix.
+ * 
+ * Exit early if every prefix is accounted for. 
+ */
+   
+// Map prefix to URI.
+  

[GitHub] jena pull request #432: JENA-1560: PrefixMappingUtils

2018-06-09 Thread kinow
Github user kinow commented on a diff in the pull request:

https://github.com/apache/jena/pull/432#discussion_r194243520
  
--- Diff: 
jena-core/src/main/java/org/apache/jena/util/PrefixMappingUtils.java ---
@@ -0,0 +1,361 @@
+/*
+ * 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.util;
+
+import java.util.* ;
+import java.util.function.Consumer ;
+import java.util.stream.Collectors ;
+
+import org.apache.jena.atlas.lib.SetUtils ;
+import org.apache.jena.atlas.lib.Trie ;
+import org.apache.jena.graph.Graph ;
+import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple ;
+import org.apache.jena.graph.impl.WrappedGraph;
+import org.apache.jena.rdf.model.Model ;
+import org.apache.jena.shared.PrefixMapping ;
+import org.apache.jena.shared.impl.PrefixMappingImpl ;
+
+public class PrefixMappingUtils {
+/**
+ * Return a read-only graph that has the same data (RDF triples) as 
the one given, but has a
+ * prefix mapping that only includes "in use " prefixes.
+ * 
+ * The prefix mappings of the two graphs are not connected. 
+ * Later changes to the prefix mapping of the original graph are not 
reflected in the returned graph.
+ * Modifications to the triples conatained in the underlying graph are 
reflected.   
+ */
+public static Graph graphInUsePrefixMapping(Graph graph) {
+final PrefixMapping prefixMapping = calcInUsePrefixMapping(graph) ;
+prefixMapping.lock() ;
+Graph graph2 = new WrappedGraph(graph) {
+@Override
+public void performAdd(Triple triple)
+{ throw new UnsupportedOperationException() ; }
+
+@Override
+public void performDelete(Triple triple)
+{ throw new UnsupportedOperationException() ; }
+
+@Override
+public PrefixMapping getPrefixMapping() {
+return prefixMapping ;
+}
+} ;
+return graph2 ;
+}
+
+/**
+ * Analyse the graph to see which prefixes of the graph are in use.
+ * 
+ * In the case of overlapping prefixes (where one prefix declaration 
is has an initial
+ * URI string which imatches another prefix declaration), all are 
included, though
+ * they may not be used when printing (that depends on the output 
process). In effect,
+ * this process has "false positives".
+ * 
+ * This function does not calculate new prefixes.
+ * 
+ * @see #calcInUsePrefixMappingTTL(Graph)
+ */
+public static PrefixMapping calcInUsePrefixMapping(Graph graph) {
+PrefixMapping prefixMapping = graph.getPrefixMapping() ;
+if ( prefixMapping == null )
+return null ;
+return calcInUsePrefixMapping(graph, prefixMapping) ;
+}
+
+/**
+ * Analyse the graph to see which prefixes of the given {@link 
PrefixMapping} are in
+ * use.
+ * 
+ * In the case of overlapping prefixes (where one prefix declaration 
is has an initial
+ * URI string which imatches another prefix declaration), all are 
included, though
+ * they may not be used when printing (that depends on the output 
process). In effect,
+ * this process has "false positives".
+ * 
+ * This function does not calculate new prefixes.
+ * 
+ * @see #calcInUsePrefixMappingTTL(Graph, PrefixMapping)
+ */
+public static PrefixMapping calcInUsePrefixMapping(Graph graph, 
PrefixMapping prefixMapping) {
+
+/* Method:
+ * 
+ * For each URI in the data, look it up in the trie.
+ * after the last ":" for URNs, then see if that is a declared 
prefix.
+ * 
+ * Exit early if every prefix is accounted for. 
+ */
+   
+   

[GitHub] jena pull request #432: JENA-1560: PrefixMappingUtils

2018-06-09 Thread kinow
Github user kinow commented on a diff in the pull request:

https://github.com/apache/jena/pull/432#discussion_r194243515
  
--- Diff: 
jena-core/src/main/java/org/apache/jena/util/PrefixMappingUtils.java ---
@@ -0,0 +1,361 @@
+/*
+ * 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.util;
+
+import java.util.* ;
+import java.util.function.Consumer ;
+import java.util.stream.Collectors ;
+
+import org.apache.jena.atlas.lib.SetUtils ;
+import org.apache.jena.atlas.lib.Trie ;
+import org.apache.jena.graph.Graph ;
+import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple ;
+import org.apache.jena.graph.impl.WrappedGraph;
+import org.apache.jena.rdf.model.Model ;
+import org.apache.jena.shared.PrefixMapping ;
+import org.apache.jena.shared.impl.PrefixMappingImpl ;
+
+public class PrefixMappingUtils {
+/**
+ * Return a read-only graph that has the same data (RDF triples) as 
the one given, but has a
+ * prefix mapping that only includes "in use " prefixes.
+ * 
+ * The prefix mappings of the two graphs are not connected. 
+ * Later changes to the prefix mapping of the original graph are not 
reflected in the returned graph.
+ * Modifications to the triples conatained in the underlying graph are 
reflected.   
+ */
+public static Graph graphInUsePrefixMapping(Graph graph) {
+final PrefixMapping prefixMapping = calcInUsePrefixMapping(graph) ;
+prefixMapping.lock() ;
+Graph graph2 = new WrappedGraph(graph) {
+@Override
+public void performAdd(Triple triple)
+{ throw new UnsupportedOperationException() ; }
+
+@Override
+public void performDelete(Triple triple)
+{ throw new UnsupportedOperationException() ; }
+
+@Override
+public PrefixMapping getPrefixMapping() {
+return prefixMapping ;
+}
+} ;
+return graph2 ;
+}
+
+/**
+ * Analyse the graph to see which prefixes of the graph are in use.
+ * 
+ * In the case of overlapping prefixes (where one prefix declaration 
is has an initial
+ * URI string which imatches another prefix declaration), all are 
included, though
+ * they may not be used when printing (that depends on the output 
process). In effect,
+ * this process has "false positives".
+ * 
+ * This function does not calculate new prefixes.
+ * 
+ * @see #calcInUsePrefixMappingTTL(Graph)
+ */
+public static PrefixMapping calcInUsePrefixMapping(Graph graph) {
+PrefixMapping prefixMapping = graph.getPrefixMapping() ;
+if ( prefixMapping == null )
+return null ;
+return calcInUsePrefixMapping(graph, prefixMapping) ;
+}
+
+/**
+ * Analyse the graph to see which prefixes of the given {@link 
PrefixMapping} are in
+ * use.
+ * 
+ * In the case of overlapping prefixes (where one prefix declaration 
is has an initial
+ * URI string which imatches another prefix declaration), all are 
included, though
--- End diff --

s/imatches/it matches
?


---


[GitHub] jena pull request #432: JENA-1560: PrefixMappingUtils

2018-06-09 Thread kinow
Github user kinow commented on a diff in the pull request:

https://github.com/apache/jena/pull/432#discussion_r194243525
  
--- Diff: 
jena-core/src/main/java/org/apache/jena/util/PrefixMappingUtils.java ---
@@ -0,0 +1,361 @@
+/*
+ * 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.util;
+
+import java.util.* ;
+import java.util.function.Consumer ;
+import java.util.stream.Collectors ;
+
+import org.apache.jena.atlas.lib.SetUtils ;
+import org.apache.jena.atlas.lib.Trie ;
+import org.apache.jena.graph.Graph ;
+import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple ;
+import org.apache.jena.graph.impl.WrappedGraph;
+import org.apache.jena.rdf.model.Model ;
+import org.apache.jena.shared.PrefixMapping ;
+import org.apache.jena.shared.impl.PrefixMappingImpl ;
+
+public class PrefixMappingUtils {
+/**
+ * Return a read-only graph that has the same data (RDF triples) as 
the one given, but has a
+ * prefix mapping that only includes "in use " prefixes.
+ * 
+ * The prefix mappings of the two graphs are not connected. 
+ * Later changes to the prefix mapping of the original graph are not 
reflected in the returned graph.
+ * Modifications to the triples conatained in the underlying graph are 
reflected.   
+ */
+public static Graph graphInUsePrefixMapping(Graph graph) {
+final PrefixMapping prefixMapping = calcInUsePrefixMapping(graph) ;
+prefixMapping.lock() ;
+Graph graph2 = new WrappedGraph(graph) {
+@Override
+public void performAdd(Triple triple)
+{ throw new UnsupportedOperationException() ; }
+
+@Override
+public void performDelete(Triple triple)
+{ throw new UnsupportedOperationException() ; }
+
+@Override
+public PrefixMapping getPrefixMapping() {
+return prefixMapping ;
+}
+} ;
+return graph2 ;
+}
+
+/**
+ * Analyse the graph to see which prefixes of the graph are in use.
+ * 
+ * In the case of overlapping prefixes (where one prefix declaration 
is has an initial
+ * URI string which imatches another prefix declaration), all are 
included, though
+ * they may not be used when printing (that depends on the output 
process). In effect,
+ * this process has "false positives".
+ * 
+ * This function does not calculate new prefixes.
+ * 
+ * @see #calcInUsePrefixMappingTTL(Graph)
+ */
+public static PrefixMapping calcInUsePrefixMapping(Graph graph) {
+PrefixMapping prefixMapping = graph.getPrefixMapping() ;
+if ( prefixMapping == null )
+return null ;
+return calcInUsePrefixMapping(graph, prefixMapping) ;
+}
+
+/**
+ * Analyse the graph to see which prefixes of the given {@link 
PrefixMapping} are in
+ * use.
+ * 
+ * In the case of overlapping prefixes (where one prefix declaration 
is has an initial
+ * URI string which imatches another prefix declaration), all are 
included, though
+ * they may not be used when printing (that depends on the output 
process). In effect,
+ * this process has "false positives".
+ * 
+ * This function does not calculate new prefixes.
+ * 
+ * @see #calcInUsePrefixMappingTTL(Graph, PrefixMapping)
+ */
+public static PrefixMapping calcInUsePrefixMapping(Graph graph, 
PrefixMapping prefixMapping) {
+
+/* Method:
+ * 
+ * For each URI in the data, look it up in the trie.
+ * after the last ":" for URNs, then see if that is a declared 
prefix.
+ * 
+ * Exit early if every prefix is accounted for. 
+ */
+   
+   

[GitHub] jena pull request #432: JENA-1560: PrefixMappingUtils

2018-06-09 Thread kinow
Github user kinow commented on a diff in the pull request:

https://github.com/apache/jena/pull/432#discussion_r194243510
  
--- Diff: 
jena-core/src/main/java/org/apache/jena/util/PrefixMappingUtils.java ---
@@ -0,0 +1,361 @@
+/*
+ * 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.util;
+
+import java.util.* ;
+import java.util.function.Consumer ;
+import java.util.stream.Collectors ;
+
+import org.apache.jena.atlas.lib.SetUtils ;
+import org.apache.jena.atlas.lib.Trie ;
+import org.apache.jena.graph.Graph ;
+import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple ;
+import org.apache.jena.graph.impl.WrappedGraph;
+import org.apache.jena.rdf.model.Model ;
+import org.apache.jena.shared.PrefixMapping ;
+import org.apache.jena.shared.impl.PrefixMappingImpl ;
+
+public class PrefixMappingUtils {
+/**
+ * Return a read-only graph that has the same data (RDF triples) as 
the one given, but has a
+ * prefix mapping that only includes "in use " prefixes.
+ * 
+ * The prefix mappings of the two graphs are not connected. 
+ * Later changes to the prefix mapping of the original graph are not 
reflected in the returned graph.
+ * Modifications to the triples conatained in the underlying graph are 
reflected.   
+ */
+public static Graph graphInUsePrefixMapping(Graph graph) {
+final PrefixMapping prefixMapping = calcInUsePrefixMapping(graph) ;
+prefixMapping.lock() ;
+Graph graph2 = new WrappedGraph(graph) {
+@Override
+public void performAdd(Triple triple)
+{ throw new UnsupportedOperationException() ; }
+
+@Override
+public void performDelete(Triple triple)
+{ throw new UnsupportedOperationException() ; }
+
+@Override
+public PrefixMapping getPrefixMapping() {
+return prefixMapping ;
+}
+} ;
+return graph2 ;
+}
+
+/**
+ * Analyse the graph to see which prefixes of the graph are in use.
+ * 
+ * In the case of overlapping prefixes (where one prefix declaration 
is has an initial
+ * URI string which imatches another prefix declaration), all are 
included, though
--- End diff --

s/imatches/it matches

?


---


[GitHub] jena pull request #432: JENA-1560: PrefixMappingUtils

2018-06-09 Thread kinow
Github user kinow commented on a diff in the pull request:

https://github.com/apache/jena/pull/432#discussion_r194243482
  
--- Diff: 
jena-core/src/main/java/org/apache/jena/util/PrefixMappingUtils.java ---
@@ -0,0 +1,361 @@
+/*
+ * 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.util;
+
+import java.util.* ;
+import java.util.function.Consumer ;
+import java.util.stream.Collectors ;
+
+import org.apache.jena.atlas.lib.SetUtils ;
+import org.apache.jena.atlas.lib.Trie ;
+import org.apache.jena.graph.Graph ;
+import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple ;
+import org.apache.jena.graph.impl.WrappedGraph;
+import org.apache.jena.rdf.model.Model ;
+import org.apache.jena.shared.PrefixMapping ;
+import org.apache.jena.shared.impl.PrefixMappingImpl ;
+
+public class PrefixMappingUtils {
+/**
+ * Return a read-only graph that has the same data (RDF triples) as 
the one given, but has a
+ * prefix mapping that only includes "in use " prefixes.
+ * 
+ * The prefix mappings of the two graphs are not connected. 
+ * Later changes to the prefix mapping of the original graph are not 
reflected in the returned graph.
+ * Modifications to the triples conatained in the underlying graph are 
reflected.   
+ */
+public static Graph graphInUsePrefixMapping(Graph graph) {
+final PrefixMapping prefixMapping = calcInUsePrefixMapping(graph) ;
+prefixMapping.lock() ;
+Graph graph2 = new WrappedGraph(graph) {
+@Override
+public void performAdd(Triple triple)
+{ throw new UnsupportedOperationException() ; }
+
+@Override
+public void performDelete(Triple triple)
+{ throw new UnsupportedOperationException() ; }
+
+@Override
+public PrefixMapping getPrefixMapping() {
+return prefixMapping ;
+}
+} ;
+return graph2 ;
+}
+
+/**
+ * Analyse the graph to see which prefixes of the graph are in use.
+ * 
+ * In the case of overlapping prefixes (where one prefix declaration 
is has an initial
+ * URI string which imatches another prefix declaration), all are 
included, though
+ * they may not be used when printing (that depends on the output 
process). In effect,
+ * this process has "false positives".
+ * 
+ * This function does not calculate new prefixes.
+ * 
+ * @see #calcInUsePrefixMappingTTL(Graph)
+ */
+public static PrefixMapping calcInUsePrefixMapping(Graph graph) {
+PrefixMapping prefixMapping = graph.getPrefixMapping() ;
+if ( prefixMapping == null )
+return null ;
+return calcInUsePrefixMapping(graph, prefixMapping) ;
+}
+
+/**
+ * Analyse the graph to see which prefixes of the given {@link 
PrefixMapping} are in
+ * use.
+ * 
+ * In the case of overlapping prefixes (where one prefix declaration 
is has an initial
+ * URI string which imatches another prefix declaration), all are 
included, though
+ * they may not be used when printing (that depends on the output 
process). In effect,
+ * this process has "false positives".
+ * 
+ * This function does not calculate new prefixes.
+ * 
+ * @see #calcInUsePrefixMappingTTL(Graph, PrefixMapping)
+ */
+public static PrefixMapping calcInUsePrefixMapping(Graph graph, 
PrefixMapping prefixMapping) {
+
+/* Method:
+ * 
+ * For each URI in the data, look it up in the trie.
+ * after the last ":" for URNs, then see if that is a declared 
prefix.
+ * 
+ * Exit early if every prefix is accounted for. 
+ */
+   
+   

[GitHub] jena pull request #432: JENA-1560: PrefixMappingUtils

2018-06-09 Thread afs
GitHub user afs opened a pull request:

https://github.com/apache/jena/pull/432

JENA-1560: PrefixMappingUtils

Some utility code that can be useful.

You can merge this pull request into a Git repository by running:

$ git pull https://github.com/afs/jena prefix-utils

Alternatively you can review and apply these changes as the patch at:

https://github.com/apache/jena/pull/432.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

This closes #432


commit cf3c2592e096279dfb3a16eb6205244f7bde076c
Author: Andy Seaborne 
Date:   2018-06-09T14:38:15Z

JENA-1560: PrefixMappingUtils




---