2

XMLファイルのXMLスキーマを書きたい:

<root>
    <rate>10</rate>
    <rate></rate>
    <rate>15</rate>
    ...
</root>

<rate> minOccursは1で、maxOccursは無制限です。<rate>はxs:integerタイプである必要がありますが、<rate> </ rate>はどうすればよいですか?<rate xsi:nil ="true"/>とは書きたくありません。

4

3 に答える 3

4

<rate>コンテンツのある要素とコンテンツのない要素ではなく、コンテンツとして整数値または何も受け入れない要素をxs:integer1つだけ宣言できます。<rate>

<xs:union>実際には、これは次の要素を使用して実行できます。

<xs:simpleType name="emptyString">
  <xs:restriction base="xs:string">
    <xs:maxLength value="0"/>
  </xs:restriction>
</xs:simpleType>

<xs:element name="rate">
    <xs:simpleType>
        <xs:union memberTypes="xs:integer emptyString"/>
    </xs:simpleType>
</xs:element>

これは、、、(またはその他の値)を受け入れますが、は受け入れませ<rate/>ん。<rate></rate><rate>42</rate>xs:integer<rate>Hello, World!</rate>

これを機能させるには、スキーマ内のプレフィックスなしの名前空間をターゲット名前空間と同じに設定する必要があります。そうemptyStringしないと、memberTypes属性が見つかりません。(もちろん、代わりにターゲット名前空間のプレフィックスを定義してそれを使用することもできます。)

完全なスキーマの書き方や使い方maxOccursなどの説明は省略しました。あなたの質問から、あなたはすでにそれを行う方法を知っていると思います。これについてさらに情報が必要な場合はお知らせください。

于 2012-06-28T12:12:43.780 に答える
1

ORMapperのアプローチの代わりに、要素の型をmaxLength=1の整数のリストとして宣言することもできます。

<xs:element name="rate">
    <xs:simpleType>
       <xs:restriction base="listOfInteger">
          <xs:maxLength value="1"/>
       </xs:restriction>
    </xs:simpleType>
</xs:element>

<xs:simpleType name="listOfInteger">
  <xs:list itemType="xs:integer"/>
</xs:simpleType>

スキーマ対応のXQueryおよびXSLTアプリケーションで処理する方が簡単なので、(整数、長さゼロの文字列)の和集合を使用するよりもこのアプローチを好む傾向があります。JAXBを使用したデータバインディングを使用している場合にも、うまくいく可能性があります。わかりません。

于 2012-06-28T15:51:32.993 に答える
0

使用する予定のXMLスキーマを記述します。C ++コードジェネレーターを使用するので、これにより作業がはるかに簡単になります(私は、EclipseLink JAXB(MOXy)のリーダーなので、Java側でこれを使用した経験があります)。

<xs:element name="root">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="rate" type="xs:integer" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

無効なデータを受け取ることが予想されるため、次のオプションがあります。

  1. オブジェクトからXMLへのソリューションは、この無効なデータを必要な方法で自動的に処理します。たとえば、JAXBは不良データに耐えるように設計されています。
  2. オブジェクトからXMLへのソリューションは、問題を解決するために活用できる不良データを処理するメカニズムを提供します。たとえば、JAXBはValidationEventHandlerメカニズムを提供します。
于 2012-06-28T16:54:42.380 に答える