RE: Remarks on OWL Guide and question about AS&S

Antoine,

Thanks again for your comments. In this message I have tried
to either answer your questions or propose an editorial change 
that I think addresses them.

> After the reading of the last versions of OWL Guide and OWL AS&S, I 
> have some basic remarks, some of them due to typo errors, others not. 
> Maybe they are mainly due to some english (or more fundamental) 
> misunderstandings of mine.
> 
> Concerning OWL Guide :
> 
> -> sections 3.2.2 and 3.2.3
> 
> In section, 3.2.2, yearValue is specified has having a 
> xsd:positiveInteger range. In the next section, the individual 
> Year1998 id defined by :
> 
> [
> <VintageYear rdf:ID="Year1998">
>   <yearValue rdf:datatype="&xsd;positiveInteger">1998</yearValue>
> </VintageYear>
> ]
> 
> Is the specification of rdf:datatype="&xsd;positiveInteger" mandatory?

Yes, if we want 1998 to be considered a positive integer.

> Is is linked to RDF syntax considerations or just an examplification 
> of what could optionnally be written? Is

> <VintageYear rdf:ID="Year1998">
>   <yearValue>1998</yearValue>
> </VintageYear>
> 
> correct?

No.  Not if you want '1998' to be an integer.  1998 as above is a 'plain 
literal' as opposed to a 'typed literal'.  See 
http://www.w3.org/TR/2003/WD-rdf-concepts-20030123/#dfn-plain-literal
We expect tools to help with these verbose constructs.

> -> section 3.3, InverseFunctionalProperty subsection
> 
> [
> <owl:ObjectProperty rdf:ID="producesWine">
>   <rdf:type rdf:resource="&owl;InverseFunctionalProperty" />
>   <owl:inverseOf rdf:resource="#hasMaker" />
> </owl:ObjectProperty>                                     ¬
> 
> Think of the elements of the range in an inverse functional property 
> as defining a unique key in the database sense. owl:InverseFunctional 
> implies that the elements of the range provide a unique identifier for 
> each element of the domain. ]
> 
> In this case, a Wine can be used to identify a Winery, but it is not a
> *unique* key, since several wines can be produced by a single winery 
> (which seems to be allowed by the last sentence of the previous 
> section).

You are right.  This is phrased incorrectly.  The idea was that a 
'unique key' applies to a tuple and the text should not have stated 
that it is a unique identifier for the domain elements.

Suggested rewording:

[
Think of the elements of the range in an inverse functional property 
as defining a unique key in the database sense. owl:InverseFunctional 
implies that the elements of the range provide a unique identifier for 
each pair contained in the property. ]

> I have understood that there has been lots of arguing about the 
> meaning of this property (I know this issue has been largely discussed 
> in the rdf-logic list, but I do not find the thread....). Indeed I 
> believed I had got it, until I saw the two last paragraph of the 
> subsection. In my understanding of the definitions, an 
> InverseFunctionalProperty gives a key provided it has an exactly-one 
> cardinality restriction on its range.

Yes.  Your understanding was correct.

> -> section 3.4.1
> 
> [
> The maker of a Wine must be a Winery. The allValuesFrom restriction
> is on the hasMaker property of this Wine class only. Makers of Cheese
> are not constrained by this local restriction. ]
> 
> Indeed makers of Cheeses should NOT be concerned, for in 3.3 (and in
> wine.owl) producesWine has been defined by :
> 
> [
> <owl:ObjectProperty rdf:ID="producesWine">
>   <owl:inverseOf rdf:resource="#hasMaker" /> </owl:ObjectProperty> ]
> 
> That implies that any cheese that would be made by a maker of cheese 
> would be in the range of a "producesWine" property, which is quite 
> disturbing.

Formally, both hasMaker and producesWine have range and domain of 
owl:Thing.  So cheese would be fine.  It would have been better to 
use the name "produces" rather than "producesWine".  I will 
rename "producesWine" to "produces".

> -> section 3.4.2
> 
> [
> owl:maxCardinality can be used to specify an upper
> bound. owl:minCardinality can be used to specify a lower bound. In 
> combination, the two can be used to specify a range. ]
> 
> Perhaps a typo : "cardinality" (or "owl:cardinality") instead of 
> "range" ?

I'm using range in the [n...m] sense.  Will change to "numeric range".

> -> section 5.1
> 
> [
> 
>  <owl:Class rdf:ID="ConsumableThing" />
> 
>   <owl:Class rdf:ID="NonConsumableThing">
>     <owl:complementOf rdf:resource="#ConsumableThing" />
>   </owl:Class>
> 
> The class of NonConsumableThing includes as its members all 
> individuals that do not belong to the extension of ConsumableThing. 
> This set includes all Wines, Regions, etc ]
> 
> Is a wine non consumable ? Anyway, when I searched in wine.owl for 
> further examplification I couldn't find the above definitions. I found 
> it in food.owl, only to discover it was not a subclass of 
> PotableLiquid. If it is a modelisation choice, it looks strange.

Typo.  Should have been Wineries.  ConsumableThing is defined 
in food.owl. PotableLiquid is a subclass of ConsumableThing, 
but disjoint from EdibleThing.

