Пользовательские атрибуты в xsd-схеме - PullRequest
6 голосов
/ 21 июня 2010

Я пытаюсь сделать простой 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>

Где я хочу получить информацию о том, является ли элемент «списочным» или нет в схеме (обратите внимание, что файл .xml не имеет никакой информации или подсказки о том, является ли элемент списочным или нет, атрибут listable является лишь способом организовать элементы в редакторе).

Это не должно быть его собственным атрибутом. Если есть атрибут misc или что-то, с чем я могу поиграть, это было бы хорошо. Проблема только в том, что приведенная выше схема не проверяется (атрибут listable в этом контексте не поддерживается.)

Есть ли способ сохранить такую ​​информацию в схеме?

Похоже, можно было бы создать новое пространство имен, но я не знаю, как это пространство имен должно быть объявлено, чтобы любой элемент мог иметь специальный атрибут в xsd (я бы лучше не связывался с файлом xml для этот). И кажется немного излишним создавать новое пространство имен только для этого?

Или я полностью ошибаюсь?

1 Ответ

6 голосов
/ 21 июня 2010

Эта информация должна находиться в собственном пространстве имен. Лучшее место для его хранения - аннотация к атрибуту. Вы можете прикрепить аннотацию к любому элементу схемы, и они могут содержать элементы 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...