Hi there - thanks for investigating.

On 06/12/2020 17:37, Jean-Marc Vanel wrote:
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

That will change.
All graphs share the same prefix map.
This makes sense to me when you realise that a backup should capture the dataset.
The basic use is "load a file into a dataset, write out the dataset file."

Keeping all the separate prefix maps per graph and having proper handling ended up wit a lot of classes duplicating functionality, one with and without graph name.

    - the default graph also keeps its separate prefix map
    - Model.getNsPrefixMap() gets the prefix map
    - the union graph does not provide a prefix map

It will do, the same as the dataset itself.

    - WriterDatasetRIOT.write() outputs prefixes from given prefix map

And the give prefix map was the default graph.

    - 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

Two -- Map<String, String> is just a way to look at prefix maps.

PrefixMapping remains for the Model/Statement API compatibility. As you a say it's in the Model interface.

There are (3.18.0) adapter in both directions PrefixMap<->PrefixMapping

PrefixMapping has some XML-related restrictions in tits main implementation that do not apply for Turtle.

    - 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

As noted above

new code available now in SNAPSHOT builds.

.
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

    Andy



Le mer. 2 déc. 2020 à 22:31, Andy Seaborne <a...@apache.org> 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 <a...@apache.org> 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 <a...@apache.org> 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