Классика баз данных - статьи

       

Пространства имен в области действия


Было решено не поддерживать в XQuery узлы-пространства имен и ось пространств имен, поддерживаемые в XPath 1.0. Вместо этого, в XQuery с узлами ассоциируются связывания пространств имен в области действия (in-scope namespace bindings).

В XQuery также имеется набор статически известных пространств имен, используемых при разрешении квалифицированных имен (QName). В число этих статически известных пространств имен входят fn, xml, xs, xsi, xdt и local. В реализации могут быть добавлены собственные связывания пространств имен, и пользователь может добавить связывания в прологе запроса: declare namespace myco="http://www.example.com/myco";

<myco:result> { for ... } </myco:result>

Пространства имен в области действия могут влиять на сериализацию узлов-элементов, а также на поведение небольшого числа функций. С узлом, конструируемым в приведенном примере, ассоциируется одно связывание пространства имен. Пространство имен для myco берется из пространств имен, статически известных во время конструирования узла.

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

Рассмотрим следующий пример: import schema namespace hr="...";

validate strict {    <hr:employee>       <hr:skill xsi:type="xs:string">          unicycling       </hr:skill>    </hr:employee> }

Этот запрос приведет к ошибке, потому что связывание для xs не появится в валидируемом информационном наборе. В XQuery не уделяется особое внимание атрибуту xsi:type. Значение "xs:string" – это всего лишь нетипизированное значение атрибута, оно не выглядит как QName, и поэтому xs не добавляется к пространствам имен в области действия. Это означает, что оно не является частью информационного набора. Данный запрос можно исправить путем изменения стартового тега следующим образом: <hr:employee xmlns:xs ="http://www.w3.org/2001/XMLSchema">    .    .    . </hr:employee>

Более тонкое управление пространствами имен в области действия конструируемых элементов можно обеспечить с использованием объявления copy-namespaces в прологе запроса.



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