Статьи

Меньше значит больше: инвентарь подмножеств XPath

Многие спецификации, которые манипулируют контентом XML, сделали шаг к созданию собственного подмножества XPath. Как правило, им нужен язык запросов / указателей XML, но полный XPath (или XPointer) излишним для их цели (я говорю о XPath 1.0 здесь, XPath 2.0 обычно слишком много убивает, а потом что-то). Определение подмножества XPath вместо изобретения языка запросов с нуля привлекательно, потому что:

  • люди относительно знакомы с XPath (по крайней мере, наиболее распространенные части)
  • он уже указан, так что вы можете использовать работу по написанию спецификаций W3C
  • Разработчики, имеющие доступ к движку XPath, получают реализацию подмножества «бесплатно», поскольку движок XPath будет обрабатывать операторы из любого подмножества XPath.

Вот краткий перечень определенных подмножеств XPath, которые мне известны.

XML-схема

Раздел 3.11.6 спецификации XML-схемы (часть 1) определяет подмножество XPath, используемое для указания на набор элементов, которые являются целью ограничения идентичности. Вот BNF сокращенной формы подмножества (вы также можете использовать функционально эквивалентную полноразмерную запись):

Selector   ::=    Path ( '|' Path )*
Path       ::=    ('.//')? Step ( '/' Step )*
Step       ::=    '.' | NameTest
NameTest   ::=    QName | '*' | NCName ':' '*'

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

Path       ::=    ('.//')? ( Step '/' )* ( Step | '@' NameTest )

В соответствии со спецификацией эти подмножества были определены «для того, чтобы снизить нагрузку на разработчиков, в частности, разработчиков потоковых процессоров». Как указывается в этой статье , потоковое удобство подмножества XPath является относительным понятием. Но вышеприведенные подмножества, кажется, действительно отвечают всем требованиям. Они также включают в себя множество упрощений, которые «снижают нагрузку на разработчиков», но не имеют ничего общего с потоковой передачей, таких как удаление функций и всех предикатов (а не просто ограничение содержимого предикатов).

WS-Management и WS-ResourceTransfer

WS-Managment также определяет два подмножества (он называет их диалектами) XPath. Я не буду копировать определения BNF здесь, так как они довольно длинные. Вы можете найти их в Приложении D к спецификации . Они называются «XPath level 1 ″ и« XPath level 2 ″.

Основные варианты использования этих диалектов были связаны с реализацией WS-Management в условиях ограниченных ресурсов, например, в контроллере управления платой сервера.

WS-ResourceTransfer взял эту идею от WS-Management, и он также определяет диалект «XPath level 1» (см. Приложение I спецификации ).

Протокол удаленного взаимодействия Windows EventLog v6

Версия 6.0 протокола Microsoft EventLog Remoting , нового в Vista, добавляет механизм фильтрации (для выбора событий в журнале), основанный на подмножестве XPath . Потоковая передача, по-видимому, также вызывает беспокойство («оценка каждого события ДОЛЖНА быть ограничена только прямым, упорядоченным обходом XML в глубину»). И, будучи Microsoft, они также добавляют некоторые расширения в XPath.

CMDBf (скоро)

CMDBf также определяет подмножество XPath. Он определяется не через ограниченный синтаксис, а через ограничение типа возвращаемых объектов. Там нет предоставленной БНФ. Вы можете написать свой XPath любым удобным вам способом, если только он возвращает объекты нужного типа (например, наборы узлов, содержащие узлы комментариев, не повезло). Думайте об этом как «управление по целям», а не как микроуправление. Основным драйвером здесь не является поддержка потоковой передачи. Дело в том, что, поскольку сериализация узлов XPath является проблемой, мы хотим делать это только в тех случаях, когда есть убедительный вариант использования. Нет смысла создавать проблемы взаимодействия без практической выгоды.

Другие?

За исключением XSD, все приведенные выше примеры взяты из мира управления ИТ, потому что там я живу. Вероятно, существует множество спецификаций в других областях, в которых предприняты аналогичные шаги, например, в стандарте ANSI « Цифровая говорящая книга» (см. Этот раздел ).

И это только подмножества XPath, определенные как часть спецификаций. Существуют также подмножества XPath, определенные реализациями (например, ограниченная поддержка XPath ElementTree ). И другие, определенные для исследовательских целей (например, «Univariate XPath», из этой статьи ACM , которая быстро описана в ранее упомянутом посте о дружественных для потоков подмножествах XPath ).

Если вы знаете другие интересные подмножества XPath, пожалуйста, оставьте комментарий.

Из блога Уильяма Вамбенепе