Tại sao một bình luận xml không chứa hai dấu gạch nối


15

Tôi đã áp dụng các bình luận markdown trong các bình luận xml của một tệp cấu hình khi XmlParser báo cáo rằng hai dấu gạch nối ( --) không được phép trong các bình luận xml.

Kiểm tra Đặc tả XML , có vẻ như bình luận xml không được thiết kế để chứa hai dấu gạch nối vì lý do tương thích với trình phân tích cú pháp SGML.

Tại sao các trình phân tích cú pháp SGML không cho phép các dấu gạch nối kép trong các nhận xét?


2
Tôi không nghĩ bạn sẽ nhận được câu trả lời tốt hơn "vì đó là những gì tiêu chuẩn nói"
jk.

Chà, đó là câu trả lời duy nhất, sau đó tôi không có lựa chọn nào khác :-(, mặc dù có thể có câu trả lời tốt hơn thế.
OnesimusUnbound

Câu trả lời:


29

Trang này phác thảo khá nhiều về lịch sử HTML / SGML và các quy tắc khá phức tạp của hai dấu gạch nối liên tiếp đó (dấu gạch ngang kép).

Phần liên quan về SGML:

Nói một cách đơn giản, dấu gạch ngang kép ở đầu và cuối bình luận không bắt đầu và kết thúc bình luận. Dấu gạch ngang đôi cho thấy sự thay đổi trong những gì bình luận được phép chứa. Đầu tiên - bắt đầu bình luận và nói với trình duyệt rằng bình luận được phép chứa> ký tự mà không kết thúc bình luận. Thứ hai - không kết thúc bình luận. Nó báo cho trình duyệt biết rằng nếu nó gặp một ký tự> thì nó phải kết thúc bình luận. Nếu cái khác - được thêm vào, thì nó sẽ quay trở lại cho phép các ký tự>.


7
Phần bạn đang đề cập đến . Khi tôi đọc những gì các thông số kỹ thuật SGML dự định --trong bình luận, đầu tôi xoay quanh sự phức tạp mà nó sẽ giới thiệu sau này.
OnesimusUnbound

1
Lời khuyên để không bao giờ sử dụng --bên trong một bình luận có vẻ tốt cho tôi. Nhưng, có một cách tiêu chuẩn để thoát khỏi nó? Giả sử tôi muốn tạo (và chia sẻ) bộ lọc đầu ra để đảm bảo foo -- barkhông bao giờ gây ra sự cố. Có một SGML tương đương foo -\- bar? (Tôi chắc chắn đó không phải là dấu gạch chéo ngược!) Hoặc -(xem câu trả lời này ), hoặc một cái gì khác? Nếu chúng ta chỉ thay thế --bằng -hoặc - -, việc thoát là không thể đảo ngược.
fazy

11

Bởi vì một dấu gạch nối kép dấu phân cách nhận xét trong SGML. Việc <!bắt đầu một lệnh SGML, --chỉ ra một nhận xét. Vì vậy, về cơ bản, đó là lý do tương tự mà một bình luận C ++ không thể chứa */.


1
Tôi nghĩ -->là phân định bình luận.
OnesimusUnbound

10
Không có nó không phải là. <!bắt đầu một lệnh SGML, >kết thúc nó Trong một hướng dẫn SGML --cả bắt đầu và kết thúc một nhận xét.
Jörg W Mittag

7
Ahh thêm bình luận của bạn vào câu trả lời, điều này thật sáng sủa vì điều đó có nghĩa là bạn có thể viết <! blabla ">
Jimmy Hoffa

1
Ah, có ý nghĩa. --> thực sự là hai mã thông báo, --để phân định nhận xét và >kết thúc hướng dẫn SGML. Bây giờ, tôi có một ý tưởng về nơi <![CDATA[... ]]>bắt nguồn.
OnesimusUnbound

Tôi đã hợp nhất nhận xét.
Joris Timmermans
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.