Data Anda dapat direpresentasikan dalam RDF sebagai 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 .
Dari sini, Anda hanya ingin kueri SPARQL yang menemukan semua hal yang terhubung ke kelas tertentu melalui jalur (termasuk jalur kosong) rdfs:subClassOf
properti.
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 |
--------------
Hasil dalam kueri itu tidak harus diurutkan berdasarkan posisinya di jalur (meskipun dalam kasus ini memang demikian). Jika Anda membutuhkannya secara berurutan, Anda dapat melakukan ini (yang didasarkan pada jawaban ini tentang menghitung posisi elemen dalam daftar RDF ):
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)
Ini menemukan setiap leluhur ?class
dari :Win7
serta setiap ?mid
nenek moyang perantara. Untuk leluhur ?class
, jarak dihitung sebagai jumlah hubungan antara di antara (count(?mid)
). Itu memerintahkan hasil berdasarkan jarak itu, jadi :Win7
adalah nenek moyang terdekat, :Windows
setelah itu, dan seterusnya.
Anda bahkan dapat melakukan beberapa pemformatan mewah yang Anda inginkan seperti ini:
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" |
-----------------------------------
Itu mungkin dimungkinkan untuk melakukan pemrosesan string yang lebih menarik dan untuk mendapatkan string multiline. Anda dapat melihat bagian terakhir dari jawaban ini di mana ada beberapa pemformatan yang bagus untuk matriks ide yang disejajarkan dengan baik.