Mengapa komentar xml tidak boleh berisi dua tanda hubung

15

Saya menerapkan komentar penurunan harga di komentar xml dari file konfigurasi ketika XmlParser melaporkan bahwa dua tanda hubung ( --) tidak diperbolehkan dalam komentar xml.

Memeriksa Spesifikasi XML , tampaknya komentar xml tidak dirancang untuk berisi dua tanda hubung untuk alasan kompatibilitas dengan pengurai SGML.

Mengapa pengurai SGML melarang tanda hubung ganda dalam komentar?

OnesimusUnbound
sumber
2
Saya tidak berpikir Anda akan mendapatkan jawaban yang lebih baik daripada "karena itulah yang dikatakan standar"
jk.
Nah, hanya itu satu-satunya jawaban, maka saya tidak punya pilihan :-(, meskipun mungkin ada jawaban yang lebih baik dari itu.
OnesimusUnbound

Jawaban:

29

Halaman ini menguraikan sedikit sejarah HTML / SGML, dan aturan yang agak berbelit-belit dari dua tanda hubung berurutan (tanda hubung ganda).

Bagian yang relevan tentang SGML:

Sederhananya, tanda hubung ganda pada awal dan akhir komentar tidak memulai dan mengakhiri komentar. Tanda hubung ganda menunjukkan perubahan dalam isi komentar. Yang pertama - memulai komentar, dan memberi tahu browser bahwa komentar diizinkan mengandung> karakter tanpa mengakhiri komentar. Yang kedua - tidak mengakhiri komentar. Ia memberi tahu browser bahwa jika bertemu dengan karakter, maka ia harus mengakhiri komentar. Jika yang lain - ditambahkan, maka itu kembali ke mengizinkan> karakter.

Joris Timmermans
sumber
7
Bagian yang Anda maksud . Ketika saya membaca apa yang dimaksudkan oleh spesifikasi SGML --di dalam komentar, kepala saya berputar pada kompleksitas yang akan diperkenalkan kemudian.
OnesimusUnbound
1
Saran untuk tidak pernah menggunakan --komentar sepertinya baik bagi saya. Tetapi, adakah cara standar untuk menghindarinya? Misalkan saya ingin membuat (dan membagikan) filter keluaran untuk memastikan foo -- bartidak pernah menyebabkan masalah. Apakah ada yang setara dengan SGML foo -\- bar? (Aku yakin itu bukan backslash!) Atau -(lihat jawaban ini ), atau yang lainnya? Jika kita hanya mengganti --dengan -atau - -, melarikan diri tidak dapat dibalik.
fazy
11

Karena tanda hubung ganda adalah pembatas komentar dalam SGML. The <!dimulai instruksi SGML, yang --menunjukkan komentar. Jadi pada dasarnya itu karena alasan yang sama bahwa komentar C ++ tidak dapat berisi */.

Jörg W Mittag
sumber
1
Saya pikir -->pembatas komentar.
OnesimusUnbound
10
Tidak, bukan itu. <!memulai instruksi SGML, >mengakhirinya. Dalam instruksi SGML, --keduanya memulai dan mengakhiri komentar.
Jörg W Mittag
7
Ahh tambahkan komentar Anda ke jawaban, ini mencerahkan karena itu berarti Anda dapat menulis <! SomeRelevantSgmlTag - komentar - someAttribute = "blabla" - komentar lain -> dan makna semantiknya adalah <! SomeRelevantSgmlTag someAttribute = " blabla ">
Jimmy Hoffa
1
Ah, masuk akal. --> sebenarnya adalah dua token, --untuk membatasi komentar, dan >untuk mengakhiri instruksi SGML. Sekarang, saya punya ide dari mana <![CDATA[... ]]>berasal.
OnesimusUnbound
Saya telah menggabungkan komentar.
Joris Timmermans