2012-07-11 173 views
1

我有一个XML文档是这样的:可选元素DTD

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE school SYSTEM ""> 
<school> 
    <data> 
     <id> 
      <uid>1</uid> 
     </id> 
     <information> 
      <name>Michael</name> 
      <surename>Julius</surename> 
     </information> 
     <note> 
      <test>hans</test> 

     </note> 
    </data> 
</school> 

和DTD文件

<!ELEMENT school (data)> 
<!ELEMENT data (id,information,note)> 
<!ELEMENT id (uid)> 
<!ELEMENT uid (#PCDATA)> 
<!ELEMENT information (name,surename?)> 
<!ELEMENT name (#PCDATA)> 
<!ELEMENT surename (#PCDATA)> 
<!ELEMENT note (#PCDATA)> <--- unknown element type 

我想与可选元素类型定义<note>元素像

<note> 
    <test2>test2</test2> 
</note> 

<note> 
    <unknown name></unknown name> 
</note> 

有帮助吗? thankz

回答

1

您可以在note的元素声明中使用ANY。这将允许任何元素成为note的子元素,但该元素也必须被定义(具有元素声明)。你不能有一个未定义的元素。

note声明:

<!ELEMENT note ANY> 

实施例实例(DTD中可以是外部的,但我用一个内部子集,因为它是更容易测试):

<!DOCTYPE school [ 
<!ELEMENT school (data)> 
<!ELEMENT data (id,information,note)> 
<!ELEMENT id (uid)> 
<!ELEMENT uid (#PCDATA)> 
<!ELEMENT information (name,surename?)> 
<!ELEMENT name (#PCDATA)> 
<!ELEMENT surename (#PCDATA)> 
<!ELEMENT note ANY> 
<!ELEMENT test2 (#PCDATA)><!--The element "test2" still has to be declared.--> 
]> 
<school> 
    <data> 
     <id> 
      <uid>1</uid> 
     </id> 
     <information> 
      <name>Michael</name> 
      <surename>Julius</surename> 
     </information> 
     <note> 
      <test2>hans</test2>   
     </note> 
    </data> 
</school>