Dữ liệu của bạn có thể được biểu diễn trong RDF dưới dạng data.n3
:
@prefix : <http://example.org/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
:Network rdfs:subClassOf :Main .
:ATM rdfs:subClassOf :Network .
:ARPANET rdfs:subClassOf :Network .
:Software rdfs:subClassOf :Main .
:Linux rdfs:subClassOf :Software .
:Windows rdfs:subClassOf :Software .
:XP rdfs:subClassOf :Windows .
:Win7 rdfs:subClassOf :Windows .
:Win8 rdfs:subClassOf :Windows .
Từ đây, bạn chỉ muốn truy vấn SPARQL tìm tất cả những thứ được kết nối với một lớp cụ thể bằng một đường dẫn (bao gồm cả đường dẫn trống) của rdfs:subClassOf
thuộc tính.
prefix : <http://example.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?superclass where {
:Win7 rdfs:subClassOf* ?superclass
}
--------------
| superclass |
==============
| :Win7 |
| :Windows |
| :Software |
| :Main |
--------------
Các kết quả trong truy vấn đó không nhất thiết phải được sắp xếp theo vị trí của chúng trong đường dẫn (mặc dù trong trường hợp này, chúng tình cờ như vậy). Nếu bạn cần chúng theo thứ tự, bạn có thể thực hiện việc này (dựa trên câu trả lời này về tính toán vị trí phần tử trong danh sách RDF ):
Tiền tốprefix : <http://example.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?class where {
:Win7 rdfs:subClassOf* ?mid .
?mid rdfs:subClassOf* ?class .
}
group by ?class
order by count(?mid)
Điều này tìm thấy từng tổ tiên ?class
của :Win7
cũng như từng ?mid
tổ tiên trung gian. Đối với ?class
tổ tiên , khoảng cách được tính bằng số lượng các quan hệ trung gian ở giữa (count(?mid)
). Nó sắp xếp các kết quả dựa trên khoảng cách đó, vì vậy :Win7
là tổ tiên gần nhất, :Windows
sau đó, và cứ tiếp tục như vậy.
Bạn thậm chí có thể thực hiện một số định dạng ưa thích mà bạn muốn như sau:
Tiền tốprefix : <http://example.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select (group_concat( ?name ; separator="--" ) as ?path) where {
{
select ?name where {
:Win7 rdfs:subClassOf* ?mid .
?mid rdfs:subClassOf* ?class .
bind( strAfter( str(?class), "http://example.org/") as ?name )
}
group by ?class ?name
order by count(?mid)
}
}
-----------------------------------
| path |
===================================
| "Win7--Windows--Software--Main" |
-----------------------------------
Nó có thể có thể thực hiện một số xử lý chuỗi huyền ảo hơn và lấy chuỗi nhiều dòng. Bạn có thể xem phần sau của câu trả lời này nơi có một số định dạng ưa thích cho một ma trận được căn chỉnh độc đáo cho các ý tưởng.