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. + * <p> + * 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. + * <p> + * 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". + * <p> + * 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. + * <p> + * 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 ?
---