为什么XML中的CDATA语法看起来如此奇怪?
CDATA在XML中使用,如:为什么XML中的CDATA语法看起来如此奇怪?,xml,cdata,Xml,Cdata,CDATA在XML中使用,如: <my-tag><![CDATA[my-data]]></my-tag> 这是一种很不寻常的语法。当我第一次看到它时,我认为它是我还没有学习过的一些通用XML构造的一种特定形式。但是,据我所知()它不是 我的问题:CDATA部分看起来像这样有什么原因吗?例如,我是SGML的特例吗?或者某个语言设计师只是想有一天“我将制作一个CDATA部分,在CDATA之前加一个括号,之后加一个括号,一个感叹号,用尖括号括起来。”CDATA
<my-tag><![CDATA[my-data]]></my-tag>
这是一种很不寻常的语法。当我第一次看到它时,我认为它是我还没有学习过的一些通用XML构造的一种特定形式。但是,据我所知()它不是
我的问题:CDATA部分看起来像这样有什么原因吗?例如,我是SGML的特例吗?或者某个语言设计师只是想有一天“我将制作一个CDATA部分,在CDATA之前加一个括号,之后加一个括号,一个感叹号,用尖括号括起来。”CDATA部分是一个标记的部分。在SGML中,既有抽象语法,也有具体语法。标记节声明的抽象语法以标记声明打开(mdo)分隔符开始,后跟声明子集打开(dso)分隔符。接下来是一个status关键字,后跟第二个声明子集打开(dso)分隔符。标记的节以标记的节结束(msc)分隔符结尾,后跟标记声明结束(mdc)分隔符。因此,标记的节声明的抽象语法为:
mdo dso status-keyword dso my-data msc mdc
<![ status-keyword [my-data]]>
为每个文档定义了具体的语法。此语法在与每个文档关联的SGML声明中指定。具体语法定义了用于文档的分隔符。默认SGML分隔符(我假设在ISO 8879:1986中定义)如下所示:
- 标记声明打开:
- 声明子集打开:
[
- 已标记部分关闭:
]
- 标记声明关闭:
mdo dso status-keyword dso my-data msc mdc
<![ status-keyword [my-data]]>
可能的状态关键字有:CDATA、RCDATA、IGNORE、INCLUDE、TEMP
这让我们想到:
<![ CDATA [my-data]]>
参见Martin Bryan解释的SGML和HTML一书中的以下章节: