Почему XML-схема позволяет QName быть значением элемента? - PullRequest
3 голосов
/ 22 февраля 2012

В Как найти все текстовые узлы в документе XML с пространством имен, используя XPath? , пользователи SO утверждали, что текстовые узлы в документе XML не могут быть квалифицированы для пространства имен.Спецификации XPath 1.0 и этого документа в QNames согласуются с их утверждениями.

OTOH, рассмотрим этот XML

<?xml version="1.0" encoding="UTF-8"?>
<Root xmlns:bob="http://www.bob.com">
    <Hello>bob:World</Hello>
</Root>

И эту схему XML:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Root">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Hello" type="xs:QName" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

Он объявляет Hello типа QName.Если пространство имен http://www.bob.com будет удалено из документа XML, оно не будет проверено.

Хотите увидеть реальный пример, который это делает?

Коды ошибок в спецификации SOAP 1.2 - это те, с которыми я столкнулся. *1022*

Итак, вот мои вопросы:

  1. Почему схема XML позволяет QNameбыть значением элемента?Кажется, что это противоречит другим спецификациям.
  2. Справедливо ли сказать, что, хотя синтаксические анализаторы XML не понимают текстовый узел как квалифицированный для пространства имен, другие процессоры, такие как средства проверки схемы и процессоры SOAP, понимают?

1 Ответ

3 голосов
/ 22 февраля 2012

Вы путаете понятия.

Элемент и атрибуты имеют имена, и их имена могут быть квалифицированы в пространстве имен.Текстовые узлы не имеют имен, поэтому их имена, очевидно, не могут быть квалифицированы в пространстве имен.

Атрибуты и текстовые узлы могут иметь QNames в качестве своего содержимого.Префикс пространства имен в обоих случаях разрешается для внутренних пространств имен содержащего элемента: то есть всех пространств имен, объявленных для элемента и его предков.Это совершенно не связано с именем рассматриваемого элемента или атрибута.

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

...