web-dev-qa-db-ja.com

属性のXSD制限

私はこれについて多くのことを検索したと思いますが、それでも行けません。

どんな助けにも感謝します。

空のコンテンツを持つ要素の属性を制限しようとしています。 「色」には、3桁またはminLength = 3およびmaxLength = 3のみを保持するという制限が必要です。内容はありません。

<?xml version="1.0" encoding="utf-8"?>
  <items xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:noNamespaceSchemaLocation="">
  <product id="" name="">
    <article id="1001">
      <umbrella color="100"/>
      <umbrella color="101"/>
    </article>
    <article id="1002">
      <umbrella color="110"/>
    </article>
  </product>
</items>

編集:simpleTypeでXSD制限を行う方法を知っています。しかし、それをComplexTypeで1つのエンティティに組み合わせる方法はありません。

より詳細な(または完全な)ソリューションを提供していただければ幸いです。

ところで、「色」はxs:integerに限定されません。実際にはxs:stringです。

20
ZiggyStardust

次のような属性を定義できます。この例では、パターンを使用して値を制限していますが、より適切であれば、minとmaxを使用することもできます。

<xs:attribute name="color">
    <xs:simpleType>
        <xs:restriction base="xs:integer">
            <xs:pattern value="[0-9][0-9][0-9]"/>
        </xs:restriction>
    </xs:simpleType>
</xs:attribute>

次に、要素定義でrefを使用して、定義された属性を参照します。

<xs:attribute ref="color"/>

更新(OPからのコメントに応じて):

スキーマ全体は次のようになります。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:attribute name="color">
        <xs:simpleType>
            <xs:restriction base="xs:integer">
                <xs:pattern value="[0-9][0-9][0-9]"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:attribute>

    <xs:attribute name="id">
        <xs:simpleType>
            <xs:restriction base="xs:integer">
                <xs:pattern value="[0-9][0-9][0-9][0-9]"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:attribute>

    <xs:attribute name="name" type="xs:string"/>

    <xs:complexType name="article_type">
        <xs:attribute ref="color" use="required"/>
    </xs:complexType>

    <xs:element name="article">
        <xs:complexType>
            <xs:choice maxOccurs="unbounded" minOccurs="0">
                <xs:element name="umbrella" type="article_type"/>
            </xs:choice>
            <xs:attribute ref="id" use="required"/>
        </xs:complexType>
    </xs:element>

    <xs:element name="product">
        <xs:complexType>
            <xs:choice maxOccurs="unbounded" minOccurs="0">
                <xs:element ref="article"/>
            </xs:choice>
            <xs:attribute ref="id" use="required"/>
            <xs:attribute ref="name"/>
        </xs:complexType>
    </xs:element>

    <xs:element name="items">
        <xs:complexType>
            <xs:choice maxOccurs="unbounded" minOccurs="0">
                <xs:element ref="product"/>
            </xs:choice>
        </xs:complexType>
    </xs:element>

</xs:schema>
28
David

以下はうまくいくはずです

 <element name="umbrella" nillable="true" type="umbrellaType">
<complexType name="umbrellaType">
   <attribute name="color">
     <simpleType>
       <restriction base="int">
        <minExclusive value="99"></minExclusive>
        <maxInclusive value="999"></maxInclusive>
       </restriction>
     </simpleType>
   </attribute>
</complexType>
1
Baski