2013-04-23 113 views
0

好的,所以我需要为XML项目声明名称空间,并使用DTD进行验证。一切似乎都是正确的,即使我的朋友和教授也这样说,但我不断收到一条错误消息,说“元素”st:course“的前缀”st“没有绑定。”它看起来受我的约束,我错过了什么?XML DTD命名空间没有绑定

XML:

<?xml-namespace ns="http://www.student_courses/data/st/ns" prefix="st"?> 
<?xml-namespace ns="http://www.student_courses/data/cr/ns" prefix="cr"?> 
<!DOCTYPE students SYSTEM "student_courses.dtd"> 

<students> 
<student number="a101"> <!-- number is an ID, required--> 
<Name title="Mr.">John Doe</Name><!-- title values can be 'Mr.','Ms.','Dr.'--> 
<st:course xmlns= "http://www.student_courses/data/st/ns" section="01">WEB 225</st:course> 
<enrolled>22</enrolled> 

<content> 
<level class="Intro"></level> 
<comments>Great course</comments><!-- An optional element --> 
<book isbn="">XML</book><!--isbn is required, but the element is optional --> 
</content> 
</student> 

<student number="a102"><!-- number is an ID, required--> 
<Name title="Dr.">Jane Williams</Name> 
<st:course xmlns= "http://www.student_courses/data/st/ns">WEB 325</st:course> 
<enrolled>22</enrolled> 

<content> 
<level class="Adv."></level> 
</content> 
</student> 

<student number="a103"><!-- number is an ID, required--> 
<Name title="Ms.">Jane Doe</Name><!-- title values can be 'Mr.','Ms.','Dr.'--> 
<st:course xmlns= "http://www.student_courses/data/st/ns" section="03">WEB 440</st:course> 
<enrolled>12</enrolled> 

<content> 
<level class="Adv."></level> 
<comments>Great course</comments><!-- An optional element --> 
</content> 
</student> 

<courses> 

<cr:course xmlns = "http://www.student_courses/data/cr/ns" id="WEB225"> 
<name>Web Development II</name> 
<offered>Spring</offered> 
<pre_reqs>WEB125</pre_reqs> 
</cr:course> 

<cr:course xmlns = "http://www.student_courses/data/cr/ns" id="WEB125"> 
<name>Web Development I</name> 
<offered>Fall</offered> 
</cr:course> 

<cr:course xmlns = "http://www.student_courses/data/cr/ns" id="WEB325"> 
<name>Client-Side Scripting</name> 
<offered>Spring</offered> 
<offered>Fall</offered> 
<pre_reqs>WEB225</pre_reqs> 
</cr:course> 

</courses> 

</students> 

这里是我DTD:

<!ELEMENT students (student+)> 
<!ELEMENT student (Name+,st:course+,enrolled+,content+)> 
<!ATTLIST student number ID #REQUIRED> 
<!ELEMENT Name (#PCDATA)> 
<!ATTLIST Name title (Mr. | Ms. | Dr.) #IMPLIED> 
<!ELEMENT st:course (#PCDATA)> 
<!ATTLIST st:course xmlns CDATA #FIXED "http://www.student_courses/data/st/ns"> 
<!ATTLIST st:course section CDATA #IMPLIED> 
<!ELEMENT enrolled (#PCDATA)> 
<!ELEMENT content (level+, comments*, book?)> 
<!ELEMENT level (#PCDATA)> 
<!ATTLIST level class (Intro | Adv.) #IMPLIED> 
<!ELEMENT comments (#PCDATA)> 
<!ELEMENT book (#PCDATA)> 
<!ATTLIST book isbn CDATA #REQUIRED> 
<!ELEMENT courses (cr:course+)> 
<!ELEMENT cr:course (name+,offered+,pre_reqs*)> 
<!ATTLIST cr:course xmlns:cr CDATA #FIXED "http://www.student_courses/data/cr/ns"> 
<!ATTLIST cr:course id CDATA #REQUIRED> 
<!ELEMENT name (#PCDATA)> 
<!ELEMENT offered (#PCDATA)> 
<!ELEMENT pre_reqs (#PCDATA)> 

谢谢大家,爱这个地方!

-K

+0

请注意,我没有在官方w3c规范的任何地方找到'xml-namespace'处理指令。 – IllidanS4 2014-05-17 20:42:59

回答

0

你的问题战神是:

  1. 在DTD变化< ATTLIST ST:当然的xmlns CDATA #FIXED “http://www.student_courses/data/st/ns” >到< ATTLIST ST:当然的xmlns:ST CDATA #FIXED“http://www.student_courses/data/st/ns”>

  2. 在XML中评论您的<课程> ... < /课程>元素,因为它不符合您的DTD。你的DTD有<学生>根据<只有学生>。

  3. 在XML变化无处不在< ST:当然的xmlns = “http://www.student_courses/data/st/ns” ... >到< ST:当然的xmlns:ST = “HTTP://www.student_courses/data/st/ns” ... >

  4. 在XML变化开始时<?xml-namespace ns =“http://www.student_courses/data/st/ns”prefix =“st”? >到<?xml-namespace st =“http://www.student_courses/data/st/ns”prefix =“st”? >

第一个和第三个是相互联系的。如果你想把你的'course'元素保留为'st:course'(带有名称空间前缀),那么你必须将其注入到你的DTD中。

凡第二和第三是自我充实。

+0

我不明白你的第二点:课程是另一个元素,我需要cr名称空间来避免与学生元素中的course元素发生名称冲突。尽管如此,你所拥有的一切都对我有意义。 – user2297971 2013-04-23 12:25:42

+0

根据您创建的DTD,您只有一个根元素学生的子元素学生。但如果你想添加一个子元素 - '课程',你必须将你的DTD从<!ELEMENT学生(学生+)>改为<!ELEMENT学生(学生+课程)>。并在您的XML更改< cr:course xmlns =“http://www.student_courses/data/cr/ns”... >到< cr:course xmlns:cr =“http://www.student_courses/data/ cr/ns“... > – 2013-04-23 13:05:30

+0

明白了,谢谢! – user2297971 2013-04-23 13:10:31