8

私はそのようなxsdタイプを持っています

<xsd:simpleType name="carsEnum">
    <xsd:restriction base="xsd:string">
        <xsd:enumeration value="Seat"/>
        <xsd:enumeration value="Opel"/>
    </xsd:restriction>
</xsd:simpleType>

今、私はそれをそのように使うことができます-<xsd:attribute name="carModel" type="carsEnum"/>

別の文字列を使用するようにcarEnumを再構築するにはどうすればよいですか?

例として-

< ... carModel="Seat"/>
< ... carModel="Some string"/>
< ... carModel="Opel"/>

当然のことながら、carsEnum型を通常の文字列として作成できますが、ツールのヒントが表示されるため、IDEIdeaでこのような構造を使用する方が快適です。

4

2 に答える 2

10

私が理解している質問を要約すると、要素車の可能な値のリストを維持し、その境界リストの外側に表示される値も受け入れたいということです。これは、を使用してXSDで実現できますUNION。以下の例で説明しました。

サンプルXML:

<?xml version="1.0" encoding="utf-8"?>
<cars>ssd</cars>

XSD:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="cars" type="carsType"/>
  <xs:simpleType name="carsType">
    <xs:union memberTypes="carsEnum carsAnyString"/>
  </xs:simpleType>
  <xs:simpleType name="carsEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Seat"/>
      <xs:enumeration value="Opel"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="carsAnyString">
    <xs:restriction base="xs:string"/>
  </xs:simpleType>
</xs:schema>

上記のXSDでは、CARの複数の定義を使用しています。1つは列挙型リストとして、もう1つは任意の文字列として使用しています。これら2つを組み合わせたUNIONタイプを定義すると、type自動車用になります。

したがって<cars、Seat、Opel、anyOtherCar、AnyString2のような値を持つことができます。

また、の値を制御する方法についても説明しますANY STRING。上記のXSDは、特別な文字や数字を意味する任意の文字列を受け入れることができます。restriction patternアルファ文字のみに追加することで、これを制限できます。以下はXSDコードです。

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="cars" type="carsType"/>
  <xs:simpleType name="carsType">
    <xs:union memberTypes="carsEnum carsAnyAlphaString"/>
  </xs:simpleType>
  <xs:simpleType name="carsEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Seat"/>
      <xs:enumeration value="Opel"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="carsAnyAlphaString">
    <xs:restriction base="xs:string">
      <xs:pattern value="[A-Za-z]*"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

したがって、可能な値はSeat, Opel, "Any string but no Number", "Any string but no special char"

交換

      `<xs:pattern value="[A-Za-z]*"/>`

      <xs:pattern value="[A-Za-z]+"/>

null文字列は許可されません。これは、要素を再定義する方法です。列挙リストに固執するだけではありません。

これで、列挙リストもあるパターンができました。それが役に立てば幸い。

于 2013-01-16T11:04:51.337 に答える
1

このような他の要素を追加するだけです

<xsd:simpleType name="carsEnum">
    <xsd:restriction base="xsd:string">
        <xsd:enumeration value="Seat"/>
        <xsd:enumeration value="Opel"/>
 <xsd:enumeration value="SeatNew"/>
 <xsd:enumeration value="OpelNew"/>
    </xsd:restriction>
</xsd:simpleType>

その結果、carModelにSeatNewとOpelNewを割り当てることができます。

ただし、Java列挙型に変換されるため、で指定されていない限り、carModelに任意の値を割り当てることはできません。

于 2013-01-16T08:33:00.590 に答える