我想为以下 XML 构造定义一个模式:
<object>System<S/>Design<S/>Part</object>
元素“对象”应填充内容列表作为枚举值(系统、设计、部分),其中可能包含空格 - 这就是我不能使用空格分隔列表的原因。作为分隔符,我使用元素。
但是所有可以父简单内容的 xsd 元素都不会成为父元素,反之亦然。有没有办法解决它?
答案是否定的——除非您迁移到 XSD 1.1 并使用断言。
在 XSD 1.0 中,无法限制出现在混合内容元素的文本节点中的文本。这是因为您没有按照设计使用的方式使用 XML(在这种结构上使用 XPath/XSLT 也会遇到问题)。
在 XSD 1.1 中,您可以对“对象”的声明进行断言,例如
test="text() 中的每个 $s 都满足 $s = ('System', 'Design', 'Part')
解决它的最简单方法是使用稍微不同的 XML 结构,例如:
<object>
<item>System</item>
<item>Design</item>
<item>Part</item>
</object>
这允许单个项目值根据需要包含空格,并且可以很容易地使用 XSD 中的枚举列表来约束合法值。它还更直接地展示了数据的结构:您正在使用某物或其他物的列表来描述对象(我之所以这么称呼它item
是因为我不知道它们实际上是什么——在你的 XML!)。列表中的每一个东西都是你的问题概念模型中的一个不同的对象,如果每个都由一个不同的 XML 对象(这里是一个不同的实例)表示,那么你和你的 XML 工具的生活都会更好元素类型item
)。