【问题标题】:DTD - Switch off validation for specific XML elementDTD - 关闭特定 XML 元素的验证
【发布时间】:2018-03-05 13:14:05
【问题描述】:

我正在为我创建的 XML 文档编写 DTD。 XML 文档是另一个系统提供的 Payload 的包装器。我无法控制 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.

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

我认为将其定义为 ANY 或 CDATA 可能会起作用,但运气不错。

非常感谢的任何指针。

【问题讨论】:

  • 如果您使用 XSD,您可以通过 &lt;xs:any processContents="skip"/&gt; 实现此目的。我不太了解 DTD,无法在不查找的情况下给您答案。

标签: xml dtd xmlspy


【解决方案1】:

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

正如 Michael 在 cmets 中指出的,这在 XSD 中是可能的。

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

您可以查看我关于执行此操作的具体问题的后续问题和答案: Dynamic XML Schema Validates Subsection of Document

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 2021-10-15
    • 2010-11-22
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    相关资源
    最近更新 更多