Что разрешено в ограниченные XPaths (ограничения)?

StackOverflow https://stackoverflow.com/questions/3637643

  •  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)
  • Абсолютные пути

Надеюсь, это поможет кому-то окажущуюся по этой проблеме.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top