sql >> Database teknologi >  >> RDS >> Mysql

SPARQL-forespørgsel for at få alle forældre til en node

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.

præfiks :præfiks rdfs:vælg ?superklasse hvor { :Win7 rdfs:subClassOf* ?superclass} --------------| 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:

præfiks:præfiks rdfs:vælg (group_concat(?navn; separator="--" ) som ?sti) hvor { { vælg ?navn hvor { :Win7 rdfs:subClassOf* ?midt . ?midt rdfs:subClassOf* ?klasse . bind( strAfter( str(?class), "http://example.org/") som ?navn ) } grupper efter ?klasse ?navn rækkefølge efter antal(?midt) }} -----------------------------------------| 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.




  1. 6 måder at vælge duplikerede rækker i SQLite

  2. Sådan opsætter du destinationskatalog for arkivlog i Oracle-databasen

  3. Forbindelsesstrengparametre for Excel-datakilder

  4. Brug af Substr med Instr til at udtrække en streng i Oracle