【发布时间】:2021-02-13 23:17:32
【问题描述】:
我正在学习 XSD。我想将我的 DTD 转换为 XSD,以便利用 XSD 的可能性。我遇到了以下问题:
我要转换的 DTD 读取(部分):
<!ELEMENT author ((first|(first, middle))?, last, suffix?)>
这里的想法是,只有当存在 first 元素(即,如果没有名字,就没有中间名)时,才可能存在(但不一定是)middle 元素。
我通过 Oxygen XML Editor 将此 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元素施加的约束如何在不违反“唯一粒子属性”的情况下表达?
提前感谢您的帮助!
【问题讨论】:
标签: xml xsd xsd-validation dtd xml-validation