Hiểu về XML CharData EBNF

Nov 13 2020

Quy tắc EBNF sau đây được biểu thị bằng

CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*) 

thực sự khó hiểu đối với tôi. Ai đó có thể đưa ra một vài ví dụ về các chuỗi hợp lệ và không hợp lệ. Một lời giải thích ngắn gọn về những gì đang được thể hiện trong quy tắc cũng sẽ rất hữu ích. Mặc dù có lẽ hỏi hơi nhiều. Cũng sẽ rất tuyệt nếu bạn có một đoạn mã c ++ thú vị nằm xung quanh đó sẽ giúp bắt được sự cố này.

Trả lời

kjhughes Nov 13 2020 at 08:57

Sản xuất EBNF cho CharData,

[14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)

có nghĩa là dữ liệu ký tự XML có thể bao gồm bất kỳ ký tự nào ngoại trừ

  • <, bắt đầu đánh dấu (thẻ, nhận xét, khai báo XML, phần CDATA và PI)
  • &, bắt đầu tham chiếu thực thể,
  • chuỗi ký tự, ]]>kết thúc phần CDATA.

Đang chạy trốn:

  • Thoát <như &lt;trong dữ liệu ký tự.
  • Thoát &như &amp;trong dữ liệu ký tự.
  • ]]>không thể xuất hiện trong dữ liệu ký tự; không có hình thức thoát.

Xem thêm:

  • Dấu trừ trong ngữ pháp đặc tả w3c