XSD 条件元素
XSD conditional element
我正在学习中XSD。我想将我的 DTD 转换为 XSD,以便利用 XSD 的可能性。我 运行 遇到以下问题:
我要转换的DTD读取(部分):
<!ELEMENT author ((first|(first, middle))?, last, suffix?)>
这里的想法是,只有在有 first
元素(即,如果没有名字,则没有中间名姓名)。
我通过 Oxygen XML 编辑器将此 DTD 转换为 XSD,它给出了以下内容:
<xs:element name="author">
<xs:complexType>
<xs:sequence>
<xs:choice minOccurs="0">
<xs:element ref="first"/>
<xs:sequence>
<xs:element ref="first"/>
<xs:element ref="middle"/>
</xs:sequence>
</xs:choice>
<xs:element ref="last"/>
<xs:element minOccurs="0" ref="suffix"/>
</xs:sequence>
</xs:complexType>
</xs:element>
但是 Oxygen (Xerces) 使用的验证引擎抛出以下关于这部分的错误:
first and first (or elements from their substitution group) violate "Unique Particle Attribution".
所以我的问题是:在 XSD 中表达我的 DTD 的正确方法是什么?如何在不违反“唯一粒子属性”的情况下表达我想对 middle
元素施加的约束?
在此先感谢您的帮助!
像这样重写author
的内容模型,
<xs:element ref="author">
<xs:complexType>
<xs:sequence>
<xs:sequence minOccurs="0">
<xs:element ref="first"/>
<xs:element ref="middle" minOccurs="0"/>
</xs:sequence>
<xs:element ref="last"/>
<xs:element ref="suffix" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
将在不违反唯一粒子属性的情况下表达与 DTD 相同的约束。