Язык XML

       

Проверка узлов


Каждая ось имеет основной тип узлов (principal node type). Если ось может содержать элементы, то для такой оси основным типом узлов будут элементы. В противном случае в качестве основного берется тип тех узлов, которые эта ось может содержать. Таким образом,

  • для оси attribute основным типом узлов является атрибут.
  • для оси namespace основным типом узлов является пространство имен.
  • для остальных осей основным типом узлов является элемент.
  • Правило проверки узлов, соответствующее сценарию , имеет результатом true тогда и только тогда, когда тип узла (см. ) совпадает с основным типом узлов, а его совпадает с , указанным этим . Например, child::para собирает элементы para, являющиеся непосредственными потомками текущего узла контекста. Если текущий узел контекста не имеет непосредственного потомка para, то будет получен пустой набор узлов. attribute::href в текущем узле контекста выбирает атрибут href. Если текущий узел контекста не имеет атрибута href, будет получен пустой набор узлов.

    в правиле для проверки узла, преобразуется в с помощью деклараций пространств имен в контексте этого выражения. Точно так же преобразуются названия типов элементов в начальных и конечных тэгах, за исключением того, что не используется пространство имен по умолчанию, декларированное с помощью xmlns: если не имеет префикса, URI пространства имен будет нулевым (таким же способом обрабатываются названия атрибутов). Если имеет префикс, для которого в контексте выражения нет соответствующей декларации пространства имен, фиксируется ошибка.

    Правило проверки узлов * имеет результатом true для любого узла, если его тип соответствует основному. Например, child::* найдет все элементы, являющиеся непосредственными потомками текущего узла контекста, а attribute::* соберет все атрибуты текущего узла контекста.

    Правило проверки узлов может иметь вид :*. В этом случае префикс, так же как и в случае с , преобразуется с помощью деклараций пространства имен в контексте. Если для этого префикса в контексте выражения не найдено соответствующей декларации пространства имен, фиксируется ошибка. Указанное правило проверки узла будет выдавать true для любого узла основного типа, чье имеет именно то URI пространства имен, к которому привязан указанный префикс, независимо от локальной части в названии узла.

    Правило проверки узлов text() будет давать результат true для любого текстового узла. Например, child::text() будет собирать текстовые узлы, являющиеся непосредственными потомками текущего узла контекста. Точно так же, правило проверки узлов comment() будет выдавать true для любого узла комментария, а правило проверки узлов processing-instruction() - для любой инструкции обработки. Правило проверки processing-instruction() может иметь аргумент типа . В этом случае проверка будет давать true для любой инструкции проверки, чье название соответствует значению этого аргумента.

    Правило проверки узлов node() будет выдавать true для любого узла, к какому бы типу он не относится.

    [7]    NodeTest    ::=    | '(' ')' | 'processing-instruction' '(' ')'

    Содержание раздела