Я пытаюсь сделать простой XML-редактор для некоторых основных, но определенных потребностей, вещь, что я не уверен, как обработать, состоит в том, что я хочу смочь иметь собственные атрибуты (или что-то) в самой xsd-схеме.
Что-то вроде этого - то, что я имел в виду:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Book">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Author" type="xsd:string" listable="1" />
<xsd:element name="Pages" type="xsd:int" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Где я хочу информацию о том, 'listable' ли элемент, или не в схеме (обратите внимание, что .xml файл не имеет никакой информации или подсказки относительно того, listable ли элемент или нет, listable атрибут является просто способом организовать элементы в редакторе).
Это не должен быть свой собственный атрибут. Если существует атрибут misc или что-то, что я могу играть с этим, был бы прекрасен. Проблема состоит просто в том, который схема выше не проверяет ('listable' атрибут не поддерживается в этом контексте.)
Существует ли способ сохранить этот вид информации в схеме?
Кажется, что было бы возможно создать новое пространство имен, но я не знаю, как то пространство имен должно быть объявлено так, чтобы любой элемент мог иметь специальный атрибут в xsd (я постарался бы не смешивать с XML-файлом для этого). И это кажется небольшим излишеством для создания нового пространства имен только для этого?
Или я иду об этом неправильным путем полностью?
Эта информация должна находиться в собственном пространстве имен. Лучше всего хранить его в аннотации к атрибуту. Вы можете прикрепить аннотацию к любому элементу схемы, и они могут содержать элементы xsd: documentation, предназначенные для удобочитаемой документации, и xsd: appinfo, предназначенные для информации, обрабатываемой компьютером. Итак, ваш пример будет выглядеть так:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:foo="http://www.example.org/bar">
<xsd:element name="Book">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Author" type="xsd:string" >
<xsd:annotation>
<xsd:appinfo>
<foo:listable value="true"/>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="Pages" type="xsd:int" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>