2015-05-29 19 views
5

Tôi muốn tạo ra một tài sản xác định một rdf:Seq như một rdfs:range của một đối tượng:Cách xác định loại phần tử trong rdf: Seq?

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

Tôi đang tìm kiếm một cách để xác định loại của các nguyên tố lưu trong rdf:Seq. Ví dụ, tôi không muốn điều này:

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 
    ]; 
    . 

Có cách nào để xác định rằng rdf:Seq yếu tố này là duy nhất của loại eg:typeOfElement khi tôi xác định eg:myProperty?

(Tôi có thể sử dụng cú nếu cần thiết.)

Trả lời

3

Có lẽ là một số cách để thực hiện điều này, tùy thuộc vào sở thích của bạn thực hiện. Lời khuyên của tôi là sử dụng tài sản đặc biệt rdf:li thay cho số rdf:_nnn tùy ý, dễ mở rộng hơn. rdf:li tương đương với rdf:_1, rdf:_2 theo thứ tự. Vì vậy, các khối mã sau đây tương đương:

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

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

Lưu ý rằng thứ tự trong khối thứ hai là quan trọng.

Để thực hiện những gì bạn đang yêu cầu, bạn có thể mở rộng rdf:li với một tài sản mới và tinh chỉnh phạm vi của nó/phạm vi (mặc dù đây là những chỉ thực sự có ý nghĩa đối với độc giả của con người, như tài sản con được thừa hưởng ngữ nghĩa của công ty mẹ):

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

:myItem kế thừa ngữ nghĩa của rdf:li, vì vậy bất kỳ logic nào bạn có thể suy ra rằng các giá trị của :myItem đều theo thứ tự ý nghĩa. Tiếp theo xác định các lớp :mySeq qua một hạn chế bất động sản:

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

mà khẳng định rằng :mySeq là một lớp của tất cả mọi thứ nơi tài sản :myItem được một cách rõ ràng sử dụng cho các giá trị của :typeOfElement. Bây giờ bạn có thể tạo danh sách với :mySeq.


Để đi một bước xa hơn, bạn có thể xác định :mySeq là giao điểm của các quy tắc trên và rdf:Seq:

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

Lưu ý việc sử dụng owl:equivalentClass ở vị trí của rdfs:subClassOf. Nếu chúng ta đối xử owl:equivalentClass như đối xứng và gộp bởi rdfs:subClassOf, ví dụ:

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

sau đó chúng ta có thể có tương đương mà đi theo cả hai hướng. Do đó tất cả các trường hợp của rdf:Seq có giá trị cho :myItem:typeOfElement cũng là các trường hợp của :mySeq. Trong trường hợp này, bạn đang suy ra loại. Vì vậy, thông qua tuyên bố:

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

bạn có thể phỏng đoán rằng :x a :mySeq.

+0

Nó chỉ là một phần của câu trả lời.Tôi không thể nói thuộc tính nào, 'rdf: _n' hoặc': myItem', tôi sẽ sử dụng trong ': mySeq'. Vấn đề chính của tôi là buộc ': mySeq' chỉ sử dụng': myItem'. Vì vậy, tôi nghĩ rằng tôi sẽ phải xác định một lớp phụ của 'rdf: Seq' hoặc một cái gì đó như thế. –

+0

Có, bạn đã đúng. Tôi đã cập nhật câu trả lời của mình. Hy vọng nó sẽ giúp bạn theo dõi tốt hơn. Ngoài ra, hãy xem [ontology ontology danh sách] (http://smiy.sourceforge.net/olo/spec/orderedlistontology.html), có thể dễ dàng hơn để làm việc với các thùng chứa rdf. – chris

Các vấn đề liên quan