2010-11-19 17 views
5

Tengo un archivo XML donde tengo un atributo cuyo valor será un XPath para ubicar el contenido en un conjunto diferente de archivos XML.Definición del tipo de esquema XML para valores XPath?

Ejemplo:

<?xml version="1.0" encoding="utf-8"?> 
<Root> 
    <IterestingNode Value="/html/head/title"/> 
</Root> 

Este archivo puede ser validado contra un XSD. Actualmente solo confirmo que el valor del atributo es una cadena, pero me gustaría verificar que sea un valor XPath sintacticamente válido.

¿Existe una definición de esquema XML para los valores de XPath?

+1

Perez: RegExp y XPath Grammar no coinciden. –

Respuesta

3

No hay un tipo de datos XSD para una expresión XPATH.

Lo mejor que probablemente podría hacer sería usar un xsd:restriction con un xsd:pattern que utiliza un patrón de expresiones regulares para validar que el valor de la cadena es una expresión XPATH.

Algo como esto:

<xsd:simpleType name="XPathValueType"> 
    <xsd:restriction base="xsd:string"> 
    <xsd:pattern value="**PUT IN SOME REGEX PATTERN TO VERIFY THE STRING IS AN XPATH EXPRESSION**"/> 
    </xsd:restriction> 
</xsd:simpleType> 

No estoy al tanto de un patrón de expresión que validar que una determinada cadena es una expresión XPath para referencia.

0

Dudo que xpath sea datos, no XML. La especificación está aquí: ht tp://www.w3.org/TR/xpath/

+0

¿Por qué no? y la expresión xpath también es "información"? :) – redben

+0

xpath no se expresa en formato XML, por lo que no tendrá un esquema XML. –

+0

Todavía se puede implementar un patrón que coincida con la sintaxis correcta xpath no? redben

0

Usted podría utilizar anyURI con algún patrón, y XPointer

XPointer ejemplo:

<?xml version="1.0" encoding="utf-8"?> 
<Root> 
    <IterestingNode Value="doc.xml#xpointer(/html/head/title)"/> 
</Root> 
0

En última instancia, la respuesta proporcionada por redben es la respuesta correcta (de hecho lo he visto afirmó, y creo XSLT que no se puede expresar en xsd), pero me gustaría llamar la atención sobre la xslt xsd que tiene la siguiente definición XSD de una expresión XPath:

<xs:simpleType name="expression"> 
    <xs:annotation> 
     <xs:documentation> 
      An XPath 2.0 expression. 
     </xs:documentation> 
    </xs:annotation> 
    <xs:restriction base="xs:token"> 
     <xs:pattern value=".+"/> 
    </xs:restriction> 
</xs:simpleType> 

Si bien me doy cuenta de que esta pregunta no ha estado activa durante mucho tiempo, pensé que esto podría ser instructivo para cualquier otra persona que deba abordar este tema.

Cuestiones relacionadas