有没有办法为元素分隔列表定义XSD

时间:2012-08-16 15:05:43

标签: xml xsd separator xmllist

我想为以下XML构造定义一个架构:

<object>System<S/>Design<S/>Part</object>

其中元素“object”应该填充内容列表作为枚举值(系统,设计,部分),这可能包含空格 - 这就是为什么我不能使用以空格分隔的列表。作为分隔符我使用元素。

但是所有可以为简单内容提供父项的xsd元素都不会是父元素,反之亦然。有没有办法解决它?

2 个答案:

答案 0 :(得分:2)

答案是否定的 - 除非你转到XSD 1.1并使用断言。

在XSD 1.0中,无法约束混合内容元素的文本节点中显示的文本。这是因为您没有按照设计使用XML的方式使用XML(在这种结构上也会出现XPath / XSLT问题)。

在XSD 1.1中,您可以对“对象”的声明进行断言,例如

test =“text()中的每个$ s满足$ s =('系统','设计','部分')

答案 1 :(得分:2)

解决它的最简单方法是使用稍微不同的XML结构,例如:

<object>
  <item>System</item>
  <item>Design</item>
  <item>Part</item>
</object>

这允许单个项目值根据需要包含空格,并且可以使用XSD中的枚举列表轻松约束合法值。它还更直接地展示了数据的结构:你使用一些东西或其他东西(我称之为item)来描述对象,因为我不知道它们实际上是什么 - 给它们XML中更具信息性的名称!)。列表中的每个或其他内容都是问题概念模型中的一个独特对象,如果每个都由不同的XML对象表示,那么对于您和XML工具来说,生活会更好(这里是一个独特的实例)元素类型item)。