您将无法验证其中包含格式不正确的 HTML 的 XML 文档,因为由于格式不正确,此类文档不是 XML 文档。但如果实际上您得到的输入是 XML,那么您当然可以定义data
为允许任何格式良好的 HTML 元素或任何格式良好的 XML。
允许任何格式良好的 XML 是最简单的。我们定义了一个模式,而不是“任何格式良好的 XML”:遇到的任何元素都使用相同的模式递归地验证:
wellformed-xml = (text
| element * { wellformed-xml }
)*
现在定义data
元素以使用该模式:
stuff = element stuff {
element data { wellformed-xml }
}
如果你真的想确保它只是 HTML,你会想要一个比“*”更严格的名称类。我已经用b
, i
, p
,span
和填充了它div
,并将它作为练习留给您添加您想要的其他元素。
start = stuff
stuff =
element stuff {
element data { wellformed-html }
}
wellformed-html =
(text
| element b | div | i | p | span { wellformed-html }
)*
如果您还希望能够支持 XHTML 输入,您将需要使用名称空间引用;再次,为读者做一个练习。