Stosowałem komentarze przeceny w komentarzach xml pliku konfiguracyjnego, gdy XmlParser zgłosił, że dwa łączniki ( --
) nie są dozwolone w komentarzach xml.
Sprawdzając specyfikację XML , wydaje się, że komentarz xml nie został zaprojektowany tak, aby zawierał dwa łączniki ze względu na kompatybilność z parserami SGML.
Dlaczego parsery SGML nie pozwalają na podwójne myślniki w komentarzach?
Odpowiedzi:
Ta strona przedstawia sporo historii HTML / SGML i dość skomplikowane reguły tych dwóch następujących po sobie łączników (podwójny myślnik).
Odpowiednia część o SGML:
źródło
--
w komentarzu, moja głowa obraca się wokół złożoności, którą wprowadzi później.--
w komentarzu, wydaje mi się dobra. Ale czy istnieje standardowy sposób na ucieczkę? Załóżmy, że chcę utworzyć (i udostępnić) filtr wyjściowy, aby upewnić się,foo -- bar
że nigdy nie spowoduje problemu. Czy istnieje odpowiednik SGMLfoo -\- bar
? (Jestem pewien, że to nie jest odwrotny ukośnik!) Lub-
(zobacz tę odpowiedź ) lub coś innego? Jeśli po prostu zastąpić--
z-
lub- -
, Cytowanie nie jest odwracalny.Ponieważ podwójny łącznik jest ogranicznikiem komentarza w SGML.
<!
Zaczyna dyspozycję SGMLu--
wskazuje komentarz. Zasadniczo z tego samego powodu komentarz C ++ nie może zawierać*/
.źródło
-->
to separator komentarzy.<!
uruchamia instrukcję SGML,>
kończy ją. W instrukcji SGML--
zarówno rozpoczyna, jak i kończy komentarz.-->
to tak naprawdę dwa tokeny,--
aby oddzielić komentarz i>
zakończyć instrukcję SGML. Teraz mam pomysł, skąd<![CDATA[
...]]>
pochodzi.