Re: OWL2/RL correction on datatypes

Jos de Bruijn wrote:
> 
> Dave Reynolds wrote:
>> As Jos pointed out at the telecon I had "rdfs:Literal" under the
>> "supported by RIF" column which is not strictly correct. It looks like I
>> had been misreading it as rdf:XMLLiteral.
>>
>> However, as far as I can tell the only support for rdfs:Literal needed
>> for OWL2/RL can be included in the ruleset[*] without needing any
>> specific RIF support and no changes to DTB. I've fixed up the rules in
>> the document accordingly and added a footnote to the table to clarify.
>>
>> Dave
>>
>> [*]
>> Essentially we just need additional rules of the form:
>>
>> Forall ?lt ( ?lt[rdf:type->rdfs:Literal] :- External( pred:isX(?lt)) )
>>
>> For all supported datatypes X.
> 
> I think that if Core will have any kind of safeness restriction, such
> rules will not be valid Core syntax.

Agreed. As I mentioned during the telecon the static set of rules is 
not in Core due to safety constraints (the list processing rules as well 
as the data type rules are unsafe).

The translation algorithm in the second appendix is the one that 
generates safe Core rules. In that case literals are handled by 
asserting a set of simple facts corresponding to each literal in the 
source ontology. See:

http://www.w3.org/2005/rules/wiki/OWLRL#datatypeRules_algorithm

As it says there, this is not a practical approach and real 
implementations will need to be more subtle about it.

Dave


> 
> In the axiomatization of the OWL DL datatype semantics [1] I wrote the
> following:
> 
> (Forall ?x (?x[rdf:type -> rdfs:Literal] :- ?x[rdf:type -> D])) for
> every datatype name D in V,
> (tr(s^^u)[rdf:type -> u']) for every well-typed literal s^^u and
> datatype identifier u' in V such that L2V(D(u))(s) is in the value space
> of u',
> (tr(t)[rdf:type -> u']) for every plain literal t and datatype
> identifier u' in V such that t is in the value space of u',
> (Forall ?x ([rdf:type -> rdfs:Literal] :- ?x[rdf:type -> Diri])) for
> every datatype in D with identifier Diri,
> (Forall ?x ("a"="b" :- And(?x[rdf:type -> Diri] isNotDT(?x)]))) for
> every datatype in D with identifier Diri and short name DT,
> (Forall ?x ("a"="b" :- And(?x[rdf:type -> owl:Thing] Or(isDT1(?x) ...
> isDTn(?x))]))), where DT1,..., DTn are the labels of the considered
> datatypes,
> (Forall ("a"="b" :- tr(t)[rdf:type -> rdfs:Literal])) for every
> ill-typed literal t,
> (Forall ?x ("a"="b" :- And(?x[rdf:type -> rdfs:Literal] isNotDT1(?x) ...
> isNotDTn(?x))])), where DT1,..., DTn are the labels of the considered
> datatypes
> 
> You might not need all these rules (I don't really know about the OWL 2
> RL semantics).
> 
> 
> Best, Jos
> 
> [1] http://www.w3.org/TR/rif-rdf-owl/#Embedding
> 
> 

Received on Wednesday, 8 October 2008 11:03:12 UTC