Понимание XML CharData EBNF

Nov 13 2020

Следующее правило EBNF выражается как

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

мне действительно трудно понять. Может кто-нибудь привести несколько примеров действительных и недействительных строк. Краткое объяснение того, что выражается в правиле, также будет очень полезно. Хотя, возможно, просят многого. Также было бы очень хорошо, если бы у вас есть интересный фрагмент кода C ++, который поможет отловить это происшествие.

Ответы

kjhughes Nov 13 2020 at 08:57

Производство EBNF для CharData,

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

означает, что символьные данные XML могут состоять из любых символов, кроме

  • <, с которого начинается разметка (теги, комментарии, объявления XML, разделы CDATA и PI)
  • &, который начинает ссылки на сущности,
  • строка символов, ]]>завершающая секцию CDATA.

Побег:

  • Escape <как &lt;в символьных данных.
  • Escape &как &amp;в символьных данных.
  • ]]>не может появляться в символьных данных; ускользающей формы нет.

Смотрите также:

  • Минус в грамматике спецификации w3c