XML-DTD,两个元素具有相同的属性

XML-DTD,两个元素具有相同的属性,xml,dtd,Xml,Dtd,为什么下面的代码不正确? XMLspy在元素employee处发现错误 <!ELEMENT personnel (contractor*,employee*,partner*)+ > <!ELEMENT contractor (info)> <!ELEMENT employee(info)> <!ATTLIST info lname CDATA #REQUIRED fname CDATA #REQUIRED hiredate CDATA #REQUIRE

为什么下面的代码不正确? XMLspy在元素employee处发现错误

<!ELEMENT personnel (contractor*,employee*,partner*)+ >
<!ELEMENT contractor (info)>
<!ELEMENT employee(info)>
<!ATTLIST info lname CDATA #REQUIRED fname CDATA #REQUIRED hiredate CDATA #REQUIRED firedate CDATA #REQUIRED>

您需要在
员工
后面留一个空格

info
元素也未定义

如果您试图获取
contractor
employee
上的属性,则此操作将完成:

<!ELEMENT personnel (contractor*, employee*, partner*)+ >
<!ELEMENT contractor EMPTY>
<!ELEMENT employee EMPTY>
<!ATTLIST contractor lname CDATA #REQUIRED fname CDATA #REQUIRED hiredate CDATA #REQUIRED firedate CDATA #REQUIRED>
<!ATTLIST employee lname CDATA #REQUIRED fname CDATA #REQUIRED hiredate CDATA #REQUIRED firedate CDATA #REQUIRED>

根据上述DTD,这是有效的:

<personnel>
  <employee lname="Foo" fname="Bar" firedate="1" hiredate="2"/>
  <contractor lname="Foo" fname="Bar" firedate="1" hiredate="2"/>
</personnel>

或者您可以像这样共享属性声明:

<!ENTITY % shared "lname CDATA #REQUIRED fname CDATA #REQUIRED hiredate CDATA #REQUIRED firedate CDATA #REQUIRED">
<!ELEMENT personnel (contractor*, employee*, partner*)+ >
<!ELEMENT contractor EMPTY>
<!ELEMENT employee EMPTY>
<!ATTLIST contractor %shared;>
<!ATTLIST employee %shared;>


这样,如果您需要更改属性列表,则
contractor
employee

元素信息的属性列表都会更改,没有子元素或文本,只有属性。你能帮我在空间上多做点什么,或者给我一个教程的链接吗?@DanielHaley谢谢。我不得不查找它来刷新我的记忆,因为我已经十年没有使用DTD了。现在对我来说,一切都很轻松,到处都有一些XML模式。