我可以在内联的xsd类型中添加属性和限制吗?

时间:2014-07-01 15:18:54

标签: schema xsd xsd-validation

我需要在类型上暗示限制和属性。我知道可以这样做

<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 个答案:

答案 0 :(得分:1)

无法将限制和扩展合并到XML架构中的一个块中。您使用<simpleType><complexType>恕我直言显示的解决方案是这样做的。

如果您不想定义<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>

希望得到这个帮助,