3

これで、次のような 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>

2 つの要素 (BAR1 と BAR2 など) を一度に使用するように変更したいと考えています。私はそれらの1つにそれを使用する方法を知っています、

<xs:element name="BAR1">
   <xs:simpleType>
       <!-- my type definition here -->
   </xs:simpleType>
</xs:element>

しかし、2 つ (またはそれ以上) の要素で使用したいのですが、同じ単純型定義をどこにでもコピーせずにこれを行う方法がわかりません。グーグルから、名前で型を宣言する必要があるようです

しかし、この宣言をどこに置くべきかわかりません。xs:complexType と同じレベルと他のいくつかのレベルに配置しようとしましたが、スキーマ バリデータによって拒否されました。この宣言をどこに置くべきか考えていますか? 何か案が?

4

2 に答える 2

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>
于 2012-10-31T02:42:09.890 に答える
1

グローバルを定義し、type 属性を使用してタイプを指定します。

  <xs:simpleType name="test">
    <xs:annotation>
      <xs:documentation>
        Defines a string that is between 1 and 300 chars
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:minLength value="1" />
      <xs:maxLength value="300" />
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="foo">
    <xs:complexType>
      <xs:attribute type="test" name="bar"/>
    </xs:complexType>   
  </xs:element>
于 2012-10-31T02:46:06.660 に答える