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
声明(对于 head
和 title
元素)。
然而,该错误只是冰山一角。我还注意到以下问题(可能还有更多):
details
在 employee
的内容模型中,但应该在 body
的内容模型中。
body
需要申报。
- 以下元素应该是
#PCDATA
而不是 EMPTY
:name
、title
、address
、d_o_birth
、d_o_join
、resi
、mobile
、desig
和 dept
.
- 应将属性
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>
我是 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
声明(对于 head
和 title
元素)。
然而,该错误只是冰山一角。我还注意到以下问题(可能还有更多):
details
在employee
的内容模型中,但应该在body
的内容模型中。body
需要申报。- 以下元素应该是
#PCDATA
而不是EMPTY
:name
、title
、address
、d_o_birth
、d_o_join
、resi
、mobile
、desig
和dept
. - 应将属性
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>