XML проверката е неуспешна за атрибути

Имам някакъв проблем с валидирането на xml спрямо схема, която дефинирах. Странното е, че проверката е неуспешна само ако използвам пространството от имена по подразбиране xmlns="http://retis.sssup.it/duck-lab", докато работи като чар, ако го дефинирам като xmlns:dl="http://retis.sssup.it/duck-lab".

Когато използвам празното пространство от имена, проверката е неуспешна само на атрибутите със следните съобщения:

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"/>

НЕВАЛИДЕН 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"/>

--РЕДАКТИРАНЕ--

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>

Очевидно мога да заобиколя проблема с дефинирането на непразно пространство от имена, но бих искал да разбера какво не е наред.

Благодаря много.


person hara    schedule 25.05.2012    source източник
comment
Покажете ни останалата част от схемата (особено самия елемент schema, тъй като това потенциално изглежда като проблем с квалифицирани атрибути.   -  person Nic Gibson    schedule 25.05.2012
comment
Актуализира въпроса с останалата част от схемата.   -  person hara    schedule 25.05.2012


Отговори (1)


Обработката на пространството от имена по подразбиране е различно за атрибутите - атрибут без префикс на пространство от имена НЕ е свързан с пространството от имена по подразбиране, той няма пространство от имена, вижте тук.

Това означава, че в невалидния XML различните атрибути data-len, data-name и т.н. нямат пространство от имена, докато схемата ги декларира, че са в пространството от имена http://retis.sssup.it/duck-lab поради директивата form="qualified".

person MiMo    schedule 25.05.2012