Re: OWL 1.1 DataRange (was: Numerical Ranges/Sets in RDF?)

Hi!

Freek Dijkstra wrote:

> Holger Knublauch wrote:
> 
>> These XSD facets are exactly the solution proposed for representing
>>  user-defined datatypes in OWL 1.1 [1]
>> 
>> [1] http://owl1_1.cs.manchester.ac.uk/
> 

> Beside that I fully realize that the proposed text is still a draft,
> 
Yes, it's a draft, but you can already work with it: I found that there
is a release candidate of Pellet 1.4, which implements most of the new
features of OWL1.1, including user-defined datatypes. And there is also
a version of the ontology browser SWOOP, which contains this new Pellet
version, and which, AFAICS, is able to understand and present such
datatype definitions. You can get both, Pellet and SWOOP, from:

http://pellet.owldl.com/#Download

Also, the SWOOP dist contains an example ontology "family.owl" which
shows some of the new OWL1.1 features, included datatype definitions.

[FIXME: The vocabulary used within Pellet1.4RC (as shown by
"family.owl") seems to be different from that one given in the OWL1.1
document at <http://owl1_1.cs.manchester.ac.uk>. For instance, while
Pellet accepts the term "DataRangeRestriction", the OWL1.1 document uses
"DatatypeRestriction", see
<http://owl1_1.cs.manchester.ac.uk/owl_specification.html#4.3>]

> I'm not 100% sure if it can also support what I called "numerical
> sets" in my previous mail:
> 
>> My final goal would be to allow efficient (with few statements) 
>> description of numerical sets. For example, [1..4, 8, 16..37]

Hm, something seems to miss in the OWL1.1 spec?! After playing around a
little, I am now able to create at least single integer intervals like
"[1..4]" in the following way (following the examples from "family.owl"):

<!-- [1..4]: first restricting xsd:integer to [1..],
and then restricting [1..] to [1..4] -->

<owl:DataRangeRestriction rdf:about="#Interval_1-4">
<owl:onDataRange>
<owl:DataRangeRestriction>
<owl:onDataRange rdf:resource="&xsd;integer"/>
<owl:minInclusive>1</owl:minInclusive>
</owl:DataRangeRestriction>
<owl:maxInclusive>4</owl:maxInclusive>
</owl:onDataRange>
</owl:DataRangeRestriction>

Using this method, I can of course also represent the singleton class
"{8}" in the form of an interval "[8..8]" (though is seems to be more
optimal to use the "DataOneOf" constructor for this purpose).

Now, my idea was to first build integer intervals [1..4], [8..8] and
[16..37] and then create some /union/ of these three intervals. But how
can I do this? I probably cannot just use 'owl:unionOf', because this
constructor is for owl:ClassEs, and not for owl:DataRangeS, right?

Well, if it were only /two/ intervals, say [1..4] and [16..37], I could
have done something like

1) restrict xsd:integer to some interval I1 := [5..15]
2) build datarange I2 := [..4] U [16..] from I1
by applying constructor 'DataComplementOf'
3) restrict I2 to [1..4] U [16..37]
by setting 'minInclusive' to 1 and 'maxInclusive' to 37.

But I do not see how I can cope with more complex cases. So where are the

? 'DataUnionOf'
? 'DataIntersectionOf'

constructors in the OWL 1.1 approach?

Sorry, Freek, that I couldn't help any further. And I, too, do not
understand what the "arity" of a datarange, mentioned in the OWL1.1
document, is. But, perhaps, some of the OWL1.1 folks in the SWIG list
can give some explanation to my question above, and this would then
probably answer your original question, too. Let's see!


Cheers,
Michael

Received on Wednesday, 13 December 2006 15:31:56 UTC