带有枚举和子元素的XML Schema(XSD)元素

时间:2014-07-17 21:21:56

标签: xml xsd schema enumeration

我正在尝试编写用于XML检查的XML Schema(XSD)。有一个元素包含枚举值和子元素。它的格式很奇怪,但是被xml接受。

Can a XML element contain text and child elements at the same time?

我的情况:

<tree>
    <node> enumeration Text (Text only allows "a", "b" and "c")
        <subnode1 attribute1="xx"> optional text1 </subnode1>
    </node1>
</tree>

我正在尝试编写xml架构(XSD)来验证格式。必需元素node1具有带三个受限值的Text。当文本的值等于&#34; c&#34;时,它还将在其中包含一个子节点。

例如,架构将通过以下情况:

<node1>a</node1>

<node1>b</node1>

<node1>c
    <subnode1 attribute1="1">what ever you what</subnode1>
</node1>

然而,它没有通过:

<node1>d</node1>

<node1>c</node1>

因为subnode1是值&#34; c&#34;

的必要条件

如何使用枚举和子元素编写XML Schema元素?

1 个答案:

答案 0 :(得分:1)

不,XSD 1.0不支持此功能。如果元素允许混合内容(即文本和元素子元素),则无法约束文本。

在XSD 1.1中,您可以使用断言定义约束。

XSD有点家长式:它试图支持它认为人们应该设计的那种XML的验证。它需要一个视图(就像XSLT一样),混合内容可用于启用标记的叙述文本,例如某些单词被标记为粗体或斜体的段落。你的结构不适合这种模式:&#34;批准&#34;设计XML结构的方法是将枚举值放在属性中。 (即使这样,您还需要XSD 1.1条件类型赋值,以使元素的内容类型取决于其属性的值)。