[I stared to reply to this, but must have hit send by accident halfway
through and the mail got lost. I mention this in case you end up with
two responses, one more garbled than the other.]
Contact DaTao.net wrote:
> Ok.
> So I will try to explain my model in a OWL manner.
>
> My model is described in OWL 1.0.
> The model is written by hand.
> The model is to be loaded by Jena, and fully exploitable.
Basically I was wrong to suggest that using RDF reification would put
you outside OWL/DL into OWL/full. Sorry about that. Because the RDF
reification vocabulary has no actual semantics then there is no
semantics to conflict with the OWL semantics and so no problems. See
http://www.w3.org/TR/owl-semantics/mapping.html#4.2
So you can in fact use RDF reification quite happily and it will not put
you outside OWL/DL and so shouldn't upset any OWL reasoners like Pellet.
> Here are some details about my data:
> I have some (instance of"X" "have a" instance of"Y") statements.
> I need to give "details" about those statement.
>
> For example, I need my ontology to manage "comments" about statements:
> ("instX1" "have a" "instY2")
> ((("instX1" "have a" "instY2") isCommented "it is bullshit") dc:author Mike )
> ("instX1" "have a" "instY2")
> ((("instX1" "have a" "instY2") isCommented "this is the other 'have
> a' relationship between X1 and Y2, different from the one commented by
> Mike.") dc:author John )
You can, as your bracket nesting suggests, reify (instX1 haveA instY2),
attach the isCommented property to that reified statement, then reify
the isCommented statement and attach the author to it.
Personally I would just do one reification (of (instX1 haveA instY2))
and attach to that reification an isCommented property which in turn
points to a bNode which has several properties such as the comment, who
made it, when they made it, in what context etc. That seems more
flexible and easier to work with than nested reifications. In particular
when you want multiple properties about a comment (author and date).
In N3 this would then look like:
:instX1 :haveA :instY2.
_:s1 a rdf:Statement; rdf:subject :instX1;
rdf:predicate :haveA; rdf:object :instY2 .
_:s1 :isComment [a :Comment; dc:author "mike"; dc:date "..." etc].
As you said earlier, in RDF/XML there is a neat shortcut that you can
put an rdf:ID tag on the property element in a statement to create the
four reification triples out of sight.
See example 20 in http://www.w3.org/TR/rdf-primer/#reification
My suggest of using a :Comment resource with multiple properties is just
a matter of taste and if you want to reify the statement about the
reified statement in the nested way you have suggested then fine, that's
legal too.
> How can I describe such a graph of data in the OWL1.0 language?
>
> FYI, here is my real-life need:
> my ontology must handle "conditions of validity" for statements:
> (("instX1" "have a" "instY2") hasCondition conditionX)
> (conditionX evaluatedTo "valid")
>
> (then my rule engine will discard any statement (instance of"X" "have
> a" instance of"Y") whose "condition of validity" is evaluated to
> "invalid").
>
> How can I describe this graph of data in the OWL1.0 language?
See above.
> Note: these data should be fully described in OWL1.0, and be fully
> exploitable in Jena : the graph of data is described in a OWL1.0 file,
> loaded in Jena, and my app (using either the API or maybe SPARQL) can
> answer queries such as "list statements ("instX1" "have a" "instY2")
> whose (conditionX evaluatedTo 'valid')".
All fine.
Dave