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
là :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
.
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ế. –
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