2010-03-21 22 views
5

¿Cuál sería la consulta xpath para buscar todos los nodos secundarios con un valor de atributo específico, pero comenzando desde un nodo con un valor de atributo específico?XPATH: seleccione todos los nodos secundarios con un atributo específico

Esto está relacionado con una pregunta que publiqué anteriormente sobre el análisis de un archivo rdf xml. Pensé que lo había resuelto pero todavía no.

Por ejemplo, estoy tratando de analizar y tomar todos los valores de los atributos rdf:about. Tengo esto funcionando bien. Sin embargo, necesito agregar la siguiente condición: el análisis debe comenzar después de encontrar un valor específico de rdf:about.

estoy trabajando en el PHP y el uso y DomDocument y estoy usando la siguiente consulta XPath:

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

Se trata de encontrar todos los atributos rdf:about bien.

Necesito extender esto para encontrar solo aquellos atributos que vienen después del nodo cuyo atributo rdf:about es igual a algo.

Espero que esto tenga sentido.

+0

Vi su pregunta anterior y noté que está usando ARC pero no su analizador, sugeriría seriamente usar el analizador ya que RDF/XML tiene mucha azúcar sintáctica y no se garantiza que funcione para XPath que funciona para un archivo otro. Si está luchando por comprender cómo extraer datos de las estructuras analizadas, intente utilizar la biblioteca de Graphite (http://graphite.ecs.soton.ac.uk/) que es una capa de abstracción de alto nivel sobre ARC2 – RobV

Respuesta

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

Con el script de ejemplo, salidas URL inicio/terminando con:

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

Eso es perfecto - gracias . ¿Entonces solo faltaba el asterisco del consejo de Vollerk? Gracias de nuevo: a los dos (Chris y Vollerk) – David

+0

Yupp, lo limité a rdf: elementos de descripción, pero el valor que buscas es un atributo de owl: Ontology – VolkerK

1

HI Chris lo siento pero que isnt bastante trabajo para mí. Si ejecuta mi siguiente código:

$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); 
} 

usted debe obtener una lista de elementos de la ontología sioc. El problema es que los primeros 9 no son realmente parte de la ontología y, por lo tanto, quiero ignorarlos y comenzar en el décimo nodo que tiene 'http://rdfs.org/sioc/ns#' como su valor para el atributo rdf: about.

Al incluir su consulta xpath no recibo nada en absoluto.

+0

Right. No entendí lo que estabas pidiendo. He editado mi respuesta y parece que funciona con tu código. – Chris

Cuestiones relacionadas