XML DTD 的验证问题?

XML validation issue with DTD?

我是 XML 的新手,现在正在学习我的第一门课程。

我得到的错误是:当我验证我的 XML 文件时,它显示:

markup declaration expected

我的 XML 和内部 DTD:

<?xml version="1.0"   standalone="yes"?>
<!-- This is Internal DTD-->
<!DOCTYPE employee[
<!DOCTYPE head (title)>
<!DOCTYPE title EMPTY>
<!ELEMENT employee (body,details)+>
<!ELEMENT details (name, address, d_o_birth, d_o_join, phone, desig, dept, e_mail*)>
<!ELEMENT name EMPTY>
<!ATTLIST  name gender (male | female) #REQUIRED>
<!ELEMENT address EMPTY>
<!ELEMENT d_o_birth EMPTY>
<!ELEMENT d_o_join EMPTY>
<!ELEMENT phone (resi,mobile)>
<!ELEMENT resi EMPTY>
<!ELEMENT mobile EMPTY>
<!ELEMENT desig EMPTY>
<!ELEMENT dept EMPTY>
<!ELEMENT e_mail (#PCDATA)>
]>

<employee>
    <head>
          <title>Employee Details</title>

    </head>
<body>
            <details>
                      <name>Name:         Ismail Kedir
                                      Gender:      Male</name>
                      <address>:                Jima, Kochi</address>
                      <d_o_birth>:              27/9/1976</d_o_birth>
                      <d_o_join>:               03/10/2005</d_o_join>
                <phone>
                        <resi>:                       2352</resi>
                        <mobile>:               +251910178976</mobile>                
                </phone>
                <desig>:                          Teacher</desig>
                <dept>:                           JIT</dept>
                <e_mail>Email:            nur_selam@yahoo.com</e_mail>
            </details>
</body>
</employee>

您收到该错误是因为您的内部子集内有 DOCTYPE 声明(在 [] 之间)。它们应该是 ELEMENT 声明(对于 headtitle 元素)。

然而,该错误只是冰山一角。我还注意到以下问题(可能还有更多):

  • detailsemployee 的内容模型中,但应该在 body 的内容模型中。
  • body需要申报。
  • 以下元素应该是 #PCDATA 而不是 EMPTYnametitleaddressd_o_birthd_o_joinresimobiledesigdept.
  • 应将属性 gender="male" 添加到实例中的 name(XML 数据本身)。
  • title 应该是 #PCDATA 而不是 EMPTY.
  • 我还建议清理 #PCDATA。您不应该需要所有标签(例如 Gender:Name:Email: 和其他无关的 :)。在我看来,这更像是由消耗 XML.
  • 的任何系统处理的演示文稿

这是一个可以帮助您入门的有效版本。 (我没有做任何数据清理。)

<?xml version="1.0"   standalone="yes"?>
<!-- This is Internal DTD-->
<!DOCTYPE employee [
<!ELEMENT head (title)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT employee (head,body)>
<!ELEMENT body (details)>
<!ELEMENT details (name, address, d_o_birth, d_o_join, phone, desig, dept, e_mail*)>
<!ELEMENT name (#PCDATA)>
<!ATTLIST name gender (male | female) #REQUIRED>
<!ELEMENT address (#PCDATA)>
<!ELEMENT d_o_birth (#PCDATA)>
<!ELEMENT d_o_join (#PCDATA)>
<!ELEMENT phone (resi,mobile)>
<!ELEMENT resi (#PCDATA)>
<!ELEMENT mobile (#PCDATA)>
<!ELEMENT desig (#PCDATA)>
<!ELEMENT dept (#PCDATA)>
<!ELEMENT e_mail (#PCDATA)>
]>
<employee>
    <head>
        <title>Employee Details</title>
    </head>
    <body>
        <details>
            <name gender="male">Name:         Ismail Kedir
                Gender:      Male</name>
            <address>:                Jima, Kochi</address>
            <d_o_birth>:              27/9/1976</d_o_birth>
            <d_o_join>:               03/10/2005</d_o_join>
            <phone>
                <resi>:                       2352</resi>
                <mobile>:               +251910178976</mobile>                
            </phone>
            <desig>:                          Teacher</desig>
            <dept>:                           JIT</dept>
            <e_mail>Email:            nur_selam@yahoo.com</e_mail>
        </details>
    </body>
</employee>