2016-09-15 13 views
0

Ich habe ein Triple-Geschäft mit Chemikalien. Jede Substanz hat etwa 30-40 Parameter. Jeder Parameter hat einen Datenbanknamen und einen echten Namen. Zum Beispiel chem: flBeiRT hat den richtigen Namen Flüssig bei Raumtemperatur (deutsch). Um die Liste auf eine besser lesbare Größe zu bringen, haben wir Kategorien erstellt. Eine dieser Kategorien wäre: Nomenklatur (deutsch).Sparql variabel aussteigen alle begrenzt

Ich habe jetzt eine SPARQL-Abfrage, wo ein

SELECT DISTINCT ?name   
    WHERE{ 
    ?s iol:name "Nomenklatur" . 
    ?x rdf:type iol:property . 
    ?x iol:name ?name . 
    ?x iol:propertyof ?s . 
    } 

Es gibt mir die wirklichen Namen aller Parameter unter Nomenklatur alle Parameter unter Nomenklatur erhalten wie erwartet. In meinem Verständnis in der Variable? X sind alle Parameter bereits mit dort Datenbank Name gebunden, so dass ich es direkt für die Verwendung all dieser Parameter von einer Chemikalie verwenden. Also habe ich versucht, dies direkt zu dieser Abfrage hinzuzufügen. Jeder einzelne Parameter einzeln erhalten. Da die Substanz keine ID hat verwende ich eine Mine zweite Abfrage insinde nur, dass eine Chemikalie zu erhalten:

SELECT ?name 
WHERE{ 
?s iol:name "Nomenklatur" . 
?x rdf:type iol:property . 
?x iol:name ?name . 
?x iol:propertyof ?s . 
{ 
SELECT ?o 
WHERE{ 
    ?x chem:ilAbk "[A_4mim]Al" . 
} 
} 
} 

Und es gibt mir immer noch die gleichen elf Parameter i gefragt. Aber wie würde ich jetzt alle passenden Literas dieser Chemikalie bekommen? Ich habe versucht, mit:

SELECT DISTINCT ?name ?o 
WHERE{ 
    ?s iol:name "Nomenklatur" . 
    ?x rdf:type iol:property . 
    ?x iol:name ?name . 
    ?x iol:propertyof ?s . 
    { 
    SELECT DISTINCT ?o 
    WHERE{ 
     ?x chem:ilAbk "[C_2mim]Cl" . 
     ?x ?p ?o 
    } 
    } 
} 

Aber hier bekomme ich über 312 Ergebnisse, was wie jeder Parameter mit jedem wörtlichen mir Nähte plus all die uri? Könnte mir bitte jemand sagen, wie ich das anstellen soll? Und Danke für deine Zeit. Oder muss ich jeden Parameter in Ruhe bekommen? Vielleicht hilft es, die Daten oder ein Stück davon zu sehen:

screen from Turtle file

Antwort

2

Ihrer Unter SELECT eine Variable ?o zurückkehrt, aber das ist nicht in der äußeren SELECT-Abfrage verwendet. SPARQL wertet zuerst die inneren Sub-SELECT-Abfragen aus, nicht umgekehrt. Also werden zuerst die Werte Ihres gegebenen Stoffes [C_2mim]Cl berechnet, dann müssen Sie diejenigen im äußeren SELECT einschränken.

Ich habe Ihr Schema nicht verstanden, d. H. Es ist mir nicht völlig klar. Ihre Prädikate bezeichnen Parameter chemischer Substanzen, richtig? Wenn ja, müssten Sie die ?p s auf diejenigen beschränken, die zu der Kategorie gehören.

+0

Vielen Dank für Ihre Zeit. Also wird das innere Sub-SELECT zuerst ausgewertet - wusste das nicht. Also ich denke, es wäre besser, zuerst die Chemikalie auszuwählen und dann alle Namen und Literale zu erhalten und dann herauszufiltern, was unter _Nomenklatur_ steht. Ja im Schema hat jede Substanz die Parameter, diese haben dort eigene Präfixe (chem) und jede Chem hat Kategorie. – MisterT

+0

Korrigieren. Sie können Ihre Unterauswahl verwenden, aber Sie müssen alles weiterleiten, was notwendig ist, um das zu filtern, was Sie wollen - in Ihrem Fall wahrscheinlich '? P' ** und **'? O'. – AKSW