Lo que está permitido en Restringido XPaths (restricciones)?
-
30-09-2019 - |
Pregunta
Necesito aplicar restricciones en un archivo XML grandes, como esto:
<library>
<book>
<bookAuthor ID="1" nameAlias="PeerBR jr"/>
</book>
<book>
<bookAuthor ID="1"/>
</book>
</library>
<authorCatalogue>
<author ID="1" name="PeerBr"/>
</authorCatalogue>
Necesito identificación de cada bookAuthor para referirse a un autor válido.
Estoy descubriendo la "XPath restringido" muy torpe para trabajar, pero tal vez con vistas a algo. Estoy en lo correcto para definir la restricción de esta manera:
<xs:keyref name="bookAuthor" refer="author">
<xs:selector xpath="library/book/bookauthor"/>
<xs:field xpath="@ID"/>
</xs:keyref>
<xs:key name="author">
<xs:selector xpath="authorCatalogue/author"/>
<xs:field xpath="@ID"/>
</xs:key>
Funciona, pero mi archivo es en realidad más anidada, lo que hace aún más difícil. Además tengo que escribir una nueva restricción para la "biblioteca / libro / co-autor". ¿No hay nada más elegante que pueda hacer? ¿No puedo abreviar el selector?
¿Puedo restringir la aplicación de la restricción ( "bookauthor [@nameAlias]")?
Gracias de antemano por su ayuda.
Solución
encontrado la respuesta en "Esquema XML" de O'Reilly. Es aceptable tener:
- rutas relativas con elemento hijo
- espacios de nombres
- todos los elementos ( "*")
- cualquier elemento secundario ( ".//bookauthor" en mi caso va a hacer el truco)
No es buena idea incluir fantasía nada, como por ejemplo:
- elemento padre
- pruebas ( "[@nameAlias]", así que no hay manera de aplicar restricción sólo para los nodos con un atributo nameAlias)
- rutas absolutas
Espero que esto ayude a alguien tropezando con el problema más tarde.