Dine data kan repræsenteres i RDF som data.n3
:
@prefix : .@prefix rdfs: .:Network rdfs:subClassOf :Main .:ATM rdfs:subClassOf :Network .:ARPANET rdfs:subClassOf :Network .:Software rdfs:subClassOf :Main .:Linux rdfs:subClassOf :Software .:Windows rdfs:subClassOfs. .:Win7 rdfs:subClassOf :Windows .:Win8 rdfs:subClassOf :Windows .
Herfra vil du bare have en SPARQL-forespørgsel, der finder alle de ting, der er forbundet med en bestemt klasse af en sti (inklusive den tomme sti) til rdfs:subClassOf
egenskaber.
--------------| superklasse |===============| :Win7 || :Windows || :Software || :Main |---------------------
Resultaterne i den forespørgsel er ikke nødvendigvis ordnet efter deres placering i stien (selvom de tilfældigvis er det i dette tilfælde). Hvis du har brug for dem i rækkefølge, kan du gøre dette (som er baseret på dette svar om beregning af positionen af elementer i en RDF-liste ):
præfiks : præfiks rdfs:vælg ?klasse hvor { :Win7 rdfs:subClassOf* ?midt . ?mid rdfs:subClassOf* ?class .}grupper efter ?klasserækkefølge efter antal(?midt)
Dette finder hver forfader ?klasse
af :Win7
samt hver ?mid
mellemliggende forfader. For forfader ?klasse
, er afstanden beregnet som antallet af mellemliggende relationer imellem (count(?midt)
). Den sorterer resultaterne baseret på den afstand, så :Win7
er den nærmeste forfader, :Windows
efter det, og så videre.
Du kan endda lave noget af den smarte formatering, du ønsker, sådan her:
-----------------------------------------| sti |====================================| "Win7--Windows--Software--Main" |-----------------------------------------
Det måske være muligt at lave noget mere avanceret strengbearbejdning og få multiline strengen. Du kan måske se den sidste del af dette svar
hvor der er noget fancy formatering til en pænt tilpasset matrix til ideer.