1

外部システムからの xml のスキーマを作成しています。このタイプのモデル化に問題があります:

<main>
...
  <Foo TYPE="Numeric"/>
  <Bar TYPE="Numeric">12.0</Bar>
...
</main>

double を拡張する型を作成しました。

<xs:complexType name="myNumeric">
  <xs:simpleContent>
    <xs:extension base="xs:double">
      <xs:attribute name="TYPE" type="xs:string"/>
    </xs:extension>
  </xs:simpleContent>
</xs:complexType>

....

<xs:element name="Foo" type="myNumeric" />
<xs:element name="Bar" type="myNumeric" />

ただし、これでは十分ではありません。スキーマを検証しようとすると、「'' は 'double' の有効な値ではありません」というエラーが表示されました。

ヒントはありますか?

ありがとう

4

2 に答える 2

2

xs:double は、値として空の文字列を持つことはできません。この型を「null」としてマークしたい場合は、 xsi:nil="true" を使用して、これが「空」の double であることを示すことができます。

<Foo TYPE="Numeric" xsi:nil="true" />

これを許可するには、スキーマで nillable="true" を使用します

<xs:element name="Foo" type="myNumeric" nillable="true" />

xml インスタンスに XML スキーマ インスタンスの名前空間への参照を含める必要があります。

<MyRoot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ... >
...
</MyRoot>
于 2011-11-21T10:09:16.363 に答える
2

2 つの単純型の和集合である特定の型を作成できます。たとえば、以下の「myType」はあなたの質問に答えているようです:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
    xmlns:my="myNamespace" targetNamespace="myNamespace">
    <xs:simpleType name="myType">
        <xs:union memberTypes="xs:double my:empty"/>
    </xs:simpleType>
    <xs:simpleType name="empty">
        <xs:restriction base="xs:string">
            <xs:length value="0"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>
于 2011-11-21T14:32:34.920 に答える