Я разрабатываю файл XSD для проверки своих XML-файлов, и спецификация anyAttribute работает не так, как ожидалось, по крайней мере, так, как сообщает документация.
Я искал похожие вопросы или проблемы на форуме, но не нашел дубликатов.
Я хочу расширить указанные атрибуты для элемента menu с помощью xs:anyAttribute, но на этапе проверки любые другие неуказанные атрибуты возвращают исключение.
Это моя схема:
<xs:schema attributeFormDefault = "unqualified" elementFormDefault = "qualified" xmlns:xs = "http://www.w3.org/2001/XMLSchema"
xmlns = "https://www.github.com/overit-official/schemas" targetNamespace = "https://www.github.com/overit-official/schemas">
<xs:element name = "menu">
<xs:complexType>
<xs:sequence>
<xs:any minOccurs = "0" maxOccurs = 'unbounded'></xs:any>
</xs:sequence>
<xs:attribute name = "layer" type = "xs:string" use = "required"/>
<xs:attribute name = "label" type = "xs:string"/>
<xs:attribute name = "icon" type = "xs:string"/>
<xs:attribute name = "priority" type = "xs:string"/>
<xs:anyAttribute/>
</xs:complexType>
</xs:element>
</xs:schema>
Вот фрагмент моего XML:
<?xml version = "1.0" encoding = "UTF-8"?>
<menu xmlns = "https://www.github.com/overit-official/schemas"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "https://www.github.com/overit-official/schemas https://www.github.com/overit-official/schemas/geocall-menu.xsd"
layer = ""
label = "Main menu"
icon = "../r/std/icons/cartelle64.png"
mycustom = "foo"
priority = "3">
...
</menu>
Когда я проверяю XML, я получаю эту ошибку:
cvc-complex-type.3.2.2: Attribute 'mycustom' is not allowed to appear in element 'menu'.
Что мне не хватает?





Значением по умолчанию для атрибута processContents элемента xs:anyAttribute является strict, что требует, чтобы атрибут был определен в XSD для прохождения проверки.
Добавьте processContents = "skip", чтобы разрешить даже неопределенные атрибуты.
Спасибо! Отлично решает мою проблему!