Как я могу использовать xsd: any с пространством имен? - PullRequest
3 голосов
/ 17 июня 2010

Мне нужно разъяснение по одному из сценариев <xsd:any>.

Что если значение атрибута namespace равно ##any, а атрибут processContents не существует (значение по умолчанию strict)?

Что будет здесь, должен ли процессор проверять элементы по каким-либо схемам?

Пример для уточнения. Вот раздел XSD:

......
<xsd:complexType name="reservedType"> <!-- a declaration for an element `reserved` -->
 <xsd:sequence>
  <xsd:any namespace="##any"/>
 </xsd:sequence>
</xsd:complexType>
..........

А вот и XML:

<c:reserved>
<message xmlns="unknown_schema">
 <msg>Hello</msg>
</message>
</c:reserved>

Всякий раз, когда я пытаюсь проверить этот XML на соответствие приведенной выше схеме, я получаю:

The matching wildcard is strict, but no declaration can be found for element 'message'.

Как это получается, и пространство имен ##any?

1 Ответ

6 голосов
/ 18 июня 2010

Модель обработки по умолчанию для xsd:any является строгой . Так что да, вам придется установить этот элемент на lax или skip:

<xsd:sequence>
  <xsd:any namespace="##any" processContents="lax"/>
</xsd:sequence>

Пожалуйста, обратитесь к Разделу 3.10.2 спецификации XML-схемы. См. Ниже таблицу «Компоненты схемы подстановочных знаков», в частности атрибут содержимого процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...