【问题标题】:Checking of errors in DTD检查 DTD 中的错误
【发布时间】:2016-03-06 14:47:29
【问题描述】:

我需要写一个类似的 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>

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

【问题讨论】:

  • 我不知道这有什么问题”是什么意思?你有错误吗?
  • 我不知道是什么错误,我似乎无法检查我是否错了或什么。但是我只是通过查看我创建的数据,有没有办法知道是否有什么问题?
  • 您可以根据 DTD 解析和验证您的输入 XML 以检查它是否正确。顺便说一句,我们不是来判断你所做的是对还是错——你宁愿知道你想做什么,并解释你遇到的问题是什么。
  • 你能再解释一下“提交必须是日期格式”吗?什么格式? ISO 8601? (日期格式不能是 DTD 约束,但我们可以帮助您确定 XML 本身中的日期格式。)

标签: xml dtd


【解决方案1】:

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

  • 在您的 ATTLIST 声明中,您使用了无效的 PCDATA。请改用CDATA
  • 对于student 元素,您声明属性name,但您的XML 使用属性Name。案件很重要。
  • subjectassignmentID 属性类似的问题;大小写应该匹配。
  • 您的 DTD 指定 assignment 元素必须包含一个 name 元素,后跟一个 submission 元素,但您没有声明这些元素。 (另外,您的 XML 使用 Submission。同样,大小写很重要。)

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

XML DTD

<!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 实例

<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>

您还应该在 XML 中使用 DOCTYPE 声明引用 DTD,但我不知道您是如何或在何处提交此数据的。

我也不知道“提交必须是日期格式”是什么意思。什么格式? ISO 8601?如果您提供更多详细信息,我应该能够回答有关日期格式的任何问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多