2010-06-16 2 views
3

Мне нужно уточнение по одному из сценариев <xsd:any>.Как использовать 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?

ответ

5

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

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

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

Смежные вопросы