У меня есть некоторая проблема с проверкой xml для схемы, которую я определил. Странно то, что проверка не удалась, только если я использую пространство имен по умолчанию xmlns="http://retis.sssup.it/duck-lab"
, пока оно работает как шарм, если я определяю его как xmlns:dl="http://retis.sssup.it/duck-lab"
.Ошибка проверки XML на атрибутах
Когда я использую пустое пространство имен проверка не только на атрибуты со следующими сообщениями:
cvc-complex-type.3.2.2: Attribute 'data_len' is not allowed to appear in element 'data'.
cvc-complex-type.4: Attribute 'data_len' must appear on element 'data'.
ДЕЙСТВИТЕЛЬНО XML:
<dl:duck xmlns:dl="http://retis.sssup.it/duck-lab" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://retis.sssup.it/duck-lab ../duck.xsd ">
...
<dl:data dl:data_len="1" dl:data_name="name uint" dl:data_type="uint16" dl:endianess="big-endian"/>
INVALID XML:
<duck xmlns="http://retis.sssup.it/duck-lab" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://retis.sssup.it/duck-lab ../duck.xsd ">
...
<data data_len="1" data_name="name uint" data_type="uint16" endianess="big-endian"/>
--EDIT--
DUCK.XSD
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://retis.sssup.it/duck-lab"
xmlns:dl="http://retis.sssup.it/duck-lab" elementFormDefault="qualified">
<include schemaLocation="datatypes.xsd"/>
<include schemaLocation="duck_message.xsd"/>
<complexType name="DuckDefinitionType" block="#all" final="#all">
<sequence>
<element type="dl:MessageType" name="message_description" form="qualified"/>
</sequence>
</complexType>
<element name="duck" type="dl:DuckDefinitionType" />
</schema>
DATATYPES.XSD
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://retis.sssup.it/duck-lab"
xmlns:dl="http://retis.sssup.it/duck-lab" elementFormDefault="qualified">
<attribute name="data_name" type="string"/>
<attribute name="data_len" type="nonNegativeInteger"/>
<attribute name="data_type" type="string"/>
<attribute name="endianess" type="string"/>
<element name="data">
<complexType>
<attribute ref="dl:data_name" use="required"/>
<attribute ref="dl:data_len" use="required"/>
<attribute ref="dl:data_type" use="required"/>
<attribute ref="dl:endianess" use="required"/>
</complexType>
</element>
</schema>
DUCK_MESSAGE.XSD
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://retis.sssup.it/duck-lab"
xmlns:dl="http://retis.sssup.it/duck-lab" elementFormDefault="qualified">
<include schemaLocation="datatypes.xsd"></include>
<complexType name="MessageType">
<sequence maxOccurs="unbounded">
<element ref="dl:data"></element>
</sequence>
</complexType>
</schema>
Очевидно, что я могу обойти проблему определения непустых имен, но я хотел бы понять, что случилось.
Большое спасибо.
Покажите нам остальную часть схемы (особенно элемент 'schema', поскольку это потенциально похоже на проблему с квалифицированными атрибутами. –
Обновлен вопрос с остальной частью схемы. – hara