Vaše data mohou být v RDF reprezentována jako 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 .
Odtud chcete pouze dotaz SPARQL, který najde všechny věci spojené s konkrétní třídou cestou (včetně prázdné cesty) rdfs:subClassOf
vlastnosti.
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 |
--------------
Výsledky v tomto dotazu nemusí být nutně seřazeny podle jejich pozice v cestě (i když v tomto případě jsou). Pokud je potřebujete v pořádku, můžete to udělat (což je založeno na této odpovědi o výpočtu pozice prvků v seznamu 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)
Toto najde každého předka ?class
z :Win7
stejně jako každý ?mid
mezipředek. Pro předka ?class
, vzdálenost se vypočítá jako počet mezilehlých vztahů mezi nimi (count(?mid)
). Výsledky seřadí na základě této vzdálenosti, takže :Win7
je nejbližší předek, :Windows
poté a tak dále.
Můžete dokonce provést některé z efektních formátování, které chcete, takto:
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" |
-----------------------------------
Mohlo by být možné provést nějaké lepší zpracování řetězce a získat víceřádkový řetězec. Můžete se podívat na druhou část této odpovědi kde je nějaké efektní formátování pro pěkně zarovnanou matici pro nápady.