Могу ли я добавить атрибут и ограничение к встроенному типу xsd?

#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. Все мои результаты показали то же самое.