sql >> Databasteknik >  >> RDS >> Mysql

SPARQL-fråga för att få alla överordnade till en nod

Din data kan representeras 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.:SubClassOfs. .:Win7 rdfs:subClassOf :Windows .:Win8 rdfs:subClassOf :Windows .

Härifrån vill du bara ha en SPARQL-fråga som hittar alla saker som är kopplade till en viss klass av en sökväg (inklusive den tomma sökvägen) till rdfs:subClassOf egenskaper.

prefix :prefix rdfs:välj ?superklass där { :Win7 rdfs:subClassOf* ?superclass}
--------------| superklass |===============| :Win7 || :Windows || :Programvara || :Main |--------------------- 

Resultaten i den frågan är inte nödvändigtvis sorterade efter deras position i sökvägen (även om de råkar vara det i det här fallet). Om du behöver dem i ordning kan du göra detta (som är baserat på det här svaret om att beräkna positionen av element i en RDF-lista ):

prefix :prefix rdfs:välj ?klass där { :Win7 rdfs:subClassOf* ?mid . ?mid rdfs:subClassOf* ?class .}gruppera efter ?klassordning efter antal(?mid)

Detta hittar varje förfader ?klass av :Win7 samt varje ?mid mellanliggande förfader. För förfader ?klass , avståndet beräknas som antalet mellanliggande relationer mellan (count(?mid) ). Den ordnar resultaten baserat på det avståndet, så :Win7 är den närmaste förfadern, :Windows efter det och så vidare.

Du kan till och med göra en del av den snygga formatering du vill ha så här:

prefix :prefix rdfs:select (group_concat( ?name; separator="--" ) som ?sökväg) där { { välj ?namn där { :Win7 rdfs:subClassOf* ?mid . ?mid rdfs:subClassOf* ?klass . bind( strAfter( str(?class), "http://example.org/") som ?namn ) } gruppera efter ?klass ?namn ordning efter antal(?mid) }}
-----------------------------------------| sökväg |====================================| "Win7--Windows--Software--Main" |----------------------------------------- 

Det kan vara möjligt att göra lite snyggare strängbearbetning och få flerradssträngen. Du kanske tittar på den senare delen av det här svaret där det finns lite snygg formatering för en snyggt anpassad matris för idéer.




  1. Läs slav, läs-skriv masterinställning

  2. Vad ska man ersätta mysql_result med för MySQLi

  3. Hur kan jag starta PostgreSQL på Windows?

  4. Hur kan jag välja den första dagen i en månad i SQL?