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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top