如何以任何顺序发生XML文档中的内容子集?

时间:2009-03-31 19:50:58

标签: xml xsd

我有一个文档,在一个根元素下有一堆元素,它有一些我关心的元素,并且想要验证;但这些元素可能出现在文档的任何地方。

还有其他一些我不想验证的元素;我不在乎他们是否存在或者是什么。

我尝试了一个显而易见的事情,一个带有我关心的元素的XSD在'all'元素中,然后是'any'元素,但这是不允许的。

我考虑过:

  • 包括我的架构中的其他元素 - yuk。
  • 转换文档以摆脱其他元素 - 哇,矫枉过正。

必须有办法做到这一点,对吧?

如果我们需要一个例子:

<book>
  <title/>
  <author/>
  <editor/>
  <pubdate/>
</book>

对于该示例,我想检查标题和编辑器是否存在,并忽略author和pubdate。注意,元素的顺序我不一样。

3 个答案:

答案 0 :(得分:2)

我最后使用XSLT转换消除了我不感兴趣的字段。

然后,我的XMLSchema不需要在...元素中拥有该元素,只需要我感兴趣的元素。

XSL转换似乎没有为流程添加任何可察觉的时间。如果我将来看到任何性能问题,我可能会将interest-elements-filter合并到我正在调用的API中。

努力享受。

答案 1 :(得分:1)

您必须创建一个模式,以验证您认为应该有效的所有实例文档。例如,您可能需要使用<choice>元素来指示必须存在多个元素之一。您可能希望在架构中包含author和pubdate,但表明您不关心它们的内容或属性,并且它们应该是可选的。

答案 2 :(得分:0)

根据您的要求(“我关心的一些要素,并且想要验证;但这些要素可能出现在文档的任何位置”){} {}}可能比XSD更好。