Пространства имен и схемы 70 Сегментация проблемы 71


Шаг, направляемый осью поиска



жүктеу 3,64 Mb.
бет77/150
Дата17.01.2022
өлшемі3,64 Mb.
#33337
түріПротокол
1   ...   73   74   75   76   77   78   79   80   ...   150
Лекции 2

Шаг, направляемый осью поиска

Шаг, направляемый осью поиска, состоит из трех частей: оси поиска (axis), теста узла (node test) и необязательного предиката (predicate). Ось отделяется от теста узла двумя двоеточиями, а предикат записывается после теста узла в квадратных скобках:

ось: тест узла [предикат].

Например, шаг поиска может выглядеть так:

child::section[l]

В этом примере ось поиска child показывает, что поиск охватывает все узлы, непосредственно вложенные в просматриваемый узел, за исключением узлов-атрибутов и узлов пространств имен, тест узла section выбирает из этих узлов узлы-элементы section, а предикат l выбирает первый из встреченных узлов-элементов section.

Каждая из трех частей шага поиска сужает первоначальную область поиска.

Ось поиска задает направление поиска, отсчитываемое от текущего узла, и его объем. Например, поиск может идти в сторону вложенных элементов или, наоборот, просматривать родительские узлы. Можно просматривать только атрибуты элементов или только соседние элементы.

Тест узла выбирает в области поиска, заданной осью, определенные узлы по их имени или типу.

Предикат содержит условия, по которым проверяет узлы, уже отобранные осью поиска и тестом узла, и делает окончательный выбор.

Итак, ось поиска говорит о том, КУДА да мы двигаемся, тест узла показывает, ЧТО мы ищем, а предикат уточняет, КАКИМИ свойствами должен обладать искомый объект.

Познакомимся подробнее с каждой из трех частей шага поиска, определяемого осью.

Оси поиска

В дереве документа естественно выделяются два противоположных направления поиска: "вниз" — от текущего узла документа по ветвям к вложенным узлам-элементам и листьям, и "вверх" — от листьев или текущих узлов-элементов к узлу документа. Оси поиска позволяют организовать поиск и в других направлениях: среди всех потомков данного узла или только среди непосредственных потомков, среди атрибутов, соседних узлов, всех предков данного узла. Всего насчитывается тринадцать осей поиска.

Восемь осей, перечисленных далее, задают прямой поиск (forward axis) — поиск "вниз":


  • self — сам текущий узел;

  • child- все непосредственные узлы-потомки, кроме узлов-атрибутов и узлов пространств имен; эта ось принимается осью по умолчанию;

  • descendant — все узлы-потомки с их потомками и т. д., не включая узлы атрибуты и узлы пространств имен — рекурсивное применение оси child;

  • descendant-or-self — сам узел и все его потомки кроме узлов-атрибутов и узлов пространств имен — объединение осей self и descendant;

  • following— все узлы, лежащие "ниже" текущего узла без узлов-потомков, узлов-атрибутов и узлов пространств имен;

  • following-sibling — узлы с тем же непосредственным предком, что и у текущего узла, следующие за текущим узлом в том порядке, в котором они записаны в документе; если текущий узел является узлом-атрибутом или узлом пространств имен, то ось пуста;

  • attribute — узлы-атрибуты текущего узла-элемента; для других видов узлов эта ось пуста;

  • namespace — узлы пространств имен текущего узла-элемента; для других видов узлов эта ось пуста.

Пять осей, приведенных далее, направляют поиск "вверх", к корневому узлу документа (reverse axis):

  • parent — непосредственный предок текущего узла; если его нет, то ось пуста;

  • ancestor — все узлы-предки текущего узла;

  • ancestor -or-self — текущий узел вместе со всеми своими предками — объединение осей parent и ancestor;

  • preceding — узлы, предшествующие текущему узлу в документе XML; не содержит предков текущего узла, узлов-атрибутов и узлов пространств имен;

  • preceding-sibling — узлы с тем же непосредственным предком, что и у текущего узла, следующие перед текущим узлом в том порядке, в котором они записаны в документе; если текущий узел является узлом-атрибутом или узлом пространств имен, то ось пуста.

Таким образом, оси self и parent определяют только по одному узлу. Оси descendant, ancestor, following и preceding определяют непересекающиеся области узлов, которые вместе с осью self содержат все узлы дерева документа, за исключением узлов-атрибутов и узлов пространств имен.

В шаге поиска, определяемом осью, сама ось может отсутствовать, при этом (за одним исключением) по умолчанию подразумевается ось child.

Поэтому предыдущий пример можно записать проще:

section[1]

Оговоренное исключение касается поиска атрибутов. Если шаг поиска отыскивает атрибуты, то по умолчанию подразумевается ось attribute, например, запись

//attribute(@name)

Эквивалентная запись

//attribute:: attribute(@name)



Запись оси attribute:: часто сокращается до одного символа "собачки". Пользуясь этим сокращением можно сделать еще одну эквивалентную запись предыдущего выражения:

//@attribute(@name)




жүктеу 3,64 Mb.

Достарыңызбен бөлісу:
1   ...   73   74   75   76   77   78   79   80   ...   150




©g.engime.org 2024
әкімшілігінің қараңыз

    Басты бет
рсетілетін қызмет
халықаралық қаржы
Астана халықаралық
қызмет регламенті
бекіту туралы
туралы ережені
орталығы туралы
субсидиялау мемлекеттік
кеңес туралы
ніндегі кеңес
орталығын басқару
қаржы орталығын
қаржы орталығы
құрамын бекіту
неркәсіптік кешен
міндетті құпия
болуына ерікті
тексерілу мемлекеттік
медициналық тексерілу
құпия медициналық
ерікті анонимді
Бастауыш тәлім
қатысуға жолдамалар
қызметшілері арасындағы
академиялық демалыс
алушыларға академиялық
білім алушыларға
ұйымдарында білім
туралы хабарландыру
конкурс туралы
мемлекеттік қызметшілері
мемлекеттік әкімшілік
органдардың мемлекеттік
мемлекеттік органдардың
барлық мемлекеттік
арналған барлық
орналасуға арналған
лауазымына орналасуға
әкімшілік лауазымына
инфекцияның болуына
жәрдемдесудің белсенді
шараларына қатысуға
саласындағы дайындаушы
ленген қосылған
шегінде бюджетке
салығы шегінде
есептелген қосылған
ұйымдарға есептелген
дайындаушы ұйымдарға
кешен саласындағы
сомасын субсидиялау