I made careful tests ( https://github.com/jmvanel/jena-examples) , and with
jenaVersion =  "3.17.0" and TDB 1, I observed the following, which is
globally *satisfying*:

   - each named graph keeps its separate prefix map, coming from the TTL
   loaded
   - the default graph also keeps its separate prefix map
   - Model.getNsPrefixMap() gets the prefix map
   - the union graph does not provide a prefix map
   - WriterDatasetRIOT.write() outputs prefixes from given prefix map
   - PrefixMappingUtils.calcInUsePrefixMapping() analyses the triples and
   keeps the prefixes actually used among the given PrefixMapping
   - there are 3 data structures: PrefixMapping (subinterface of Model),
   PrefixMap (used for writing), and Map<String, String> ; which is not
   very convenient
   - for testing calcInUsePrefixMapping() I took the PrefixMapping of the
   Default Model; if I would create one from scratch I could
   use org.apache.jena.shared.impl.PrefixMappingImpl

I didn't understand from Andy what is coming after Jena 3.17 about prefixes
.
Probably the doc. should mention WriterDatasetRIOT in
https://jena.apache.org/documentation/io/rdf-output.html#api .

Jean-Marc Vanel
<http://semantic-forms.cc:9112/display?displayuri=http://jmvanel.free.fr/jmv.rdf%23me>
+33
(0)6 89 16 29 52


Le mer. 2 déc. 2020 à 22:31, Andy Seaborne <[email protected]> a écrit :

>
>
> On 02/12/2020 17:33, Jean-Marc Vanel wrote:
> > I thought I could retrieve the prefix map from TDB 1 with
> > dataset.getDefaultModel().getNsPrefixMap()
>
>
> PrefixMapping prefixMapping = dataset.getDefaultModel();
>
> PrefixMapping is a subinterface of Model.
>
> See
>
> https://jena.apache.org/documentation/javadoc/jena/org/apache/jena/rdf/model/Model.html
>
>
>
> > but that was a mistake; really I don't know how to get the prefix map.
> >
> > I started a project called jena-examples, that may grow with help from
> the
> > community.
> > Here is the Java code that I tried to retrieve the prefix map and use it
> to
> > print a named graph:
> >
> https://github.com/jmvanel/jena-examples/blob/main/src/main/java/WriteWithPrefixMap1.java#L22
> >
> > ( I use my local test database, 13M triples; I can add to code to
> populate
> > an empty TDB  )
> > ( I just provided SBT files, tell me if you want a pom.xml )
> >
> > Jean-Marc Vanel
> > <
> http://semantic-forms.cc:9112/display?displayuri=http://jmvanel.free.fr/jmv.rdf%23me
> >
> > +33
> > (0)6 89 16 29 52
> >
> >
> > Le mar. 1 déc. 2020 à 22:36, Andy Seaborne <[email protected]> a écrit :
> >
> >>
> >>
> >> On 01/12/2020 21:15, Jean-Marc Vanel wrote:
> >>   > This is fine , I can get all the TDB prefix mappings with:
> >>   > dataset.getDefaultModel().getNsPrefixMap() ,
> >>   > but I don't see how I can add them to a graph resulting from a
> SPARQL
> >> query,
> >>
> >> You mean CONSTRUCT or DESCRIBE?
> >>
> >> Add after return or use the execConstruct(model) form to pass in a model
> >> with prefixes already set.
> >>
> >>   > in order to write it. I see nothing for this in RDFDataMgr .
> >>
> >> RDFDataMgr is a convenience library.
> >>
> >> The lower level interface WriterGraphRIOT takes a PrefixMap.
> >>
> >> You can get a writer(factory) from the RDFWriterRegistry.
> >>
> >>   > And then, if I can add them while printing a graph, will the big
> list
> >>   > of prefixes be added,
> >>   > or only the prefixes actually used will be printed ?
> >>
> >> Declared unless you use PrefixMappingUtils.calcInUsePrefixMapping which
> >> is not so cheap as to automatically run it each time.
> >>
> >>       Andy
> >>
> >>   >
> >>   > Jean-Marc Vanel
> >>   >
> >> <
> >>
> http://semantic-forms.cc:9112/display?displayuri=http://jmvanel.free.fr/jmv.rdf%23me
> >>>
> >>   > +33
> >>   > (0)6 89 16 29 52
> >>   >
> >>   >
> >>   > Le mar. 1 déc. 2020 à 21:34, Andy Seaborne <[email protected]> a
> écrit :
> >>   >
> >>   >>
> >>   >>
> >>   >> On 01/12/2020 19:02, Jean-Marc Vanel wrote:
> >>   >>> Empty maps are obtained by calling getPrefixMapping() ,
> >>   >>> either with a graph from a SPARQL query, or from the Union Graph.
> >>   >>
> >>   >> Perfect timing!
> >>   >>
> >>   >> JENA-2006 (in-progress as of 2020-12-01 - PR went in today.
> >>   >> adds Dataset.getPrefixMapping() and DatsetGraph.prefixes()
> >>   >>
> >>   >> For a TDB database, all graphs will have the same prefix map,
> including
> >>   >> the union graph.
> >>   >>
> >>   >> Currently - 3.17.0 - the dataset prefixes (i.e. as used for
> output) are
> >>   >> held with the default graph. While the code supports additonal
> prefix
> >>   >> sets, they are accssible without going into the implementation.
> >>   >>
> >>   >> JENA-2006 changes all that.
> >>   >>
> >>   >>>   From a SPARQL query, only possible prefix mappings are from the
> >> query,
> >>   >> not
> >>   >>> the database.
> >>   >>
> >>   >> They are on the default graph, if there are any from TriG.
> >>   >>
> >>   >>> Same thing with
> >>   >>> PrefixMappingUtils.calcInUsePrefixMapping(graph)
> >>   >>> There is a class called DatasetPrefixesTDB , but it seems a low
> level
> >>   >>> implementation class.
> >>   >>> Some code comments imply that a prefixes map is not maintained
> >>   >>> permanently ...
> >>   >>>
> >>   >>> Not yet tested with 3.17.0 .
> >>   >>
> >>   >> No change.
> >>   >>
> >>   >>       Andy
> >>   >>
> >>   >>>
> >>   >>> Jean-Marc Vanel
> >>   >>> <
> >>   >>
> >>
> >>
> http://semantic-forms.cc:1952/display?displayuri=http://jmvanel.free.fr/jmv.rdf%23me
> >>   >>>
> >>   >>> +33 (0)6 89 16 29 52
> >>   >>> Twitter: @jmvanel , @jmvanel_fr ; chat: irc://
> >> irc.freenode.net#eulergui
> >>   >>>    Chroniques jardin
> >>   >>> <
> >>   >>
> >>
> >>
> http://semantic-forms.cc:1952/history?uri=http%3A%2F%2Fdbpedia.org%2Fresource%2FChronicle
> >>   >>>
> >>   >>>
> >>   >>
> >>
> >
>

Reply via email to