Что разрешено в Ограниченных XPath (ограничениях)? - PullRequest
0 голосов
/ 03 сентября 2010

Мне нужно применить ограничения в большом 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]")?

Заранее благодарен за помощь.

1 Ответ

4 голосов
/ 03 сентября 2010

Нашел ответ в «Схеме XML» О'Рейли.Можно иметь:

  • относительные пути с дочерним элементом
  • пространства имен
  • все элементы ("*")
  • любой дочерний элемент («.//bookauthor» в моем случае сделает свое дело)

Нельзя включать что-то необычное, например:

  • родительский элемент
  • tests ("[@nameAlias]", поэтому невозможно применить ограничение только к узлам с атрибутом nameAlias)
  • абсолютные пути

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

...