2010-03-21 18 views
5

Wie lautet die xpath-Abfrage, um alle untergeordneten Knoten mit einem bestimmten Attributwert zu finden, aber ausgehend von einem Knoten mit einem bestimmten Attributwert?XPATH - Alle untergeordneten Knoten mit einem bestimmten Attribut auswählen

Das ist irgendwie mit einer Frage verbunden, die ich zuvor über das Parsen einer rdf-XML-Datei geschrieben habe - ich dachte, ich hätte es gelöst, aber noch nicht ganz.

Zum Beispiel versuche ich, alle rdf:about Attributwerte zu analysieren und zu packen. Ich habe das gut funktioniert. Ich muss jedoch die folgende Bedingung hinzufügen - Parsing muss gestartet werden, nachdem ein bestimmter rdf:about Wert gefunden wurde.

Ich arbeite in PHP und und mit DomDocument und bin mit der folgenden XPath-Abfrage:

$xpath->query('//@rdf:about'); 

Es ist alles rdf:about Attribute in Ordnung zu finden.

Ich muss dies erweitern, um nur diejenigen Attribute zu finden, die nach dem Knoten kommen, dessen rdf:about Attribut gleich ist.

Hope das macht Sinn.

+0

Ich sah Ihre vorherige Frage und bemerkte, dass Sie ARC, aber nicht seinen Parser verwenden, würde ich ernsthaft vorschlagen, den Parser zu verwenden, da RDF/XML eine Menge syntaktischer Zucker und XPath hat, die für eine Datei funktioniert nicht garantiert für zu arbeiten Ein weiterer. Wenn Sie nicht wissen, wie Sie Daten aus den geparsten Strukturen extrahieren können, versuchen Sie es mit der Graphite-Bibliothek (http://graphite.ecs.soton.ac.uk/), die eine Abstraktionsebene auf hoher Ebene über ARC2 ist. – RobV

Antwort

2
$xpath->query("//*[@rdf:about='http://rdfs.org/sioc/ns#']/following-sibling::*/@rdf:about");

Mit Ihrem Beispielskript, beginnend Ausgänge URLs/endend mit:

http://rdfs.org/sioc/ns#Community 
http://rdfs.org/sioc/ns#Container 
... 
http://rdfs.org/sioc/ns#reference 
http://rdfs.org/sioc/ns#subject
+0

Das ist perfekt - danke . Es war also nur der Asterix von Vollerks Ratschlag, der fehlte? Nochmals vielen Dank - an euch beide (Chris & Vollerk) – David

+0

Yupp, ich beschränkte es auf rdf: Beschreibungselemente, aber der Wert, nach dem du suchst, ist ein Attribut der Eule: Ontologie – VolkerK

1

HALLO Chris Sorry, aber das ist nicht ganz für mich zu arbeiten. Wenn Sie meinen folgenden Code ausführen:

$dom = new DomDocument; 
$dom->load('http://rdfs.org/sioc/ns#'); 
$xpath = new DOMXPath($dom); 

$elements = array(); 
foreach($xpath->query('//@rdf:about') as $element) { 

    array_push($elements, $element->value); 
} 

foreach($elements as $element) { 

    echo("<br />" . $element); 
} 

Sie sollten eine Liste der Elemente in der sioc Ontologie erhalten. Das Problem ist, dass die ersten 9 nicht wirklich Teil der Ontologie sind und ich möchte sie ignorieren und auf dem 10. Knoten beginnen, der 'http://rdfs.org/sioc/ns#' als Wert für das Attribut rdf: about hat.

Mit Ihrer Xpath-Abfrage bekomme ich überhaupt nichts zurück.

+0

Richtig. Ich habe missverstanden, was du verlangst. Ich habe meine Antwort bearbeitet und es scheint mit Ihrem Code zu funktionieren. – Chris

Verwandte Themen