Можно ли использовать xsd: redefine для расширения, а не для ограничения? - PullRequest
1 голос
/ 07 октября 2011

У меня есть XML-схема (XSD), которую я хочу использовать для проверки данных XML, но одна очень специфическая вещь в отношении данных XML не совместима.Я хочу создать альтернативный XSD для успешной проверки XML.Более конкретно, я хочу расширить определение типа, чтобы разрешить значение, не допускаемое исходным XSD.Нецелесообразно изменять исходный XSD.

Вот исходное определение из исходного XSD:

<simpleType name="fooType">
  <restriction base="token">
    <pattern value="[a-z]+"/>
    <enumeration value="foo"/>
  </restriction>
</simpleType>

Я хочу разрешить значение "123" также для объекта, который использует этоопределение типа.Итак, я попробовал это:

<redefine schemaLocation="original.xsd">
  <simpleType name="fooType">
    <extension base="orig:fooType">
      <enumeration value="123"/>
    </extension>
  </simpleType>
</redefine>

Я признаю, что я просто наплеватель, я не знаю XSD.Но прежде чем читать стандарт, я хочу знать, возможно ли это вообще?Все (и я имею в виду все ) примеры, которые я мог найти для xsd: переопределить, были ограничивают возможные значения, а не расширяют их.

А если не использовать xsd: redefine, то как мне это сделать?

Редактировать: Связанные, но неинформативные: Расширение XSD-файлов

1 Ответ

2 голосов
/ 09 октября 2011

Содержимое простого типа может быть только ограничением, списком или объединением. Поскольку при переопределении типа вы должны ссылаться как базовый тип на тот, который вы переопределяете, вы застреваете; ограничение - единственное, что вы можете иметь.

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

Еще одно замечание: наличие шаблона и перечисления является своего рода «бесполезным»; в вашем случае единственное значение, которое вы можете иметь, это "foo".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...