DTD - 关闭特定 XML 元素的验证
DTD - Switch off validation for specific XML element
我正在为我创建的 XML 文档编写 DTD。 XML 文档是另一个系统提供的有效载荷的包装器。我无法控制 Payload 的内容,并且不在乎它是独立有效的 XML。 (它最终由我无法控制的单独模式验证)。
但是,我确实关心包装器的结构,并希望能够指定下面每个示例的结构并控制我添加的 SomeData。
DTD 看起来像这样:
<!DOCTYPE Examples[
<!ELEMENT Examples(Example+)>
<!ELEMENT Example(SomeData,Payload)>
<!ELEMENT SomeData (#PCDATA)>
<!ELEMENT Payload ANY>
]>
有效负载将类似于:
<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.
我想要的是一种表达方式,"everything underneath Payload is not defined as having a specific structure, so please ignore it"。
我认为将其定义为 ANY 或 CDATA 可能有效,但运气真好。
非常感谢任何指点。
简而言之 - 我认为这在 dtd 中是不可能的。
正如迈克尔在评论中指出的那样,在 XSD 中是可能的。
您可以使用 <xs:any processContents="skip"/>
这是原始问题的答案,但(对我而言)更有用的是使用 <xs:any processContents="strict"/>
并为内部 XML.
您可以查看我的 follow-up 关于具体操作的问答:
我正在为我创建的 XML 文档编写 DTD。 XML 文档是另一个系统提供的有效载荷的包装器。我无法控制 Payload 的内容,并且不在乎它是独立有效的 XML。 (它最终由我无法控制的单独模式验证)。
但是,我确实关心包装器的结构,并希望能够指定下面每个示例的结构并控制我添加的 SomeData。
DTD 看起来像这样:
<!DOCTYPE Examples[
<!ELEMENT Examples(Example+)>
<!ELEMENT Example(SomeData,Payload)>
<!ELEMENT SomeData (#PCDATA)>
<!ELEMENT Payload ANY>
]>
有效负载将类似于:
<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.
我想要的是一种表达方式,"everything underneath Payload is not defined as having a specific structure, so please ignore it"。
我认为将其定义为 ANY 或 CDATA 可能有效,但运气真好。
非常感谢任何指点。
简而言之 - 我认为这在 dtd 中是不可能的。
正如迈克尔在评论中指出的那样,在 XSD 中是可能的。
您可以使用 <xs:any processContents="skip"/>
这是原始问题的答案,但(对我而言)更有用的是使用 <xs:any processContents="strict"/>
并为内部 XML.
您可以查看我的 follow-up 关于具体操作的问答: