2013-04-23 5 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

답변

0

귀하의 문제 아르는 다음과 같습니다! 코스의 xmlns CDATA #FIXED "http://www.student_courses/data/st/ns"> <에 ATTLIST 일 :! 코스 XMLNS : 일 CDATA

  1. DTD 변화 < ATTLIST 일에 "http://www.student_courses/data/st/ns"XML에서 >

  2. 이 ... 당신의 < 코스 언급 #FIXED/코스 > DTD에 따라 유효하지 않은 요소입니다. DTD에 < 학생 >이 < 학생 >에만 있습니다. XML에서

  3. 변경 사방 < 일 : 코스의 xmlns = "http://www.student_courses/data/st/ns"... > 일 <에 : 코스 XMLNS : 성 = "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에 delcare해야합니다.

여기서 두 번째 및 세 번째는 자체 설명입니다.

+0

나는 두 번째 요점을 이해하지 못한다 : 코스는 또 다른 요소이며, 코스 요소와 학생 요소의 이름 충돌을 피하기 위해 네임 스페이스가 필요하다. 네가 가지고있는 다른 모든 것이 나에게 의미가있다. – user2297971

+0

작성된 DTD에 따라 루트 요소 학생 아래에 하나의 하위 요소 학생 만 있습니다. 그러나 하나 이상의 자식 요소 인 'courses'를 추가하려면 DTD를 <으로 변경해야합니다! ELEMENT students (student +) > to <! ELEMENT students (student +, courses) >. 그리고 XML 변경에 < cr : course xmlns = "http : //www.student_courses/data/cr/ns"... > to < cr : course xmlns : cr = "http : //www.student_courses/data/ cr/ns "... > –

+0

감사합니다. – user2297971

관련 문제