【问题标题】:Deciphering EBNF from XML specification从 XML 规范中解密 EBNF
【发布时间】:2014-04-11 02:12:03
【问题描述】:

看看下面的定义。这到底应该定义什么?根据EBNFspecification,括号[]定义了一个可选项,那么为什么*是必需的呢?这不是多余的吗(因为这意味着重复零次或多次)?

第二件事是,你如何解释括号内的部分? - 是排除指示符,所以它是否意味着排除括号内的任何项目,或所有三个项目的序列(零个或多个来自^<&,后跟]]>,后跟零个或多个来自@987654327 @)?

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

或者我完全弄错了,这不是 EBNF?

提前致谢

【问题讨论】:

    标签: ebnf


    【解决方案1】:

    XML 规范并未严格使用 ISO 指定的 EBNF。如果您查看 XML 规范的 Section 6,它定义了使用的符号。方括号以类似正则表达式的方式使用,而不是表示语法的可选元素;并且用于排除的- 将括号内的组作为一个整体排除在外。因此,您引用的行表示如下:

    • [^&lt;&amp;] - 不是左尖括号 (&lt;) 或 & 符号 (&amp;) 的任何字符
    • [^&lt;&amp;]* - 零个或多个不是左尖括号或 & 符号的字符
    • [^&lt;&amp;]* - ([^&lt;&amp;]* ']]&gt;' [^&lt;&amp;]*) - 零个或多个字符不是左尖括号或 & 符号,并且不包含整个序列中任何位置的特定字符序列 ]]&gt;

    【讨论】:

    • 我错过了明显的!他们已经定义了语法。 ]]&gt; 指的是 CDATA 终止符,所以这比我的(错误的)解释更有意义。非常感谢!
    猜你喜欢
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    相关资源
    最近更新 更多