#schema #xsd #xsd-validation
#схема #xsd #xsd-проверка
Вопрос:
Мне нужно указать ограничение и атрибут для типа. Я знаю, что это можно сделать таким образом
<xs:simpleType name="Name">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="15"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="MyCustomeName">
<xs:simpleContent>
<xs:extension base="mc:Name">
<xs:attribute name="MyTypeOfName" fixed="MCN"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
Есть ли способ сделать все в одной строке «встроенным»
Я могу добавить встроенное ограничение, но тогда я не могу добавить атрибут, как в
<xs:simpleType name="MyCustomName">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="15"/>
<xs:attribute name="MyTypeOfName" fixed="MCN"/> --> This gives an error
</xs:restriction>
</xs:simpleType>
Причина, по которой я хочу это сделать … в том, что мы предоставляем XSD третьей стороне, и у них есть проблемы с наследованием типов, поэтому я хочу сделать все встроенным.
Ответ №1:
Невозможно объединить ограничение и расширение в один блок в XML-схеме. Решение, которое вы показываете с помощью <simpleType>
и <complexType>
IMHO, — это способ сделать это.
Если вы не хотите определять <complexType>
, вы можете определить непосредственно <element>
, но это в основном то же самое, что вы делаете, без возможности повторного использования вашего <complexType>
:
<xs:simpleType name="Name">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="15"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="MyCustomeName">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="Name">
<xs:attribute name="MyTypeOfName" fixed="MCN"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
Надеюсь, это поможет,
Комментарии:
1. Спасибо albciff. Все мои результаты показали то же самое.