使用DTD指定包含自由格式元素的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

我有一个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的理解是,这应该是这类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的“忽略您不理解的内容”原则的一个很好的近似值)。

在另一种规范语言中,具有“自由”形式的元素不可能是真正的自由形式吗?