Hi Andy,

> On Feb 23, 2019, at 3:14 PM, Andy Seaborne <[email protected]> wrote:
> 
> I thought xml:base has to be enabled in the RDF/XML writer, it's no on by 
> default.
> 
> https://jena.apache.org/documentation/io/rdfxml_howto.html#advanced-rdfxml-output
>  
> <https://jena.apache.org/documentation/io/rdfxml_howto.html#advanced-rdfxml-output>

Ah! Thanks very much for pointing to docs on 
org.apache.jena.rdf.model.RDFWriter . Indeed setting the “xmlbase” property 
causes an xml:base to be included in the <rdf:RDF/> header as desired:

>     org.apache.jena.rdf.model.RDFWriter rdfw = m.getWriter("RDF/XML");
>     rdfw.setProperty("xmlbase", "http://purl.bdrc.io/ontology/ext/auth/";);
>     rdfw.write(m, System.out, "http://purl.bdrc.io/ontology/ext/auth/";);

Are there any particular issues to be aware of when using 
org.apache.jena.rdf.model.RDFWriter vs org.apache.jena.riot.RDFWriter which 
underlies {Model, OntModel}.write? The latter doesn’t support a property to 
include xml:base in the output. 



>> However, we are wanting to ensure that there is an explicit baseURI present 
>> in the resulting serialization. 
> 
> Out of curiosity, why do you want that?
> 
> Using ":" instead of a "base" seems quite common.

There are third party tools, such as TopBraid Composer FE, SE and ME, that 
require an explicit xml:base when resolving an owl:imports via the web - i.e., 
there is no matching local file - rather than using the URI in the owl:imports 
as the baseURI for the document. As I read the RDF/XML syntax spec the client 
is supposed to use the document URL for the baseURI when no xml:base is 
present. The TBC uses an "Accept: application/rdf+xml, text/turtle” and with 
such a list RDF/XML is selected (the service can provide both serializations). 

A solution, when serializing as RDF/XML, might be to use 
Model.write(OutputStream, “RDF/XML", null) or Model.write(OutputStream, 
“RDF/XML”), which forces absolute paths to be used in the output; however, 
without the (unnecessary) xml:base, TBC fails silently to load the imports. By 
comparison, Protégé has no problem correctly following owl:imports.

We’re just trying to provide proper content negotiation and accommodate the 
dictum that the client makes it right.

Based on the javadoc for Model.write parameter, base:

> base The base uri to use when writing relative URI's. null means use only 
> absolute URI's. This is used for relative URIs that would be resolved against 
> the document retrieval URL. For some values of lang, this value may be 
> included in the output.

It is unclear of what use a non-null value for XML/RDF is since the resulting 
output has no xml:base, the URL of the doc can not be necessarily relied on, 
and the output is rendered ambiguous since relative URIs can’t be resolved 
unless perhaps the default namespace, denoted by “:”, is used..

The write w/ an explicit baseURI could output an explicit xml:base (as an @base 
is written for Turtle) or as also suggested by the javadoc simply use the 
supplied baseURI to construct the proper URIs for values of rdf:about etc on 
output.



>    Andy

Thank you,
Chris










> 
> On 23/02/2019 00:42, Martynas Jusevičius wrote:
>> Sorry, can't run the test case right now.
>> No I'm thinking RDF/XML :) But the prefixes are only used for
>> properties, not subject (@rdf:about) or object (@rdf:resource) values.
>> What would you gain by adding an xml:base? You could shorten
>> prfx:lcl-name to just lcl-name by setting xml:base to prfx: namespace
>> URI, but that would only work for a single namespace.
>> And not sure how much sense it makes to compare RDF/XML with Turtle
>> because the former builds on XML which has its own namespace
>> mechanism. But maybe I'm completely misunderstanding what you are
>> trying to do :)
>> On Sat, Feb 23, 2019 at 12:18 AM Chris Tomlinson
>> <[email protected]> wrote:
>>> 
>>> No.
>>> 
>>> If you run the test case you see that RDF/XML writes out xmlns defns of 
>>> prefixes and uses the prefixes in the serialization. Perhaps you are 
>>> thinking of n-triples.
>>> 
>>> Thanks,
>>> Chris
>>> 
>>>> On Feb 22, 2019, at 16:52, Martynas Jusevičius <[email protected]> 
>>>> wrote:
>>>> 
>>>> Isn't it so that RDF/XML writer always writes absolute URIs, so
>>>> xml:base is unnecessary because it would have no effect anyway?
>>>> 
>>>> On Fri, Feb 22, 2019 at 11:20 PM Chris Tomlinson
>>>> <[email protected]> wrote:
>>>>> 
>>>>> Hello,
>>>>> 
>>>>> We are trying to serve various ontology files in a variety of 
>>>>> serializations, principally RDF/XML and Turtle.
>>>>> 
>>>>> The specs indicate that if the baseURI for an ontology is the URL by 
>>>>> which the ontology is retrieved then it is not required that the producer 
>>>>> include an explicit xml:base or @base or similar in the serialization.
>>>>> 
>>>>> However, we are wanting to ensure that there is an explicit baseURI 
>>>>> present in the resulting serialization.
>>>>> 
>>>>> This is because not all tools respect the injunction to use the URL that 
>>>>> was used to retrieve the ontology as the baseURI if there is not an 
>>>>> explicit xml:base or @base and so on in the serialization.
>>>>> 
>>>>> The question is that Model.write(OutputStream, Language, baseURI) 
>>>>> includes an @base when the language is “TURTLE“ in the serialization but 
>>>>> when the language is “RDF/XML” we do not see an xml:base in the result. 
>>>>> (same happens when OntModel is used and when RDFWriter is used.)
>>>>> 
>>>>> The docs indicate that the baseURI param is to be used to specify what 
>>>>> URI should be used to serialize relative URIs and says nothing about 
>>>>> including xml:base or @base; yet, we see the @base for Turtle and no 
>>>>> xml:base for RDF/XML.
>>>>> 
>>>>> This is an issue when a tool requests RDF/XML before Turtle in accept 
>>>>> headers and requires that there be an xml:base in the RDF/XML 
>>>>> serialization. Noting that RDF/XML is the only required serialization.
>>>>> 
>>>>> What procedure should be used to “force” an @base or xml:base uniformly?
>>>>> 
>>>>> Here is a small test case that shows the issue:
>>>>> 
>>>>>    
>>>>> https://github.com/buda-base/lds-pdi/blob/master/src/test/java/io/bdrc/ldspdi/test/ModelWriteTest.java
>>>>>  
>>>>> <https://github.com/buda-base/lds-pdi/blob/master/src/test/java/io/bdrc/ldspdi/test/ModelWriteTest.java>
>>>>> 
>>>>> 
>>>>> Thank you,
>>>>> Chris
>>>>> 
>>>>> 

Reply via email to