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

Popular posts from this blog

Java 3D LWJGL collision -

spring - SubProtocolWebSocketHandler - No handlers -

methods - python can't use function in submodule -