使用DTD指定包含自由格式元素的xml文件
我有一个xml文件,它是为大多数文件指定的。只有一个元素没有规范,可以包含任意xml元素 以下是此xml的一个示例:使用DTD指定包含自由格式元素的xml文件,xml,dtd,Xml,Dtd,我有一个xml文件,它是为大多数文件指定的。只有一个元素没有规范,可以包含任意xml元素 以下是此xml的一个示例: <root_element> <specified_element> <empty_child_node/> </specified_element> <element_with_free_form> <what><ever><xml><which
<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的理解是,这应该是这类XML的有效规范:
<?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>
]>
我做错了什么?即使带有自由形式的
元素被声明为ANY
,但其中的任何元素也必须被声明。这意味着您还需要声明what
,ever
,xml
,which
,以及valid
,正如DevNull已经说过的,ANY
关键字意味着被声明的元素可以包含#PCDATA
和DTD中声明的任何元素的混合物
如果您想声明element\u with\u free\u form
可以包含任何平衡良好的XML,那么DTD并不是适合您的模式语言。XSD可以声明这些元素,还可以支持其他一些变体,如“我不在乎结构是什么,但子元素必须全部声明过”(这与ANY
的功能相同)和“如果您有声明,请验证它,如果您没有声明,请让它运行”(这是HTML的“忽略您不理解的内容”原则的一个很好的近似值)。在另一种规范语言中,具有“自由”形式的元素不可能是真正的自由形式吗?