- From: Jeremy Carroll <jjc@hpl.hp.com>
- Date: Fri, 19 Dec 2003 18:42:46 +0100
- To: www-webont-wg@w3.org
Sandro:
>I worry about the implementation burden here. Jos, and other
>implementors of OWL Full consistency checkers: do you plan to
>implement support for XML Literal? I'm not clear anymore what work is
>really entailed here. I heard on the call that c14n equivalence was
>no longer needed, but that well-formedness-checking was.
>> b) Modify test miscellaneous-205 by deletion of the word "Full" from its
>> levels box.
>> Corresponding modifications to the manifest file for the test, and the
>> master manifest file.
Sandro:
>I'd think another test should be added which is "Full" only and has
>the opposite conclusion.
that's misc-204, the related test, except it also applies for Lite for systems
that support rdf:XMLLiteral. misc-205 is inapplicable to Full not because the
test result is incorrect but because the test metadata violates RDF semantics
(by suggesting a datatype map which does not include rdf:XMLLiteral).
With the changes made by RDF Core rdf:XMLLiteral acts just like a subdatatype
of xsd:string with a rather bizare characterization of its lexical space - I
doubt you could do a regular expression for it ... All the canonicalization
stuff is done by the parser. The lexical work that has to be done by a
reasoner is to confirm whether or not the lexical form is exc-canonical XML
here is some of the relevant Jena code:
/**
* Test whether the given string is a legal lexical form
* of this datatype.
*/
public boolean isValid(final String lexicalForm) {
/*
* To check the lexical form we construct
* a dummy RDF/XML document and parse it with
* ARP. ARP performs an exclusive canonicalization,
* the dummy document has exactly one triple.
* If the lexicalForm is valid then the resulting
* literal found by ARP is unchanged.
* All other scenarios are either impossible
* or occur because the lexical form is invalid.
*/
.... set up code ... including
final boolean status[] = new boolean[]{false,false,false};
// status[0] true on error or other reason to know that this is not
well-formed
// status[1] true once first triple found
// status[2] the result (good if status[1] and not status[0]).
... and ...
public void statement(AResource a, AResource b, ALiteral l){
/* this method is invoked exactly once
* while parsing the dummy document.
* The l argument is in exclusive canonical XML and
* corresponds to where the lexical form has been
* in the dummy document. The lexical form is valid
* iff it is unchanged.
*/
if (status[1] || !l.isWellFormedXML()) {
status[0] = true;
}
status[1] = true;
status[2] = l.toString().equals(lexicalForm);
}
... more set up code ...
arp.load(new StringReader(
"<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>\n"
+"<rdf:Description><rdf:value rdf:parseType='Literal'>"
+lexicalForm+"</rdf:value>\n"
+"</rdf:Description></rdf:RDF>"
));
http://cvs.sourceforge.net/viewcvs.py/jena/jena2/src/com/hp/hpl/jena/datatypes/xsd/impl/XMLLiteralType.java?view=markup
For systems that only accept RDF/XML as input this check needs to be done only
for constructs such as
<eg:prop rdf:datatype="&rdf;XMLLiteral">foobar</eg:prop>
For rdf:parseType="Literal" the parser has to do the work.
(Of course the Jena approach of creating a dummy document is somewhat
inefficient ..., except in programmer time - I was the programmer)
Jeremy
Received on Friday, 19 December 2003 12:43:24 UTC