Что разрешено в ограниченные XPaths (ограничения)?
-
30-09-2019 - |
Вопрос
Мне нужно применить ограничения в большом XML-файле, как это:
<library>
<book>
<bookAuthor ID="1" nameAlias="PeerBR jr"/>
</book>
<book>
<bookAuthor ID="1"/>
</book>
</library>
<authorCatalogue>
<author ID="1" name="PeerBr"/>
</authorCatalogue>
Мне нужен удостоверение личности каждого книги, чтобы обратиться к действительному автору.
Я нахожу «ограниченный XPath» очень неуклюжий для работы, но, возможно, с видом на что-то. Я прав, чтобы определить ограничение таким образом:
<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>
Он работает, но мой файл на самом деле более вложенным, поэтому он становится действительно грязным. Кроме того, я должен написать новое ограничение для «библиотеки / книги / COAUTHOR». Там нет ничего более элегантного, я могу сделать? Разве я не могу сократить селектор?
Могу ли я ограничить применение ограничения («Bookauthor [@Namealias]»)?
Заранее спасибо за вашу помощь.
Решение
Нашел ответ в «XML-схеме O'Reilly». Это нормально, чтобы иметь:
- Относительные пути с дочерним элементом
- пространства имен
- Все элементы ("*")
- Любой дочерний элемент (".//bookauthor" в моем случае сделает трюк)
Не в порядке, чтобы включить все фантазии, например:
- родительский элемент
- Испытания («@Namealias]», поэтому никак не применять ограничение только узлам с атрибутом Namelias)
- Абсолютные пути
Надеюсь, это поможет кому-то окажущуюся по этой проблеме.