Thomas Meinike: XML-Profis hierher ;-))

Beitrag lesen

Hallo,

*Seufz*, neuer Versuch:
"'PUBLIC' S PubidLiteral S SystemLiteral" ODER "'SYSTEM' S SystemLiteral" ist gültig, ok?!
Da aber beides optional ist (eben wegen dem ? außen herum):
('PUBLIC' S PubidLiteral S SystemLiteral ODER 'SYSTEM' S SystemLiteral)?
spielt es überhaupt keine Rolle ob einer der beiden Ausdrücke innerhalb der Klammer gültig ist; und eben das habe ich demonstriert.

Mal ganz einfach von DTD-Syntax ausgegangen:

<!ELEMENT bla (x,y)?>

ist nicht identisch mit

<!ELEMENT bla (x?,y?)>

Ersteres sagt, dass bla die optionale Folge [(...) = Gruppierung] der Kindelemente x und y haben kann, also wenn dann beide nacheinander, aber nicht eines von beiden.

Letzteres sagt, dass nacheinander sowohl x und y als auch x oder y allein auftreten koennen, ggf. auch keines von beiden.

In dieser Analogie sollte sich auch die Definition von ExternalID auffassen lassen.

Hier nochmal das Beispiel zum Testen:

  
<?xml version="1.0" encoding="ISO-8859-1"?>  
<!DOCTYPE abc [  
  <!ELEMENT abc (bla)*>  
  <!ELEMENT bla (x,y)?>  
  <!ELEMENT x (#PCDATA)>  
  <!ELEMENT y (#PCDATA)>  
]>  
<abc>  
  <bla>  
    <x>Test</x>  
    <y>Test</y>  
  </bla>  
</abc>

Validiere mal ohne x- bzw. y-Element.

MfG, Thomas