MudGuard: XML Validierung

Beitrag lesen

Hi,

<xs:pattern value="[\p{IsBasicLatin}\p{IsLatin-1Supplement}-[ \t\r\n]][\p{IsBasicLatin}\p{IsLatin-1Supplement}-[\t\r\n]]*"/>

http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/datatypes.html#charcter-classes
Ich kann dort nicht erkennen, dass eine Character Class Expression innerhalb einer Character Class Expression erlaubt (bzw. sinnvoll) wäre.

Nächstes Mal genauer hinschauen ;-)

11 charClass    ::=    charClassEsc | charClassExpr | WildcardEsc

Da nehmen wir die charClassExpr

12 charClassExpr    ::=    '[' charGroup ']'

weiter mit der charGroup

13 charGroup    ::=    posCharGroup | negCharGroup | charClassSub

da nehmen wir die charClassSub

16 charClassSub    ::=    ( posCharGroup | negCharGroup ) '-' charClassExpr

hier nehmen wir posCharGroup - charClassExpr

Für posCharGroup
14 posCharGroup    ::=    ( charRange | charClassEsc )+
diesen Teil könnte man jetzt Regel für Regel weiter zerlegen (über charClassEsc -> catEsc ...), aber kurz gesagt deckt der das
\p{IsBasicLatin}\p{IsLatin-1Supplement}
ab.

bleibt also noch das - und charClassExpr. - als Literal braucht nicht weiter aufgelöst zu werden. Bleibt charClassExpr.

12 charClassExpr    ::=    '[' charGroup ']'

charGroup könnte ich wieder nach den Regeln weiter zerlegen (charRange -> XmlCharIncDash ..., charClassEsc->SingleCharEsc ...), aber kurz gesagt deckt das die 4 Whitespace-Zeichen ab.
Diese charClassExpr deckt also [ \t\r\n] ab.
Gehen wir wieder zurück: davor war das literale -, also -[ \t\r\n]
Weiter zurück: posCharGroup-[ \t\r\n]
Noch weiter: [posCharGroup-[ \t\r\n]]
Und posCharGroup war ja das \p{IsBasicLatin}\p{IsLatin-1Supplement}, womit die erste [] aus dem Originalausdruck komplett abgedeckt ist.

cu,
Andreas

--
Warum nennt sich Andreas hier MudGuard?
O o ostern ...
Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.