Hello Nathan,

That's the current status of version 5 tree:

1. Loading of XML literals in RDF/XML and TTL is correct:

-----8<-----

DB.DBA.RDF_LOAD_RDFXML ('
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns="http://www.w3.org/1999/xhtml";
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#";
xmlns:content="http://purl.org/rss/1.0/modules/content/";
xmlns:sioc="http://rdfs.org/sioc/ns#";>
<sioc:Post rdf:about="http://something.com/anyoluri";>
 <content:encoded rdf:parseType="Literal"><p>some <strong>html</strong>
here.</p></content:encoded>
</sioc:Post></rdf:RDF>',
'http://g3/', 'http://g3/')

Done. -- 1 msec.

-- Line 15:
DB.DBA.TTLP ('
<http://something.com/anyoluri>
       <content:encoded> """<p xmlns="http://www.w3.org/1999/xhtml";>some
 <strong xmlns="http://www.w3.org/1999/xhtml";>html</strong> in
 here.</p>"""^^rdf:XMLLiteral .',
'http://g4/', 'http://g4/')

Done. -- 0 msec.

-- Line 22:
sparql select (bif:xpath_eval ('//strong', ?o, 1)) from
<http://g3/> where { ?s
<http://purl.org/rss/1.0/modules/content/encoded> ?o }
callret-0
VARCHAR
_______________________________________________________________________________

<n0:strong xmlns:n0="http://www.w3.org/1999/xhtml";>html</n0:strong>

1 Rows. -- 2 msec.

-- Line 26:
sparql select (bif:xpath_eval ('//strong', ?o, 1)) from
<http://g4/> where { ?s
<content:encoded> ?o }
callret-0
VARCHAR
_______________________________________________________________________________

<n0:strong xmlns:n0="http://www.w3.org/1999/xhtml";>html</n0:strong>

1 Rows. -- 0 msec.

-----8<-----

> > Option 1: RDF+XML w/ CDATA
> > <content:encoded><![CDATA[<p>some <strong>html</strong> in
> > here.</p>]]></content:encoded>

If one wish to save an XML literal, not a string that resembles XML in
syntax, then the rdf:parseType="Literal" is required. No other way, and
CDATA is for XML parser of the text, not for an RDF loader of the XML
document.

> > Option 2: rdf:XMLLiteral in turtle/n3
> > <http://something.com/anyoluri>
> >     <content:encoded> """<p xmlns="http://www.w3.org/1999/xhtml";>some
> > <strong xmlns="http://www.w3.org/1999/xhtml";>html</strong> in
> > here.</p>"""^^rdf:XMLLiteral .

This works but probably not as expected: it should be either
content:encoded without <> and with proper namespace declaration or
<http://purl.org/rss/1.0/modules/content/encoded> . Otherwise it's
correctly loaded, as demonstrated by the query in the cited log.

> > Option 3: XML+RDF w/ namespace and embedded XML
> > <?xml version="1.0" encoding="UTF-8"?>
> > <rdf:RDF
> >   xmlns="http://www.w3.org/1999/xhtml";
> >   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
> >   xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#";
> >   xmlns:content="http://purl.org/rss/1.0/modules/content/";
> >   xmlns:sioc="http://rdfs.org/sioc/ns#";>
> > 
> >   <sioc:Post rdf:about="http://something.com/anyoluri";>
> >     <content:encoded rdf:parseType="Literal">
> >       <p>some <strong>html</strong> here.</p>
> >     </content:encoded>
> >   </sioc:Post>
> > </rdf:RDF>

> > -a: can't get any of the bif:(x|xpath_|xquery_)contains methods to work
> > correctly

Works for me with current version 5 tree, see the log above.

> > -b: differing errors occur when output in sparql results (as follows):
> > 
> > 
> > SELECT w/ content type "application/rdf+xml":
> > error:
> >     <res:valuerdf:parseType="Literal">
> > note:
> >     the lack of a space between res:value and rdf:parseType

Now it's as follows:

for CONSTRUCT:

<?xml version="1.0" encoding="utf-8" ?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#";>
<rdf:Description
rdf:about="http://something.com/anyoluri";><n0pred:encoded
xmlns:n0pred="content:"
rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral";
rdf:parseType="Literal"><n0:p
xmlns:n0="http://www.w3.org/1999/xhtml";>some
 <n0:strong>html</n0:strong> in
 here.</n0:p></n0pred:encoded></rdf:Description>
</rdf:RDF>

for SELECT:

<rdf:RDF xmlns:res="http://www.w3.org/2005/sparql-results#";
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";>
<rdf:Description rdf:nodeID="rset">
<rdf:type
rdf:resource="http://www.w3.org/2005/sparql-results#ResultSet"; />
    <res:resultVariable>s</res:resultVariable>
    <res:resultVariable>p</res:resultVariable>
    <res:resultVariable>o</res:resultVariable>
...
...
    <res:solution rdf:nodeID="r1">
      <res:binding
rdf:nodeID="r1c0"><res:variable>s</res:variable><res:value
rdf:resource="http://something.com/anyoluri"/></res:binding>
      <res:binding
rdf:nodeID="r1c1"><res:variable>p</res:variable><res:value
rdf:resource="http://purl.org/rss/1.0/modules/content/encoded"/></res:binding>
      <res:binding
rdf:nodeID="r1c2"><res:variable>o</res:variable><res:value
rdf:parseType="Literal"><n0:p
xmlns:n0="http://www.w3.org/1999/xhtml";>some <n0:strong>html</n0:strong>
here.</n0:p></res:value></res:binding>
    </res:solution>
  </rdf:Description>
</rdf:RDF>

> > 
> > 
> > SELECT w/ content type "text/rdf+n3":
> > error:
> >     res:binding [ res:variable "o" ; res:value "some html here." ]
> > note:
> >     converted to only text, all xml stripped

CONSTRUCT gives

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ns1: <content:> .
@prefix ns2: <http://something.com/> .
ns2:anyoluri ns1:encoded "<n0:p xmlns:n0=\"http://www.w3.org/1999/xhtml
\">some\n <n0:strong>html</n0:strong> in\n
here.</n0:p>"^^rdf:XMLLiteral .

SELECT is not worse but the string is so long that the mail client
corrupts it :)

In current state of version 6 results are the same, except one loading
bug that is being fixed right now.

Best Regards,

Ivan Mikhailov
OpenLink Software
http://virtuoso.openlinksw.com



Reply via email to