2012-02-01 3 views
0

내 XML 코드가 유효한지 여부입니다. 이 XML 블록이 유효합니까?

<?xml version="1.0"?> 
<!DOCTYPE nahrung [ 
    <!ELEMENT nahrung  (obst|gemuese|sonstiges)+> 
    <!ELEMENT obst (#PCDATA)> 
    <!ELEMENT gemuese (#PCDATA)> 
    <!ELEMENT sonstiges (#PCDATA|beschreibung)*> 
    <!ELEMENT beschreibung EMPTY> 
    <!ATTLIST beschreibung artikelname CDATA #REQUIRED 
    preis CDATA #REQUIRED> 
]> 
<nahrung> 
    <obst>Pflaume</obst> 
    <gemuese>Kohl</gemuese> 
    <sonstiges>Keks</sonstiges> 
    <sonstiges><beschreibung preis="22.50" 
     artikelname="banane"/></sonstiges> 
    <gemuese>Gurke Preis: 22.50</gemuese> 
</nahrung> 

내가 그들 모두 OBST 또는 gemuse 또는는 XML에서 한 번에 표시 sonstiges하지를 의미 <!ELEMENT nahrung (obst|gemuese|sonstiges)+>는 altogher.Did 내가 제대로 이해 한? 이

(obst|gemuese|sonstiges)+ 

+0

을 그 내에서 새로운 XML 파일로 일식, 그것은 어떤 오류를 말해주지 않습니다 ... – wuppi

답변

2

XML이 DTD에 대해 유효성을 검사해야하는 것처럼 보이지만 DTD가 예상 한 것과 일치하지 않는다고 생각합니다.

특히, 당신의 DTD에서이 라인 :

<!ELEMENT nahrung  (obst|gemuese|sonstiges)+> 

내가 당신이 목록에서 요소의 1 이상을해야한다는 것을 의미합니다.

당신은 하나의 자식 요소는, 예를 들어 (OBST 또는 gemuse 또는 sonstiges)에 맞는, 당신이 사용할 수 있도록하고 싶었 : 내가 넣으면

<!ELEMENT nahrung  (obst|gemuese|sonstiges)> 
1

"는 임의의 순서로 0이 아닌 obst, gemuese 수, sontiges 요소."를 의미

+0

그 의미 | OR을 의미하지는 않습니까? 예를 들어 Obst가 두 번 나타날 수도 있고 한 번 gemuse 할 수도 있고 세 번 생존 할 수도 있습니다. 옳은? – Baper

+0

실제로 "또는"을 의미하지만 "+"는 "하나 이상을 의미합니다." 그래서 당신의 완전한 순서는 세 가지 중 하나이며, 임의로 세 가지 중 하나가 선택되고, 선택적으로 세 가지 중 하나가 선택 될 수 있습니다. –

1

(obst|gemuese|sonstiges)+은 1 회 또는 그 이상을 의미합니다. 이 XML이 유효 함을 의미합니다.

관련 문제