簡體   English   中英

XSD 子元素的數據類型取決於父元素的屬性

[英]XSD data type of child element depending on parent element's attribute

我有一些報告如下所示:

<report>
  <dataset datatype="integer">
     <data timestamp="1970-01-01T00:00:00+01:00">25</data>
     <data timestamp="1970-01-01T00:01:00+01:00">25</data>
     <data timestamp="1970-01-01T00:02:00+01:00">25</data>
     <data timestamp="1970-01-01T00:03:00+01:00">25</data>
  </dataset>
  <dataset datatype="string">
     <data timestamp="1970-01-01T00:00:00+01:00">foo</data>
     <data timestamp="1970-01-01T00:01:00+01:00">bar</data>
     <data timestamp="1970-01-01T00:02:00+01:00">baz</data>
     <data timestamp="1970-01-01T00:03:00+01:00">foobar</data>
  </dataset>
</report>

我需要一個 xml 模式定義來描述上面的 XML。 到目前為止沒問題。 我無法解決的問題是如何做如下: data元素的類型需要取決於data set元素的數據datatype屬性。

數據類型可以是:字符串、浮點數或 integer。例如, datatype屬性設置為“整數”,所有子“數據”元素都應限制為“xs:integer”類型。

這是我的 XSD 除了類型限制:

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

    <xs:simpleType name="DataTypes">
        <xs:restriction base="xs:string">
            <xs:enumeration value="string"/>
            <xs:enumeration value="integer"/>
            <xs:enumeration value="float"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:complexType name="Data">
        <xs:simpleContent>
            <xs:extension base="xs:anySimpleType">
                <xs:attribute name="timestamp" type="xs:dateTime" use="required" />
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>

    <xs:complexType name="Dataset">
        <xs:sequence>
            <xs:element name="data" type="Data" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="datatype" type="DataTypes" use="required" />
    </xs:complexType>

    <xs:element name="report">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="dataset" type="Dataset" minOccurs="1" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

我感謝每一個有用的想法!

數據元素的類型需要取決於數據集元素的數據類型屬性。

這是對添加到 XSD 1.1 中的“條件類型歸屬”功能的非常精確的描述。 它也被稱為“類型替代”。 請注意,並非所有 XSD 處理器都支持 XSD 1.1。

您可以在XSD 1.1 xs:alternative/xs:assert中找到一些示例

這不能在 XSD 1.0 中完成。

暫無
暫無

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

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