我有一个大部分指定的xml文件。只有一个元素没有规范,可以包含任意的xml元素。
以下是此xml的示例:
<root_element>
<specified_element>
<empty_child_node/>
</specified_element>
<element_with_free_form>
<what><ever><xml><which><is><valid><xml>
</xml></valid></is></which></xml></ever></what>
</element_with_free_form>
</root_element>
我对DTD的理解是,这应该是这种xmls的有效规范:
<?xml version="1.0" encoding="utf-8"?>
<!ELEMENT root_element (specified_element, element_with_free_form)>
<!ELEMENT specified_element (empty_child_node)>
<!ELEMENT empty_child_node EMPTY>
<!ELEMENT element_with_free_form ANY>
这里是嵌入了DTD的完整xml文档:
<!DOCTYPE root_element [
<!ELEMENT root_element (specified_element, element_with_free_form)>
<!ELEMENT specified_element (empty_child_node)>
<!ELEMENT empty_child_node EMPTY>
<!ELEMENT element_with_free_form ANY>
]>
<root_element>
<specified_element>
<empty_child_node/>
</specified_element>
<element_with_free_form>
<what><ever><xml><which><valid><xml>
</xml></valid></which></xml></ever></what>
</element_with_free_form>
</root_element>
我做错了什么?
答案 0 :(得分:0)
即使element_with_free_form
声明为ANY
,也必须声明其中的任何元素。这意味着您还需要what
,ever
,xml
,which
和valid
的声明。
答案 1 :(得分:0)
正如DevNull所说,ANY
关键字意味着声明的元素可以包含#PCDATA
和DTD中声明的任何元素的混合。
如果您想声明element_with_free_form
可以包含任何均衡的XML,那么DTD对您来说就不是正确的模式语言。 XSD可以声明这些元素,以及支持一些其他变体,例如“我不关心结构是什么,但是孩子们必须都已经声明了”(这与ANY
具有相同的功能)和“If你有一个声明它,验证它,如果你没有它的声明,让它骑“(这是一个很好的第一个近似的”忽略你不理解的“HTML原则)。