Hi Thomas,
Richtig ist:
ExternalID ::= 'SYSTEM' S SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral
Das ist mir schon klar, jedoch ist der Ausdruck "ExternalID" optional. Demnach ist es doch Wurst ob dieser gültig ist:
('SYSTEM' S SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral)?
Könnte sich doch auch wie (false)? verhalten und demnach wahr sein.
Zumindest wäre das so wenn das „?“ in der EBNF-Grammatik die gleiche Bedeutung besitzt wie Thomas Meinike im Posting < http://forum.de.selfhtml.org/?t=119334&m=765381> geschrieben hat.
Ein paar Beispiele:
$REG = "/((SYSTEM 'foo')|(PUBLIC 'foo' 'foo'))?/";
echo preg_match($REG, "");
echo preg_match($REG, "blabla");
echo preg_match($REG, "SYSTEM");
echo preg_match($REG, "SYSTEM 'foo'");
echo preg_match($REG, "PUBLIC");
echo preg_match($REG, "PUBLIC 'foo'");
echo preg_match($REG, "PUBLIC 'foo' 'foo'");
Ergebnis -> alle Ausdrücke sind “wahr”.
Es ist durchaus einleuchtend das die SystemID bei vorhandener PublicID vorhanden sein muss, ich möchte mich nur vergewissern das dies auch _wirklich_ so spezifiziert ist. Die EBNF-Grammatik gibt diese Klarheit jedenfalls nicht. Ich habe diesbezügliche auch keine weiteren Hinweise in der Spec gefunden, habe ich da etwas übersehen oder hat mich die Logik verlassen?
Viele Grüße
Thomas Mell