[20] [DFN[[RUBYB[記法]@en[notation]]]]は、 [[SGML]] において [[SGML]] 
以外の“[[データ形式]]”を識別するために使われる概念です。

* 仕様書

[REFS[
- [5] [CITE@EN[Extensible Markup Language (XML) 1.0 (Fifth Edition)]] ([TIME[2013-05-29 05:49:56 +09:00]] 版) <http://www.w3.org/TR/xml/#Notations>
]REFS]

* 用法

[21] [[記法]]は次のように使われます。

- [[SGML]] [[データ実体]]や [[XML]] [[非解析対象実体]]について、その形式を表すものとして ([[実体宣言]]に[[記法名]]を指定)
- [[SGML]] や [[XML]] の[[要素]]の[[内容]]について、その形式を表すものとして ([[記法属性]]に[[記法名]]を指定)
- [[XML]] の[[処理指令]]について、その種別を表すものとして ([[対象名]]として[[記法名]]を利用)

[22] 特に[[引数実体]]を[[宣言]]する際に[[記法]]を指定することでその[[実体]]は[[DTDデータ実体]]となります。
すなわち、 [[SGML DTD]] 以外でそれと同様の[[宣言]]を行う他のデータ形式のものを参照できるようです。

[23] [[要素]]の[[内容]]を表すものの例として、初期の [[HTML]] の案においては [CODE(HTMLe)@en[[[style]]]]
[[要素]]の[[内容]]を「[[CSS]]」や「[[DSSSL]]」などの[[記法]]を指定する[[記法属性]]によって指定することが検討されていました。

[35] 
[[データ]]の[[形式]]を表すものとして[[拡張子]]や
[[MIME型]]のようなものがありますが、
[[記法]]は 
[[SGML]] でそれに相当する概念といえます。

* 記法 (SGML)

[6] 
[DFN[[RUBYB[データ[RUBY[内][ない]][RUBY[容][よう]][RUBY[記][き]][RUBY[法][ほう]]][data content notation]]]]とは
[SRC[[[JIS X 4151]]‐1992 定義 (178)]]:

>[[要素]]の[[データ内容]]又は[[データ実体]]の[[応用依存]]の表現法であって、通常の[[文書文字集合]]の意味を拡張又は変更を表す。[INS[(ママ)]]
>備考 [[記法属性]]によって[[要素内容]]を指定し、[[実体宣言]]の[[記法名引数]]によってデータ実体を指定する。 


[7] >>6 にある JIS の備考はいささか意味不明ですが、要は、[[要素の内容]]の記法を指定したいときは [CODE(SGML)[[[NOTATION]]]] 型の属性を、[[データ実体]]の記法を指定したいときは [CODE(SGML)[[[NDATA]]]] 引数を使いなさいと、遠まわしに謎の倒置法で説明していると思われます。

[8] 単に[DFN[記法]]とだけ言えばそれで意味が通じることも少なくないので、普段はそう呼ばれます。

[34] [[データ実体]]に使う[[記法]]を[[データ内容記法]]と言うのは用語としておかしくも感じられますが、
[[SGML]] として特に[[データ内容]]の[[記法]]と[[データ実体]]の[[記法]]を区別していないので、
どちらも[[データ内容記法]]というのでしょう。しかし修飾語があまり意味をなしていないことから、
単に[[記法]]ともいうのでしょう。

[19] [[データ実体]]に対しては[[データ属性]]を指定することができます。[[要素]]に対する[[属性]]が[[要素型]]に関する[[属性定義並び宣言]]で[[宣言]]されるように、
[[記法]]に関する[[属性定義並び宣言]]によって[[データ属性]]は[[宣言]]されます。

- [11] [CODE(ABNF)[[DFN[記法宣言]] := [CODE(SGML)[[[mdo]]]] [[NOTATION]] 1*[[ps]] [[記法名]] 1*ps [[記法識別子]] *ps [CODE(SGML)[[[mdc]]]] ;; (148)]]

* 記法形式 (SGML)

[18] 
>
:3.81 [DFN[[RUBYB[記法形式]@en[notation form]]]]:
[[データ実体]]と[[記法データ内容]]に適用する[[体系的形式]]。

出典: [[ISO/IEC 10744]]:1997 [CSECTION@en[3 Definitions]] 
<http://www.y12.doe.gov/sgml/wg8/docs/n1920/html/clause-3.html#def-3.81>

* 記法 (XML)

[26] [DFN[[RUBY[記法][きほう]@en[notation]]]]は、
その[[名前]]により、
[[非解析対象実体]]の[[書式]]や[[記法属性]]が付された[[要素]]の[[書式]]、
[[処理指令]]の対象となる[[応用]]を識別するものです [SRC[>>5]]。

[9] [DFN[[RUBYB[記法宣言]@en[notation declaration]]]]
([DFN[[CODE(XML)@en[[[<!NOTATION>]]]]]]) は、
[[記法]]の[[名前]]と[[外部識別子]]を示すものです [SRC[>>5]]。

** 文脈

[27] [[記法宣言]]は、 [[DTD]] に含めることができます。

[28] [[名前]]が同じ[[記法宣言]]を複数含めては[['''なりません''']] [SRC[>>5]]。

;; [[妥当性制約]]です。

** 処理

