检查DTD中的错误

时间:2016-03-05 15:19:52

标签: xml dtd xml-dtd

我需要编写类似

的XML
 <student Name = "aaa">

 <subject id="abc">
   <assignment id="1">
        <name>ddd</name>
        <Submission>12/2/1999</Submission>
   </assignment>
   <assignment id="2">
        <name>ddd</name>
        <Submission>12/2/1999</Submission>
   </assignment>    
 </subject>

<subject id="hjd">
   <assignment id="1">
        <name>ddd</name>
        <Submission>12/2/1999</Submission>
  </assignment>
  <assignment id="2">
        <name>ggg</name>
        <Submission>12/2/1999</Submission>
  </assignment>
</subject>
</student>

至于我的DTD文件(因为我需要将其作为外部DTD编写)

我把它写成

 <!ELEMENT student (subject*)>
 <!ELEMENT subject (assignment*)>
 <!ELEMENT assignment (name,submission)>
 <!ATTLIST student name PCDATA #REQUIRED>
 <!ATTLIST subject ID PCDATA #REQUIRED>
 <!ATTLIST assignment ID PCDATA #REQUIRED>

提交必须采用日期格式,我不知道这有什么问题。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

就像potame所说,你可以根据DTD验证你的XML,看看它是否正确。但是,我确实看到了一些肯定不正确的事情......

  • 在您的ATTLIST声明中,您使用无效的PCDATA。请改用CDATA
  • 对于student元素,您声明属性name,但您的XML使用属性Name。案件很重要。
  • IDsubject的{​​{1}}属性的类似问题;案件应该匹配。
  • 您的DTD指定assignment元素必须包含一个assignment元素,后跟一个name元素,但您不会声明这些元素。 (此外,您的XML使用submission。同样,案件很重要。)

这是一个更正的DTD和实例。我还改变了DTD的格式和顺序,使其更容易阅读,但那部分并不重要。

XML DTD

Submission

XML实例

<!ELEMENT student (subject*)>
<!ATTLIST student 
          name CDATA #REQUIRED>

<!ELEMENT subject (assignment*)>
<!ATTLIST subject 
          id CDATA #REQUIRED>

<!ELEMENT assignment (name,submission)>
<!ATTLIST assignment 
          id CDATA #REQUIRED>

<!ELEMENT name (#PCDATA)>
<!ELEMENT submission (#PCDATA)>

您还应该在XML中引用带有DOCTYPE声明的DTD,但我不知道您提交此数据的方式或位置。

我也不知道&#34; 提交必须采用日期格式&#34;手段。什么格式? ISO 8601?如果您提供更多详细信息,我应该能够回答有关日期格式的任何问题。