Hallo,
Ist mein Verständnis korrekt, dass der lexical space der obigen Darstellung entspricht, d.h. leading und trailing whitespaces entfernt und alle anderen whitespaces normalized?
Nein, in Attributwerten findet auch keine Whitespace-Normalisierung statt (du denkst an die Reduktion von mehreren Blanks zu einem einzigen, nehme ich an).
Verstehe ich es richtig, dass bei XHTML keine Attribute Normalization vorgenommen wird, so wie für XML beschrieben?
Was du da als Attribute Normalization zitierst, kannte ich noch gar nicht. Ich dachte tatsächlich nur daran, dass mehrere Whitespace-Zeichen zu einem zusammengefasst werden. Aber genau das gilt üblicherweise nicht in Attributwerten.
Deshalb mein "Nein".
https://www.w3.org/TR/xml/#AVNormalize
3.3.3 Attribute-Value Normalization
Before the value of an attribute is passed to the application or checked for validity, the XML processor MUST normalize the attribute value by applying the algorithm below, or by using some other method such that the value passed to the application is the same as that produced by the algorithm.
Was da beschrieben wird, ist vor allem die Auflösung von Entity-Referenzen und NCR (das war klar), und der Ersatz aller Whitespace-Zeichen durch 0x20 (das wusste ich nicht).
If the attribute type is not CDATA, then the XML processor MUST further process the normalized attribute value by discarding any leading and trailing space (#x20) characters, and by replacing sequences of space (#x20) characters by a single space (#x20) character.
Aha. Das finde ich interessant - es gibt also auch bei Attributen die Unterscheidung zwischen CDATA und PCDATA. Ich dachte bisher, die gäbe es nur für den Elementinhalt. Allerdings steht da auch noch, dass CDATA der Regelfall ist, so dass die Kompression von Whitespace üblicherweise nicht stattfindet.
Aber um auf die Ausgangsfrage zurückzukommen: Ein validierender XML- oder XHTML-Parser wird ein Leerzeichen in einem Attributwert sicher nicht in %20 umwandeln. Er stört sich aber auch nicht daran, denn Leerzeichen in Attributwerten sind vollkommen valide.
Erst wenn der Browser das DOM aufbaut und den Attributwert als URL identifiziert hat, muss er Leerzeichen darin in %20 umwandlen, weil sonst ein ungültiger HTTP-Request beim Anfordern der referenzierten Ressource entstünde.
Live long and pros healthy,
Martin
Wer respektiert werden will, sollte zunächst damit anfangen, andere zu respektieren.