我正在为我创建的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>
问题在于,无论我进入Payload,XMLSpy都会继续验证并抱怨Payload的子元素不是预期的:
Content model of element <Payload> disallows element <foo> at this position.
Element <foo> has not been declared.
我想要的是一种说法,“Payload下面的所有东西都没有被定义为具有特定的结构,所以请忽略它。”
我认为将其定义为ANY或CDATA可能有效,但运气如此。
任何指针都很有用。
答案 0 :(得分:0)
简而言之 - 我不相信这在dtd中是可能的。
正如迈克尔在评论中指出的那样,在XSD中是可能的。
您可以使用<xs:any processContents="strict"/>
这是原始问题的答案,但对我来说更有用的是使用{{1}}并为内部XML指定不同的XSD。
您可以看到我的后续问题并回答有关执行此操作的具体细节: Dynamic XML Schema Validates Subsection of Document