> -> appendix C
> 
> [
> <owl:ObjectProperty rdf:ID="&vin;regionOf">
>     <rdf:type rdf:resource="&owl;FunctionalProperty" />
>     <owl:inverseOf rdf:resource="&vin;hasRegion"/>
>     <owl:range rdf:resource="&vin;Country"/> </owl:ObjectProperty> ]
> 
> There is a typo. the range is "&vin;region", as it is specified in the 
> following triple definition :

> [
> vin:hasRegion owl:range vin:Region.
> ]

Corrected.

Please reply to the mailing list as to whether the above changes 
adequately address your comments.

- Mike

Michael K. Smith, Ph.D., P.E.
EDS - Austin Innovation Centre
98 San Jacinto, #500
Austin, TX  78701

phone: +01-512-404-6683
email: michael.smith@eds.com
  


-----Original Message-----
From: Antoine Isaac [mailto:aisaac@ina.fr] 
Sent: Friday, April 11, 2003 9:50 AM
To: public-webont-comments@w3.org
Subject: Remarks on OWL Guide and question about AS&S



Hi folks,

After the reading of the last versions of OWL Guide and OWL AS&S, I have
some basic remarks, some of them due to typo errors, others not. Maybe they
are mainly due to some english (or more fundamental) misunderstandings of
mine.

Concerning OWL Guide :

-> sections 3.2.2 and 3.2.3

In section, 3.2.2, yearValue is specified has having a xsd:positiveInteger
range. In the next section, the individual Year1998 id defined by :

[
<VintageYear rdf:ID="Year1998">
  <yearValue rdf:datatype="&xsd;positiveInteger">1998</yearValue>
</VintageYear>
]

Is the specification of rdf:datatype="&xsd;positiveInteger" mandatory? Is is
linked to RDF syntax considerations or just an examplification of what could
optionnally be written? Is <VintageYear rdf:ID="Year1998">
  <yearValue>1998</yearValue>
</VintageYear>
correct?


-> section 3.3, InverseFunctionalProperty subsection

[
<owl:ObjectProperty rdf:ID="producesWine">
  <rdf:type rdf:resource="&owl;InverseFunctionalProperty" />
  <owl:inverseOf rdf:resource="#hasMaker" />
</owl:ObjectProperty>                                     ¬

Think of the elements of the range in an inverse functional property as
defining a unique key in the database sense. owl:InverseFunctional implies
that the elements of the range provide a unique identifier for each element
of the domain. ]

In this case, a Wine can be used to identify a Winery, but it is not a
*unique* key, since several wines can be produced by a single winery (which
seems to be allowed by the last sentence of the previous section).

I have understood that there has been lots of arguing about the meaning of
this property (I know this issue has been largely discussed in the rdf-logic
list, but I do not find the thread....). Indeed I believed I had got it,
until I saw the two last paragraph of the subsection. In my understanding of
the definitions, an InverseFunctionalProperty gives a key provided it has an
exactly-one cardinality restriction on its range. Now I am not sure of
anything...


-> section 3.4.1

[
The maker of a Wine must be a Winery. The allValuesFrom restriction is on
the hasMaker property of this Wine class only. Makers of Cheese are not
constrained by this local restriction. ]

Indeed makers of Cheeses should NOT be concerned, for in 3.3 (and in
wine.owl) producesWine has been defined by :

[
<owl:ObjectProperty rdf:ID="producesWine">
  <owl:inverseOf rdf:resource="#hasMaker" /> </owl:ObjectProperty> ]

That implies that any cheese that would be made by a maker of cheese would
be in the range of a "producesWine" property, which is quite disturbing.


-> section 3.4.2

[
owl:maxCardinality can be used to specify an upper bound. owl:minCardinality
can be used to specify a lower bound. In combination, the two can be used to
specify a range. ]

Perhaps a typo : "cardinality" (or "owl:cardinality") instead of "range" ?


-> section 5.1

[

 <owl:Class rdf:ID="ConsumableThing" />

  <owl:Class rdf:ID="NonConsumableThing">
    <owl:complementOf rdf:resource="#ConsumableThing" />
  </owl:Class>

The class of NonConsumableThing includes as its members all individuals that
do not belong to the extension of ConsumableThing. This set includes all
Wines, Regions, etc ]

Is a wine non consumable ? Anyway, when I searched in wine.owl for further
examplification I couldn't find the above definitions. I found it in
food.owl, only to discover it was not a subclass of PotableLiquid. If it is
a modelisation choice, it looks strange.


-> appendix C

[
<owl:ObjectProperty rdf:ID="&vin;regionOf">
    <rdf:type rdf:resource="&owl;FunctionalProperty" />
    <owl:inverseOf rdf:resource="&vin;hasRegion"/>
    <owl:range rdf:resource="&vin;Country"/> </owl:ObjectProperty> ]

There is a typo. the range is "&vin;region", as it is specified in the
following triple definition :

[
vin:hasRegion owl:range vin:Region.
]


Concerning OWL AS & S

I have not clearly understood the goal of section 4.1 (I must recognize I am
far from being an expert in those matters). If it is to obtain (when
possible) equivalent RDF triples for OWL definitions, why not using RDF
abilities at best ? In particular, could an equivalent for
"EquivalentClasses (D1...Dn)" be
"T(Di) rdfs:subclassOf T(Di+1); T(Di+1) rdfs:subClassOf T(Di),1<=i<n" or
would a RDFS-guru find it really stupid ?

Regards.

Antoine Isaac

Received on Thursday, 17 April 2003 08:57:08 UTC