2012-05-31 12 views
38
<!-- here is some comment -- 
          ^
          | 
        what can be here apart from '>'? 

XML wydaje się nie lubić "-" wewnątrz komentarzy. Czytałem gdzieś, że "-" przełącza niektóre tryby wewnątrz rzeczy <! ... >, ale <!-- -- -- --> (nawet liczba -- s) wydaje się również nieważna. Jeśli jest to jakiś historyczny element, jaki jest jego "pro"? (część "contra" to niezdolność do komentarzy w komentarzach).Komentarze XML i "-"

Jaki jest powód komplikowania przetwarzania komentarzy przez nieskonczenie "->" końca komentarza i pozostawienie "-" w środku?

Odpowiedz

31

Z dokumentu normy:

http://www.w3.org/TR/REC-xml/#sec-comments

[Definicja: Komentarze mogą pojawić się w dowolnym miejscu w dokumencie poza drugiej znaczników; ponadto mogą pojawić się w deklaracji typu dokumentu w miejscach dozwolonych przez gramatykę. Nie są one częścią danych znakowych dokumentu ; Procesor XML może, ale nie musi, umożliwiać aplikacji pobieranie tekstu komentarzy. Dla compatibility ciąg znaków "-" (podwójny łącznik) nie może wystąpić w komentarzach .] Odwołania do encji parametrów nie mogą być rozpoznawane w komentarzach .

+0

Tak więc "pro" to zgodność z SGML. –

+1

Nazwałbym to inżynierią. – asawyer

16

-- nie jest kompatybilny z SGML. Od On SGML and HTML:

Biała przestrzeń nie jest dozwolone pomiędzy deklaracji znaczników otwartym separatora i komentarz otwarty ogranicznik («-«), ale jest dozwolona pomiędzy komentarz Zamknij separatora (»(” <!») - ") i znacznik zamykający deklarację znacznika (" > "). Typowym błędem jest dołączenie w komentarzu ciągu łączników ("---") w postaci . Autorzy powinni unikać wstawiania dwóch lub więcej sąsiednich myślników wewnątrz komentarzy.

Więc w SGML <! i > otwartych i zamkniętych „deklaracji znaczników” i -- otwiera i zamyka komentarze.

19

Jest to jedna z tych głupich zasad, która jest w XML, ponieważ była w SGML i ludzie nie chcieli złamać kompatybilności. Dlaczego jest w SGML, nikt się nie domyśla: prawdopodobnie dlatego, że zapisał trzy linie kodu w oryginalnym parserze.

26

Może to być pomocne dla kogoś. Miałem problem, że chcę wypowiedzieć się parametr wiersza polecenia w języku XML, który zaczyna się -:

<arg line="-v --line-break 0" /> 

tak naturalnie normalny sposób jak ten

<!-- <arg line="-v --line-break 0" /> --> 

nie działał, ale okazało się, że jeśli - zostanie zastąpiony przez jego odpowiednik UTF-8 &#x002D;, działa i może być tolerowany wewnątrz komentarzy.

Więc w moim przypadku ciąg

<arg line="-v &#x002d;&#x002d;line-break 0" /> 

jest analizowany poprawnie i może stanowić część komentarzy.

Oczywiście wygląda to trochę brzydko, ale jeśli ktoś chce zachować ciąg znaków - jako komentarz w swoim XML - myślę, że jest jeszcze lepszy niż nic.

+14

Można również użyć sekwencji specjalnej "-", która jest wersją ucieczki ASCII i jest nieco krótsza niż wersja unicode. – ricovox

+1

lub '-' (ascii/unicode w hex) – Vojta

Powiązane problemy