簡體   English   中英

我如何在xml架構中對此進行建模?

[英]how can I model this in a xml schema?

我正在為來自外部系統的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'的有效值。

任何提示?

謝謝

xs:double不能將空sting作為值。 如果要將此類型標記為“null”,則可以使用xsi:nil =“true”來指示這是一個“空”雙:

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

為了允許這種情況,請在架構中使用nillable =“true”

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

您需要在xml實例中包含對XML Schema實例命名空間的引用。

<MyRoot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ... >
...
</MyRoot>

您可以創建一個由兩種簡單類型組合而成的特定類型。 例如,下面的“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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM