【问题标题】:XML Schema - Element attribute with different datatypes (need a simple typ definition)XML Schema - 具有不同数据类型的元素属性(需要简单的类型定义)
【发布时间】:2019-08-05 23:32:51
【问题描述】:

我有一个关于 XML-Schema 的问题。 我想检查我的 XML 元素属性是否具有以下外观,并希望使用只有一个属性的空 XML 元素来执行此操作。


<OtherElement Id="OE-1">
 ...
</OtherElement>
<MyElement MyAttribute="OE-1 10.0 2.0 12.3 string"/>

MyAttribute 需要一个像这样的简单类型。

MyAttribute = "IDREF DOUBLE DOUBLE DOUBLE"

这对于属性是否可行,或者是否有必要创建一个复杂的类型并使用带有内容的 XML 元素?

我希望这个 Schema 可以工作,但它没有。

<simpleType name="SampleTypeUnion">
 <union memberTypes="test:BookRef test:DoubListRest"/>
</simpleType>

<simpleType name="BookRef">
 <restriction base="IDREF"/>
</simpleType>

<simpleType name="DoubListRest">
 <restriction base="test:DoubList">
  <length value="3"/>
 </restriction>
</simpleType>

<simpleType name="DoubList">
 <list itemType="test:Doub"/>
</simpleType>

<simpleType name="Doub">
 <restriction base="double"/>
</simpleType>

非常感谢您的帮助!

【问题讨论】:

    标签: xml schema


    【解决方案1】:

    您可以使用 XSD 1.1 做到这一点,前提是您只关心验证,而不关心数据类型(尽管我完全不确定这是一个好的设计)。

    您可以将类型定义为xs:TOKEN 的列表,其长度方面限制出现的标记数量,然后您可以使用形式的断言来限制单个标记的类型

    <xs:assert test="$value[3] castable as xs:double"/>
    

    【讨论】:

    • 凯先生您好,感谢您的帮助。是否有支持 XSD 1.1 的开源 XSD 编辑器?
    • 我不知道。我使用氧气。
    【解决方案2】:

    您正在寻找的是 XML 模式列表元素。 在这里查看: [https://www.w3schools.com/xml/el_list.asp]1 和这里: http://www.datypic.com/books/defxmlschema1/chapter11.html

    【讨论】:

    • OP 似乎知道xs:list 元素,但想要一种方法将不同的约束应用于列表中的不同项目。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 2017-02-07
    相关资源
    最近更新 更多