Нормализация значений атрибутов XML - PullRequest
3 голосов
/ 17 мая 2011

Я читаю спецификацию XML на W3C, и эта часть раздела нормализация значения атрибута привлекла мое внимание:

Если тип атрибута не CDATA, то процессор XML ОБЯЗАН дополнительно обрабатывать нормализованное значение атрибута, отбрасывая любые символы начального и конечного пробела (# x20) и заменяя последовательности символов пробела (# x20) одним пробелом (# x20) символ.

Означает ли это, что

<tag attr=" a      b " />

эквивалентно

<tag attr="a b" />

Или я неправильно истолковываю то, что написано в спецификации?

Ответы [ 2 ]

4 голосов
/ 18 мая 2011

Ваша интерпретация верна, учитывая, что тип 'attr' не CDATA, но, скорее всего, это так.

Аннотированная спецификация XML очень помогла мне при изучении деталей: http://www.xml.com/axml/testaxml.htm

2 голосов
/ 18 мая 2011

Вот пример дополнения правильного ответа @Per Norrman (+1) и пример, который вы использовали в своем вопросе.

<!DOCTYPE tag [
<!ELEMENT tag EMPTY>
<!ATTLIST tag
          attr NMTOKENS #IMPLIED>
]>
<tag attr=" a      b "/>

эквивалентно

<!DOCTYPE tag [
<!ELEMENT tag EMPTY>
<!ATTLIST tag
          attr NMTOKENS #IMPLIED>
]>
<tag attr="a b"/>

, потому чтотип атрибута attr равен NMTOKENS (множественное число).

Однако следующее не будет эквивалентно примеру NMTOKEN, поскольку attr является буквенным текстом (CDATA = символьные данные):

<!DOCTYPE tag [
<!ELEMENT tag EMPTY>
<!ATTLIST tag
          attr CDATA #IMPLIED>
]>
<tag attr=" a      b "/>

Это потому, что тип атрибута attr - это CDATA.

...