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