Есть ли причина, по которой объявление локального атрибута в xsd-файле не будет проверять соответствующий атрибут в xml-файле? - PullRequest
0 голосов
/ 25 июня 2019

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

У меня есть XML-файл, который проходит проверку.
Я добавил один атрибут к одному типу элемента. имя атрибута - letterpacing, его значение должно быть типа string.
Я попытался определить атрибут локально для элемента в xsd, с именем и типом, которые соответствуют имени и значению, которое появляется в xml, но без пространства имен (которое я не хочу включать, если это возможно) и без ссылка на атрибут, определенный в другом месте.
Все остальные элементы и атрибуты, определенные в xsd, проходят проверку, даже другие локальные атрибуты, определенные в других элементах, без пространства имен или ссылки.
Я не смог найти причину, по которой атрибут не был бы поддержан, но я, вероятно, что-то упустил.

XSD:

<xs:schema ...>
    ...
    <xs:element name="style">
        ...
        <xs:attribute name="letterspacing" type="xs:string" />
    </xs:element>
</xs:schema>

XML:

<tt:style tts:backgroundColor="#aaaaaaff" xml:id="styPar0" letterspacing="8px"/>

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

Я использую XML-инструменты notepade ++ для проверки моего xsd-файла.
Я ожидаю, что определение нового атрибута в xsd проверит новый атрибут в xml, но я получаю «ОШИБКА: Элемент« {http://www.w3.org/ns/ttml}style', атрибут «letterspacing»: атрибут «letterspacing» не разрешен ».

1 Ответ

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

Может быть, в вашей схеме определено attributeFormDefault="qualified"? Если это так, это означает, что атрибут letterspacing должен иметь значение qualfieid с префиксом tts, аналогично атрибуту backgroundColor.

Если вы хотите, чтобы он был без префикса, вы можете попробовать добавить form="unqualfied" в объявление атрибута, которое переопределяет attributeFormDefault:

    <xs:element name="style">
        ...
        <xs:attribute name="letterspacing" type="xs:string" form="unqualified" />
    </xs:element>
...