在哪里声明一个simpleType以便可以在同一XSD的多个元素中使用它?

Lou*_*hys 3 xml xsd simpletype

现在,我有一个XSD文件(例如FOO_SCHEMA.xsd),看起来像这样:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="FOO">
        <xs:annotation>
            <xs:documentation>Comment</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="BAR1" type="xs:string" />
                <xs:element name="BAR2" type="xs:string" />
                <xs:element name="BAR3" type="xs:string" />
                <xs:element name="BAR4" type="xs:string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

我想修改两个元素(例如BAR1和BAR2)以使用一次。我知道如何为其中之一使用它,

<xs:element name="BAR1">
   <xs:simpleType>
       <!-- my type definition here -->
   </xs:simpleType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)

但是我想在两个(也许更多)元素中使用它,而且我不确定如何在不复制相同的简单类型定义的情况下如何做到这一点。从谷歌搜索,似乎我需要用一个名称声明类型

但我不知道该声明放在何处。我尝试将它放在与xs:complexType和其他几个级别相同的级别中,但是被架构验证器拒绝。知道在哪里放置此声明吗?任何的想法?

Pet*_*dea 5

XSD文件中的所有可引用组件都必须直接放置在xs:schema元素下面。换句话说,您的全局简单类型声明必须是FOO元素的同级元素。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="FOO">
        <xs:annotation>
            <xs:documentation>Comment</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="BAR1" type="BAR" />
                <xs:element name="BAR2" type="BAR" />
                <xs:element name="BAR3" type="xs:string" />
                <xs:element name="BAR4" type="xs:string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:simpleType name="BAR">
        <xs:restriction base="xs:string">
            <xs:pattern value="BAR"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)