Почему мой xsd проверяет необъявленный атрибут? - PullRequest
0 голосов
/ 26 июня 2019

У меня есть xml, который я хочу проверить по xsd после добавления нового атрибута.
Я пытался объявить атрибут локально для какого-то элемента в xsd, но не мог понять, как это сделать.
По какой-то причине я взял уже проверенный xml и добавил новый атрибут в элемент без каких-либо изменений в xsd, и проверка прошла успешно.

Атрибут (межбуквенный интервал), прошедший проверку только того, имеет префикс пространства имен (пространство имен 'dptt', которое определено в xsd и появляется в xml):
Пример строки, прошедшей проверку:

<tt:style dptt:letter-spacing="4px" style="s01" tts:lineHeight="120px" xml:id="1"/>

Пример строки, которая не прошла проверку:

<tt:style letter-spacing="4px" style="s01" tts:lineHeight="120px" xml:id="1"/>

Это часть xsd, которая определяет атрибут стиля:

<xs:element name="style">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="tt:metadata" minOccurs="0"/>
        </xs:sequence>
        <xs:attribute ref="xml:id" use="required">
        </xs:attribute>
        <xs:attribute name="style" type="xs:IDREFS">
        </xs:attribute>
        <xs:attribute ref="tts:direction" >
        </xs:attribute>
        <xs:attribute ref="tts:fontFamily" >
        </xs:attribute>
        <xs:attribute ref="tts:fontSize" >
        </xs:attribute>
        <xs:attribute ref="tts:lineHeight" >
        </xs:attribute>
        <xs:attribute ref="tts:textAlign" >
        </xs:attribute>
        <xs:attribute ref="tts:color" >
        </xs:attribute>
        <xs:attribute ref="tts:backgroundColor" >
        </xs:attribute>
        <xs:attribute ref="tts:fontStyle" >
        </xs:attribute>
        <xs:attribute ref="tts:fontWeight" >
        </xs:attribute>
        <xs:attribute ref="tts:textDecoration" >
        </xs:attribute>
        <xs:attribute ref="tts:unicodeBidi" >
        </xs:attribute>
        <xs:attribute ref="tts:padding">
        </xs:attribute>
        <xs:attribute ref="ebutts:multiRowAlign"/>
    </xs:complexType>
</xs:element>

Я ожидаю, что необъявленный атрибут не пройдет проверку.
Мне также интересно, почему добавление пространства имен имеет решающее значение для проверки.

Ответы [ 2 ]

2 голосов
/ 26 июня 2019

Не видя схемы, которую мы не можем знать. Я думаю, что комплексный тип содержащего элемента включает в себя xs:anyAttribute подстановочный знак.

0 голосов
/ 27 июня 2019

Выяснилось, что схема ссылается на элемент, отличный от того, на который, как я думал, ссылается.
Мне понадобилось время, чтобы заметить, что элемент из xml

<tt:style letter-spacing="4px" style="s01" tts:lineHeight="120px" xml:id="1"/>

это не тот же элемент из xsd

<xs:element name="style">...</xs:element>

Элемент tt: style определен где-то еще и действительно содержит элемент <xs:anyAttribute> в одном из множества ссылок xsd.

...