XSD:Как переопределить тип данных простого типа, например.из xs:string в xs:integer
-
21-09-2019 - |
Вопрос
Я пытаюсь расширить и адаптировать внешнюю схему xsd (стандарта fixml).Мне нужно изменить тип данных некоторых элементов, не касаясь исходной схемы, но переопределив ее;но я нахожу это чрезвычайно громоздким.
Что существует:
поля-base.xsd
<xs:simpleType name="LastUpdateTime_t">
<xs:restriction base="UTCTimestamp">
<xs:simpleType>
то, чем я хочу, чтобы это стало:
<xs:simpleType name="LastUpdateTime_t">
<xs:restriction base="xs:string">
<xs:simpleType>
То, что я пробовал (но потерпел неудачу) :
<xs:redefine schemaLocation="fields-base.xsd">
<xs:simpleType name="LastUpdateTime_t">
<xs:restriction base="xs:string" />
</xs:simpleType>
</xs:redefine>
Книги и сеть, похоже, тоже не слишком помогли, поэтому я начинаю сомневаться, возможно ли это вообще теоретически.
Решение
Насколько я могу судить, это невозможно.
Единственное переопределение, которое я мог выполнить в XMLSpy, было:
<xs:redefine schemaLocation="fields-base.xsd">
<xs:simpleType name="LastUpdateTime_t">
<xs:restriction base="LastUpdateTime_t" />
</xs:simpleType>
</xs:redefine>
То есть новое ограничение должно основываться на базовом ограничении.
Возможно, XMLSpy ошибается на этот счет.
Эта несколько загадочная цитата из Определение XML-схемы W3C:
Внутри [дочерних элементов] каждый simpleType должен иметь среди своих [дочерних элементов] и каждый complexType должен иметь ограничение или расширение среди своих grand-[дочерних элементов] · фактическое значение · чей базовый [атрибут] должен совпадать с · фактическим значением · его собственного атрибута name плюс целевого пространства имен;
возможно, речь идет об этом (это та часть спецификации, на которую ссылается XMLSpy для этой ошибки).
Единственным действительно хорошим примером переопределения простых типов, который я смог найти, был здесь.В этом примере переопределение применяется только для перечислений.