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



我正在为我创建的XML文档编写DTD。 XML 文档是另一个系统提供的有效负载的包装器。 我无法控制有效负载的内容,也不在乎它是自包含的有效 XML。 (它最终由我无法控制的单独架构验证)。

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

DTD 将如下所示:

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

有效负载将如下所示:

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

问题是,无论我放入有效负载中,XMLSpy 都会继续验证它并抱怨不需要有效负载的子元素:

Content model of element <Payload> disallows element <foo> at this position.
Element <foo> has not been declared.

我想要的是一种说法,"Payload 下的所有内容都没有定义为具有特定的结构,所以请忽略它"。

我认为将其定义为 ANY 或 CDATA 可能会起作用,但运气如此之好。

任何指针都非常赞赏。

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

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

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

您可以看到我关于执行此操作细节的后续问题和答案: 动态 XML 架构验证文档的子部分

相关内容

  • 没有找到相关文章

最新更新