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