2015-05-29 6 views
5

मैं एक rdf:Seq एक rdfs:range के रूप में एक वस्तु को परिभाषित करने वाली एक संपत्ति बनाना चाहते हैं:किसी rdf में तत्वों के प्रकार को परिभाषित करने के लिए: Seq?

eg:myProperty a rdf:Property; 
    rdfs:range rdf:Seq; 
    . 

मैं एक तरह से rdf:Seq में संग्रहीत तत्वों के प्रकार को परिभाषित करने के लिए देख रहा हूँ। उदाहरण के लिए, मैं नहीं है इस हैं:

eg:typeOfElement a rdf:Class; 
    . 

eg:somethingElse a rdf:Class; 
    . 

[] eg:myProperty [ 
     a rdf:Seq; 
     rdf:_1 [a eg:typeOfElement]; # It's the type I want 
     rdf:_2 [a eg:typeOfElement]; # It's the type I want 
     rdf:_3 [a eg:somethingElse]; # I don't want this type 
    ]; 
    . 

वहाँ परिभाषित करने के लिए जब मैं eg:myProperty को परिभाषित है कि rdf:Seq तत्वों केवल eg:typeOfElement के प्रकार के होते हैं एक तरीका है?

(मैं यदि आवश्यक हो तो उल्लू उपयोग कर सकते हैं।)

उत्तर

3

संभवतः तरीके यह पूरा करने के लिए, अपने कार्यान्वयन प्राथमिकताओं के आधार पर की एक संख्या है। मेरी सलाह rdf:li मनमाने ढंग से rdf:_nnn के स्थान पर विशेष संपत्ति का उपयोग करना है, जो विस्तार करना आसान है। rdf:li क्रम में rdf:_1, rdf:_2 के बराबर है। तो निम्नलिखित कोड ब्लॉक समतुल्य हैं:

:mySeq a rdf:Seq; 
    rdf:_1 :foo; 
    rdf:_2 :bar . 

:mySeq a rdf:Seq; 
    rdf:li :foo; 
    rdf:li :bar . 

ध्यान दें कि दूसरे ब्लॉक में ऑर्डर महत्वपूर्ण है।

पूरा करने के लिए आप क्या कह रहे हैं, आप एक नया संपत्ति के साथ rdf:li का विस्तार करने और अपने डोमेन/सीमा को परिष्कृत (हालांकि ये केवल वास्तव में मानव पाठकों के लिए सार्थक कर रहे हैं, के रूप में बच्चे के माता-पिता की संपत्ति के शब्दों को विरासत में) कर सकते हैं:

:myItem rdfs:subPropertyOf rdf:li; 
    rdfs:range :typeOfElement; 
    rdfs:domain :mySeq . 

:myItemrdf:li के शब्दों, इसलिए जो कुछ भी implementatin तर्क आप अनुमान लगा सकते हैं कि :myItem के मूल्यों कुछ सार्थक क्रम में हैं इनहेरिट करती है। अगला एक संपत्ति प्रतिबंध के माध्यम से :mySeq वर्ग को परिभाषित:

:mySeq rdfs:subClassOf [ 
    a owl:Restriction; 
    owl:onProperty :myItem; 
    owl:allValuesFrom :typeOfElement;]. 

जो दावा है कि :mySeq सब बातों जहां संपत्ति :myItem स्पष्ट :typeOfElement के मूल्यों के लिए प्रयोग किया जाता है का एक वर्ग है। अब आप :mySeq के साथ सूचियां बना सकते हैं।


एक कदम और आगे जाने के लिए, यदि आप उपरोक्त नियम और rdf:Seq के चौराहे के रूप में :mySeq परिभाषित कर सकते हैं:

:mySeq a owl:Class; 
    owl:equivalentClass 
    [ a owl:Class; 
     owl:intersectionOf 
      (rdf:Seq 
      [a owl:Restriction; 
      owl:onProperty :myItem; 
      owl:allValuesFrom :typeOfElement ]) ] . 

नोट rdfs:subClassOf के स्थान पर उपयोग owl:equivalentClass। अगर हम सममित और rdfs:subClassOf द्वारा सम्मिलित है, जैसे के रूप में owl:equivalentClass का इलाज:

owl:equivalentClass a owl:SymmetricProperty . 
owl:equivalentClass rdfs:subPropertyOf rdfs:subClassOf . 

तो हम तुल्यता कि दोनों दिशाओं में चला जाता है हो सकता है। इसलिए rdf:Seq के सभी उदाहरण जिनके मान :myItem:typeOfElement:mySeq के उदाहरण हैं। इस मामले में आप इस प्रकार का उल्लंघन कर रहे हैं। तो कथन के माध्यम से:

:x a rdf:Seq; :myItem :foo, :bar . 

आप :x a :mySeq का अनुमान लगा सकते हैं।

+0

यह केवल उत्तर का एक हिस्सा है।मैं यह नहीं कह सकता कि कौन सी संपत्ति, 'rdf: _n' या': myItem', मैं 'mySeq' में उपयोग करूंगा। मेरी मुख्य समस्या ': mySeq' को केवल': myItem' 'का उपयोग करने के लिए मजबूर करना है। तो मुझे लगता है कि मुझे 'rdf: seq' या उसके जैसा कुछ उप-वर्ग परिभाषित करना होगा। –

+0

हां, आप सही हैं। मैंने अपना जवाब अपडेट कर लिया है। उम्मीद है कि यह आपको एक बेहतर ट्रैक पर ले जाएगा। इसके अलावा [आदेशित सूची ऑटोलॉजी] (http://smiy.sourceforge.net/olo/spec/orderedlistontology.html) पर एक नज़र डालें, जो कि आरडीएफ कंटेनरों की तुलना में काम करना आसान हो सकता है। – chris

संबंधित मुद्दे

 संबंधित मुद्दे