syntax - How to define the type of elements in an rdf:Seq? -
i want create property defining rdf:seq
rdfs:range
of object :
eg:myproperty rdf:property; rdfs:range rdf:seq; .
i'm looking way define type of elements stored in rdf:seq
. example, don't want :
eg:typeofelement rdf:class; . eg:somethingelse rdf:class; . [] eg:myproperty [ rdf:seq; rdf:_1 [a eg:typeofelement]; # it's type want rdf:_2 [a eg:typeofelement]; # it's type want rdf:_3 [a eg:somethingelse]; # don't want type ]; .
is there way define rdf:seq
elements of type of eg:typeofelement
when define eg:myproperty
?
(i can use owl if necessary.)
there number of ways accomplish this, depending on implementation preferences. advice use rdf:li
special property in place of arbitrary rdf:_nnn
, easier extend. rdf:li
equivalent rdf:_1
, rdf:_2
in order. following code blocks equivalent:
:myseq rdf:seq; rdf:_1 :foo; rdf:_2 :bar . :myseq rdf:seq; rdf:li :foo; rdf:li :bar .
note order in second block significant.
to accomplish asking, can extend rdf:li
new property , refine domain/range (although these meaningful human readers, child property inherits semantics of parent):
:myitem rdfs:subpropertyof rdf:li; rdfs:range :typeofelement; rdfs:domain :myseq .
:myitem
inherits semantics of rdf:li
, whatever implementatin logic have can infer values of :myitem
in meaningful order. next define :myseq
class via property restriction:
:myseq rdfs:subclassof [ owl:restriction; owl:onproperty :myitem; owl:allvaluesfrom :typeofelement;].
which asserts :myseq
class of things property :myitem
explicitly used values of :typeofelement
. can create lists :myseq
.
to go step further, may define :myseq
intersection of above rule , rdf:seq
:
:myseq owl:class; owl:equivalentclass [ owl:class; owl:intersectionof ( rdf:seq [a owl:restriction; owl:onproperty :myitem; owl:allvaluesfrom :typeofelement ]) ] .
note use owl:equivalentclass
in place of rdfs:subclassof
. if treat owl:equivalentclass
symmetric , subsumed rdfs:subclassof
, eg:
owl:equivalentclass owl:symmetricproperty . owl:equivalentclass rdfs:subpropertyof rdfs:subclassof .
then can have equivalence goes in both directions. therefore instances of rdf:seq
values :myitem
of :typeofelement
instances of :myseq
. in case inferring type. via statement:
:x rdf:seq; :myitem :foo, :bar .
you may infer :x :myseq
.
Comments
Post a Comment