Puede verificar una expresión XPath contra un documento XML para verificarlo, pero ¿hay alguna manera fácil de verificar la misma expresión XPath en el esquema para ese documento?¿Puedo validar una expresión XPath contra un esquema XML?
Decir que tengo un esquema XSD de esta manera:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" ... etc>
<xsd:element name="RootData">
<xsd:complexType>
<xsd:sequence minOccurs="0">
<xsd:element name="FirstChild">
<xsd:complexType>
<xsd:sequence minOccurs="0">
<xsd:element name="FirstGrandChild">
... etc etc
¿Hay una manera fácil o incorporada para verificar que el XPath:
/RootData/FirstChild/FirstGrandChild
sería válida en contra de cualquier documento XML que puede estar basado en ese esquema? (Editar: supongo que quiero decir potencialmente válidas; el documento XML real no contenga esos elementos, sino que XPath aún podría ser considerado potencialmente válidas para el esquema Considerando que, por ejemplo, /RootData/ClearlyInvalidChild/ThisElementDoesntExistEither
es claramente válido..)
Por supuesto, solo podría esperar que esto funcione contra las expresiones XPath canónicas en lugar de las de complejidad arbitraria, pero está bien.
Estoy pensando específicamente en .NET pero tengo curiosidad si otras implementaciones lo hacen posible. No es tan importante que quiero rodar mi cuenta, por ejemplo, yo realmente no quiero escribir mi propio código para transformar esa expresión XPath en otro como:
/xsd:schema/xsd:element[@name='RootData']/xsd:complexType/xsd:sequence/xsd:element[@name='FirstChild']/...etc...
... aunque sé que podría hazlo si realmente tuviera que hacerlo.
¡Salud!
Ese XPath, por ejemplo, no será válido contra * cualquier * documento basado en ese XSD - si FirstChild (o FirstGrandChild) ocurre 0 veces, entonces no estoy seguro exactamente de lo que está buscando. Quizás quiera decir que un XPath podría ser válido contra * algún * documento basado en ese esquema. Por favor aclara – 13ren
Por supuesto que quiero decir "potencialmente válido". Eso es un poco a lo que me refería al referirme a XPath canónico, pero he editado para aclarar que también estoy asumiendo un posible documento XML. – Gavin
No estoy seguro de que las "expresiones de XPath canónicas" tengan una definición técnica precisa; supongo que se refería a nombres simples sin restricciones. Por cierto: para nombres simples, esa transformación es sencilla con expresiones regulares (pero desafortunadamente no funcionará para tipos con nombre, porque no están anidados) – 13ren