4

CDATAは次のようにXMLで使用されます。

<my-tag><![CDATA[my-data]]></my-tag>

これは非常に珍しい構文です。私が最初にそれを見たとき、それは私がまだ学んでいないいくつかの一般的なXML構造の特定の形式であると思いました。しかし、私が知る限り(XML CDATA仕様)はそうではありません。

私の質問:CDATAセクションがそのように見える理由はありますか?たとえば、SGMLの特殊なケースですか?あるいは、ある言語設計者は、ある日「CDATAの前に角かっこを付け、後で角かっこを付け、感嘆符を山かっこで囲んでCDATAセクションを作成する」と考えたのでしょうか。

4

1 に答える 1

9

CDATA セクションは、マークされたセクションです。SGML には、抽象構文と具象構文の両方があります。マーク付きセクション宣言の抽象構文は、マークアップ宣言オープン(mdo)区切り文字で始まり、その後に宣言サブセット オープン( dso) 区切り文字が続きます。次にステータス キーワードが続き、その後に 2 番目の宣言サブセット オープン(dso)区切り文字が続きます。マーク付きセクションは、マークアップ宣言クローズ(mdc)区切り文字が続くマーク付きセクション クローズ(msc)区切り文字で終了します。したがって、マークされたセクション宣言の抽象構文は次のとおりです。

mdo dso status-keyword dso my-data msc mdc

ドキュメントごとに具体的な構文が定義されています。この構文は、各ドキュメントに関連付けられた SGML 宣言内で指定されます。具体的な構文は、ドキュメントに使用される区切り文字を定義します。ISO 8879:1986 で定義されていると思われるデフォルトの SGML 区切り文字は次のとおりです。

  • マークアップ宣言を開く:<!
  • 宣言サブセットが開いています:[
  • マークされたセクションを閉じる:]]
  • マークアップ宣言を閉じる:>

ただし、独自の具体的な構文を自由に定義できるため、区切り文字として使用される文字を変更できます。

したがって、マークされたセクション宣言のデフォルトの具体的な構文は次のとおりです。

<![ status-keyword [my-data]]>

可能なステータスキーワードは次のとおりです: CDATA、RCDATA、IGNORE、INCLUDE、TEMP

これにより、次のことがわかります。

<![ CDATA [my-data]]>

Martin Bryan著SGML and HTML Explainedの次の章を参照してください。

于 2013-03-16T21:47:53.217 に答える