【发布时间】:2021-09-22 20:04:25
【问题描述】:
我对 XSD 很陌生,但在尝试之前,我遇到了一个对我来说似乎很简单的问题。
我想为以下 XML 编写 XSD:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<properties>
<double name="Value1">111.111</double>
<double name="Value2">222.222</double>
</properties>
我希望这个 XSD 非常严格,因此 Value1 和 Value2 是固定的,唯一的“免费”值是 111.111 和 222.222。
我还想强制 Value1 和 Value2 都出现在 XML 文件中(尽管不一定按此顺序)
所以我写了这个 XSD:
<?xml version = "1.0"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="properties">
<xs:complexType>
<xs:sequence>
<xs:element name="double">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute name="name" type="xs:string" fixed="Value1" use = "required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="double">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute name="name" type="xs:string" fixed="Value2" use = "required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
不幸的是,我的 XML 验证器出现以下错误:
Multiple Elements With Name 'double', With Different Types, Appear In The Model Group.
我知道这种问题是已知的,但我找不到任何方便的答案,或者我根本不明白!?而且我不能使用 XSD 1.1。
非常感谢您的帮助!
【问题讨论】:
-
我认为应该可以为两个
double元素定义一个单一类型,将name属性限制为两个值Value1和Value2的单一类型枚举。但是,这并不能确保第一个double具有name="Value1"和第二个Value2,您只能将值的唯一性定义为 ID。 -
您想要恰好有两个
double元素吗?还是更多?如果正好有两个,则在name属性上设置一个 ID/唯一性约束,该属性已被限制为Value1或Value2。 -
是的马丁,这正是我想做的:正好两个双元素。