[10] [[XML処理器]]は、[[応用]]に対して、[[記法宣言]]によって[[宣言]]され[[属性値]]や[[属性定義]]、[[実体宣言]]で[[参照]]された[[記法]]の[[名前]]や[[外部識別子]]を提供しなければ[['''なりません''']]
[SRC[>>5]]。

[1] [[XML処理器]]や[[応用]]は、[[外部識別子]]を使って当該[[記法]]によるデータを処理できる[[ヘルパーアプリケーション]]
(の[[ファイル名]]その他必要な情報) を決めることができます [SRC[>>5]]。

;; [29] [[実体宣言]]等の場合とは異なり、[[型録]]によって [[URL]] に[[解決]]したり、
[[URL]] を使って何らかの情報を得たりすることは特に求められていません。
この意味で[[記法宣言]]の[[システム識別子]]は[[名前空間URL]]と似た性質を持っているとも言えます。

** メモ

[30] ([[SGML]] でなく) [[XML]] で[[記法]]がどれだけ使われているかは大変怪しいところです。

[31] [[要素]]の[[内容]]や[[要素]]から参照・埋め込みされているものの種別を表すためには、
[[MIME型]]がよく使われています。

[32] [[処理指令]]の[[対象名]]は、通常[[宣言]]無しで使われ、
衝突の可能性は考慮されません (し、実際衝突が問題となる場面はほとんどないでしょう)。

[2] XML では、[[非解析実体]]の[[実体宣言]]についての
[[XML//妥当性制約]]「記法が宣言されていること (Notation
Declared)」<http://www.w3.org/TR/REC-xml#not-declared> 
があります。

>The Name must match the declared name of a notation.
[WEAK[([CODE(XML)[[[Name]]]] は宣言された記法の名前に一致しなければならない。)]]

[3] この妥当性制約、その[[実体]]が[[参照]]されなかった場合や〃名前の実体の宣言が複数あって、
その宣言が無視される時にも適用されるのでしょうか?

特に明記はされていませんが、
妥当性制約の文章がそのような可能性を無視して生成規則 
[CODE(XML)[Name]] の部分が[[一致]]しなければならないとだけ述べていますから、
そのような場合でも適用されると考えられます。
(See also [[実体宣言]>>6])

[4] で、 >>2 で宣言されていることって書いてありますけど、
その[[記法宣言]]は実体宣言の後ろでもいいんでしょうか?
前じゃないといけないんでしょうか?
「the declar''ed'' name」とありますけど、
これは[[過去形]]ではなく[[過去分詞]] ([[受身]]的意味) ですね。

というわけで [[JISX4151]]‐1992 9.5.5 を参照してみると、
「記法名は、この実体宣言と同一の[[文書型定義]]の中で宣言していなければならない。
その宣言は、この実体宣言に先立っていなくても差し支えないが、
その実体への参照よりも前になければならない。」

なるほど、宣言時に宣言の構文的妥当性を、
参照時に宣言の内容的妥当性を検査するという SGML
全体の設計によく整合しています。

XML では (見落としてなければ) 特に記述はありませんが、
同じと考えていいですかね?

* キーワード [CODE(SGML)@en[NOTATION]]

[12] [[記法宣言]]をあらわす[[見出し語]]。

[13] [[記法識別子]]であることをあらわす[[公開文種別]]。

[14] [[ISO/IEC 10744]]:1997 で[[字句模型]]に [CODE(SGML)@en[[[NOTATION]]]]
が現れた場合、その [CODE(SGML)@en[[[NOTATION]]]]
の適用先は、[[クライアント文書]]を最初に探し、
なければ[[体系的文書]]を[[クライアント文書]]に近い側から当該[[字句模型]]が使われている[[体系]]まで順に探して最初に見つかったものとなります
[SRC@en[[[ISO/IEC 10744]]:1997 5.2]]。

[REFS[
- [15] [[ISO/IEC 10744]]:1997
-- [CSECTION@en[5.2 Lexical type]] 
<http://y12web2.y12.doe.gov/sgml/wg8/docs/n1920/html/clause-5.2.html>
]REFS]

* 関連

[SEE[ [[非解析対象実体]] ]]

* メモ

[16] [CITE@EN[W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes]]
( ([TIME[2012-04-05 06:34:51 +09:00]] 版))
<http://www.w3.org/TR/2012/REC-xmlschema11-2-20120405/#NOTATION>

[17] [CITE@EN[W3C XML Schema Definition Language (XSD) 1.1 Part 1: Structures]]
( ([TIME[2012-04-05 06:34:07 +09:00]] 版))
<http://www.w3.org/TR/2012/REC-xmlschema11-1-20120405/#cNotation_Declarations>

[24] [CITE@en[XQuery and XPath Data Model 3.0]]
( ([TIME[2014-04-08 07:00:06 +09:00]] 版))
<http://www.w3.org/TR/xpath-datamodel-3/#qnames-and-notations>

[25] [CITE@EN[XPath and XQuery Functions and Operators 3.0]]
( ([TIME[2014-04-08 07:02:07 +09:00]] 版))
<http://www.w3.org/TR/xpath-functions-3/#NOTATION-functions>

[33] [CITE@en[RFC 3017 - XML DTD for Roaming Access Phone Book]]
([TIME[2015-06-14 15:37:05 +09:00]] 版)
<https://tools.ietf.org/html/rfc3017#section-4>