DTD - 关闭特定XML元素的验证

时间:2018-03-05 13:14:06

标签: xml xml-dtd xmlspy

我正在为我创建的XML文档编写DTD。 XML文档是另一个系统提供的Payload的包装器。我无法控制Payload的内容,也不关心它是否是自包含的有效XML。 (它最终通过我无法控制的单独模式进行验证。)

但是,我确实关心包装器的结构,并希望能够指示下面每个示例的结构并控制我添加的SomeData。

DTD看起来像这样:

<!DOCTYPE Examples[
<!ELEMENT Examples(Example+)>
<!ELEMENT Example(SomeData,Payload)>
<!ELEMENT SomeData (#PCDATA)>
<!ELEMENT Payload ANY>
]>

Payload将会像:

<Payload><foo>bar</foo></Payload>

问题在于,无论我进入Pay​​load,XMLSpy都会继续验证并抱怨Payload的子元素不是预期的:

Content model of element <Payload> disallows element <foo> at this position.

Element <foo> has not been declared.

我想要的是一种说法,“Payload下面的所有东西都没有被定义为具有特定的结构,所以请忽略它。”

我认为将其定义为ANY或CDATA可能有效,但运气如此。

任何指针都很有用。

1 个答案:

答案 0 :(得分:0)

简而言之 - 我不相信这在dtd中是可能的。

正如迈克尔在评论中指出的那样,在XSD中是可能的。

您可以使用<xs:any processContents="strict"/>这是原始问题的答案,但对我来说更有用的是使用{{1}}并为内部XML指定不同的XSD。

您可以看到我的后续问题并回答有关执行此操作的具体细节: Dynamic XML Schema Validates Subsection of Document