<<But it does not seem
reasonable to assert that a lime is an orange simply because it
has the same price as an orange.>>
No, it's entirely consistent with the model. I purposefully
created the example to show that the logical relationships created
by the restriction are what matters, not the name.
<<What would happen is the model contains
'Lime is distinct from Orange". This would create an
inconsistency...no?>>
Yes, if you had the assertion {:Lime owl:disjointClass :Orange}
then there would be an inconsistency since :alime is a member of
both.
You can also specify a cardinality restriction that there can only
be one price. This doesn't result in an inconsistency, but a SPIN
constraint can easily be created that checks for multiple prices.
<<Also, the practice of attaching a property
and a value restriction to a class might make sense from an OO
perspective, but it seems incorrect from a modeling perspective.
In fact, this is listed among the "Anti- patterns" in Dean's book.>>
I think I understand the misunderstanding. The anti-pattern, I'm
guessing, is the expectation that a property defined on a class is
automatically copied to (sometimes incorrectly called "inherited
by") the instance. This is an entirely different topic from what
I stated - please note the careful placement of the term "akin" in
my statement below.
First, let's be clear about the semantics of hasValue. A hasValue
restriction on a property means that in a consistent model all
members of the class (yes, the unnamed restriction class) have
that property-value (e.g. :hasPrice ".25"^^xsd:float). This is
often referred to as "entailment" - the restriction entails that
all members of the class have this property-value pair. If an
instance does not, then the model is inconsistent, and the
reasoner will add the property-value pair to the instance to make
it consistent.
The semantics of hasValue also states that if any resource matches
the property-value pair, then it is a member of the class. This
is where the fact that "the class" is the restriction class
becomes important. The inference occurs for the restriction class
always. But if the restriction is a subclass of the named class,
then we can't infer that the instance is a member of that class -
members of the class may not be members of the subclass. If the
restriction is on an equivalent class property, then we can make
the inference on the named class since the members of the unnamed
restriction class and the named class are the same.
I believe the OWL spec does not allow for named classes for
defining the restrictions.
-- Scott
On 8/25/11 5:59 PM, Leonard Jacuzzo wrote:
Thanks Scott,
But it does not seem reasonable to assert that a lime is an
orange simply because it has the same price as an orange.
What would happen is the model contains 'Lime is distinct
from Orange". This would create an inconsistency...no?
Also, the practice of attaching a property and a value
restriction to a class might make sense from an OO perspective,
but it seems incorrect from a modeling perspective. In fact,
this is listed among the "Anti- patterns" in Dean's book.
As another question regarding rules.
Let's say that I avoid this OO pattern and instead define
Orange as a sublcass of a restriction on the property hasPrice
to the value 25 cents. (because that is better and true and
would not result in anything having the same price as an orange
being classified as an orange)....
How would a rule look that produces the fact that an
individual orange(u) hasPrice 25 cents?.
So what I would have something like
Orange rdfs:subClassOf owl:restriction
owl:onProperty 'hasPrice'
owl: hasValue "..25" xsdfloat.
And
OrangeB rdf:type Orange.
How do I go from there to
OrangeB hasPrice value '.25' xsdfloat.
Sorry for the sloppy fake code..I am a neophyte.
Thanks again for your help. I have learned a great deal.
Best,
LFJ
So this rule is not truth preserving...in itself. It would
only be truth preserving with the appropriate "distinct' values.
On Thu, Aug 25, 2011 at 6:24 PM, Scott
Henninger <[email protected]>
wrote:
Hello
Leonard; Yes I do believe this is a typo in the rule set. We
will look into this some more and get it fixed for the 3.6
release.
The two rules, cls-hv1 and cls-hv2, are converses of each
other. cls-
hv1 covers the case where if a class defines a hasValue
restriction
property, then all members of the class must have that
property
value. The rule infers this, in typical OWA fashion, making
the model
consistent. So given a [:hasPrice value ".25"^^xsd:float]
restriction
on :Orange, the triple {?u :hasPrice ".25"^^xsd:float} is
inferred for
all members of Orange. Note that members of :Orange can also
have
other :hasPrice values - e.g. {?u :hasPrice ".50"^^xsd:float}
- and
that is consistent with the model.
The cls-hv2 covers the case that if a resource meets the
hasValue
criteria, then it is a member of the class. So let's say we
have an
instance with the triple {:alime a :Lime ; :hasPrice ".
25"^^xsd:float}, since the value of :hasPrice is .25, it meets
the
criteria of :Orange membership and therefore the rule infers
{:alime
a :Orange}. The tricky part to understand in this query is
that ?u
refers to any resource. In our example the graph pattern is
matched
as:
WHERE
{ ?x owl:hasValue ?y . ## ?x bound to bnode representing
the
restriction, ?y bound to ".25"
?x owl:onProperty ?p . ## ?p bound to :hasPrice
?u ?p ?y . ## ?u bound to : alime
}
Try this in your SPARQL view by applying the above to a model
that has
some hasValue restrictions. I'd suggest using 'SELECT *' so
you can
follow the variable mappings.
<<BTW: what does it mean to assert that a class X
hasValue y on
property P?
The class Orange does not have a price, only individual
oranges have a
price.>>
If you are familiar with OO programming, this is akin to a
class
variable. hasValue restrictions are defined on the class and
applies
"automatically" to all instances. This is basically what
cls-hv1
does. cls-hv2 allows you to also infer that anything with the
property-value pair is a member of the class.
-- Scott
On Aug 25, 3:39 pm, Leonard Jacuzzo < [email protected]>
wrote:
> Hello list,
>
> Thank you for all of the help that you have been to me
in understanding how
> to use SPARQL for rule creation.
>
> I have a few questions.
>
> I was looking over the specification of OWL-RL athttp://topbraid.org/spin/owlrl-all.html
>
> The rule cls hv1 has a typo in it. The last triple in
the WHERE clause has
> not function in the rule and is not part of the W3C
specification. That is
> "?u?p ?v should be removed. Here is the rule as it
stands.
> # cls-hv1
> CONSTRUCT {
> ?u ?p ?y .}
>
> WHERE {
> ?x owl:hasValue ?y .
> ?x owl:onProperty ?p .
> ?u a ?x .
> ?u ?p ?v .
>
> }
>
> I am also confused by the following rule, which
conforms to the W3C, but
> makes no sense to me. Can you explain it to me?
> Here is the rule:
> # cls-hv2
> CONSTRUCT {
> ?u a ?x .}
>
> WHERE {
> ?x owl:hasValue ?y .
> ?x owl:onProperty ?p .
> ?u ?p ?y .
>
> }
>
> The reason that I am confused is that it seems easy
to come up with a
> counter example. E.G. imagine that the class "Orange'
hasvalue .25 on the
> property "hasPrice" (so oranges are priced at 25
cents) Further imagine that
> some individual lime(u) hasPrice .25. It does not
follow from this that Lime
> (u) is a lemon.
>
> What am I missing in my understanding of this rule?
>
> BTW: what does it mean to assert that a class X
hasValue y on property P?
> The class Orange does not have a price, only
individual oranges have a
> price. Should this be a Orange is a subclass of the
restriction on the
> property "hasPrice" to the value 25 cents? When would
a person use the
> structure in the WHERE clause?
>
> I have one more question about rules, but I will wait
until I think some
> more.
>
> Thank you for reading this. Any help will be great,
> LFJ
--
You received this message because you are subscribed to the
Google
Group "TopBraid Suite Users", the topics of which include
TopBraid Composer,
TopBraid Live, TopBraid Ensemble, SPARQLMotion and SPIN.
To post to this group, send email to
[email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/topbraid-users?hl=en
--
You received this message because you are subscribed to the Google
Group "TopBraid Suite Users", the topics of which include TopBraid
Composer,
TopBraid Live, TopBraid Ensemble, SPARQLMotion and SPIN.
To post to this group, send email to
[email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/topbraid-users?hl=en
--
You received this message because you are subscribed to the Google
Group "TopBraid Suite Users", the topics of which include TopBraid Composer,
TopBraid Live, TopBraid Ensemble, SPARQLMotion and SPIN.
To post to this group, send email to
[email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/topbraid-users?hl=en
|