#?SuikaWiki/0.9 -[1] ''ToyFish.Net'' -[2] ''TR List/J_Tpc'' - [3] ''どら猫本舗のリファレンスカウンター'' - [4] ''XML'' は機械部品系で[[登録商標]] (登録3334400) の他、出版系の会社?が登録申請中です (商願2001-090297)。後者は謎のロゴを含めた登録で、 [[W3C]] XML に関係する書籍のロゴでないかと思われます。 - [5] [[W3C]] XML [[Activity]]: ''Extensible Markup Language (XML)'' - [6] ''Extensible Markup Language (XML) 1.0'' - [7] ''Extensible Markup Language (XML) 1.0'' : First Edition - [8] XML 氏んじゃの一部の人達って [[SGML]] 的構文 ([[DTD]] とか。) を毛嫌いしている嫌いがありますけど、たしかに XML の実装を作ってみるとわかります。 XML では文書インスタンスは[[完全タグ付き]]だから随分簡単に実装できちゃうんですけど、[[マーク宣言]]や[[マーク区間]]はそれが通用しない茨の道というか。 - [9] SGML から XML にしたときに文書インスタンス本体は完全タグ付きで単純にしたのに、 DTD は SGML 構文で取り残された形だから、 SGML ではどっちも似たようなものだったのに、 XML ではやけに複雑なきがしてしまうんだよね、 DTD とかが。 - [10] もうこうなってしまうと、マーク宣言もマーク区間も、 SGML 的な (XML からみたら) 「特殊」な構文を使うのではなく、 (XML からみたら) 一般的な[[タグ]]の構文にしちまえ、 [[XML名前空間]]だってあるんだしさ〜、という気持ちになってくる。 - [11] ''Errata in REC-xml-20001006'' - [12] ''To XML from HTML'' : [[SGML]] 側からみた [[XML]], というか [[ISO/IEC]] や 「「JIS]] の動向。 - [13] ''XMLの現状'' - [14] [WEAK[2004-02-05 12:07:54 +00:00]] ''[[名無しさん]]'': XML 1.0 TE, XML 1.1, XML Names 1.1, XML 情報集合 1.1 が一気に W3C 勧告になりました。 - [15] XML 1.0 TE, XML 1.1 は前規格との diff がありますけど、 Names と Infoset はなし。ひどいなあ。 XML も PR と REC の diff がないのは嬉しくない。仕方ないから [[XMLspec]] 版の diff 取ったら、ソース整形が一杯あって嫌になります。。。 で、 diff の結果ですが、 XML 1.1 PR→REC は細々した修正が多々と、 charmod WD への参照をやめて一部抜粋附属書化。技術的には大体 PR と同じでしょう。 (大違いだったら REC にはならんわな。) Names PR→REC も細々が多々。 1.0 TE PER→CR と Infoset は見てませんけど、どうせ同じような感じでしょう。 [16] XML 1.0 TE の変更点: - SE に対する errata の適用 - [[RFC2119]] 見出し語の採用 -- [CODE[[[[may]]]], [CODE[[[must]]]] の定義の削除 -- 見出し語 [CODE[[[MUST]]]], [CODE[[[REQUIRED]]]], [CODE[MUST NOT]], [CODE[[[SHALL]]]], [CODE[SHALL NOT]] への違反が (特に言及がない限り) [[誤り]]であるとされた [WEAK[([CODE[must]] は以前から誤りだったが、他は新規)]] - [CODE(char)[<]] を含む[[内部実体]]を宣言しても意味がないという注記に「一般」(実体) と補われる。 - [CODE(char)[&]] や [CODE(char)[<]] が[[注釈宣言]]や[[処理指令]]などでのみ生で出現できるから、それらを除いて出現しては'''ならない'''に改められた - 注釈宣言で[[引数実体参照]]が認識されないから認識'''してはならない'''に修正された - [[処理指令]]で引数実体参照が認識されないから認識'''してはならない'''に修正された - [[内部部分集合]]の引数実体参照について、マーク宣言外にのみ出現できるから、マーク宣言外では出現しても'''よい'''、マーク宣言外では出現しては'''ならない'''に改められた - 内部部分集合の後に[[外部部分集合]]があるものと考えるから、そう考えないと'''ならない'''に改められた - [Q[一つの開始タグ中で複数回現れても良い属性名はない]]から、[Q[現れては'''ならない''']]に改められた - [[属性値表記]]が[[外部非解析実体]]への[[実体参照]]を含めることはできないから'''ならない'''に改められた - 複数回[[要素型宣言]]に現れても良い[[要素型名]]はないから、要素型名は複数回現れては'''ならない'''に改められた - [[属性指定]]は[[開始タグ]]にのみ出現できるから、開始タグ以外に出現しては'''ならない'''に改められた - 複数の[[識別子属性]]を持てる要素型はないから、要素型は複数持っては'''ならない'''に改められた - [[列挙属性]]は値並びから一つ取れるから、取らなければ'''ならない'''に改められた - 複数の[[記法属性]]を持てる要素型はないから、要素型は複数持っては'''ならない'''に改められた - [[条件区間]]でマーク区間の内容が DTD の一部とみなされる・無視されるがみなさなければ'''ならない'''・無視しなければ'''ならない'''に改められ、 引数実体参照がこの過程では認識されないからしては'''ならない'''に改められた - 「解析実体の内容」が、 [Q[a parsed entity's contents]] から [Q[the contents of a parsed entity]] に改められた - [Q[引数実体参照は DTD 内にだけ現れても良い]]から、 [Q[DTD 外に現れては'''ならない''']]に改められた - [Q[外部解析実体の頭以外に現れても良い[[文宣言]]はない]]から、 [Q[現れては'''ならない''']]に改められた - [Q[[[置換文]]はその場にあったかのように処理する]]から[Q[しなければ'''ならない''']]に、[Q[置換文中の引用符は通常データ文字として扱い、[[表記]]の終端とはしない]]から[Q[扱わなければ'''ならず、終端としては'''ならない''']]に改められた - [Q[迂回してそのままにする]]から[Q[しなければ'''ならない''']]に改められた - [Q[前後に[[間隔]]を補って展開する]]から[Q[しなければ'''ならない''']]に、 [Q[ただし[[実体値]]中ではそうしない]]から[Q[しては'''ならない''']]に改められた - [CODE(XML)[[[gt]]]] などの二重[[逃避]]は[Q[不必要]]から[Q['''[[任意選択]]''']]に改められた - [Q[一つの[[記法宣言]]だけがある[[名前]]を宣言できる]]から、 [Q[ある名前が複数の記法宣言で宣言されては'''ならない''']]に改められた - 参考文献で当該文書へのリンクの始点が URI 文字列から文書名に改められた - [Q[XML 作業部会の構成員]]が[Q[関係者]]に改められた - XML 中核作業部会の章が第2版のものから第3版のものに改められた - [[XMLspec]] についての章が書き改められた SE に対する errata で既に修正された部分は大きな変更が幾つかあるのでそれはそれで重要なのですが、 他の言い回しの変化も重要かもしれません。 たとえば、[Q[一つの開始タグ中で複数回現れても良い属性名はない]]から、[Q[現れては'''ならない''']]に改められていますが、 以前は以前は[Q[ない]]と断定されていた以上、そうであるとしか言えませんでしたが、 TE では[Q['''ならない''']]ので、不適合文書ではそうではないことがあり得ます。 そして適合解析器は[Q['''ならない''']]ときにこれを誤りと見なすので、 回復しても'''構いません'''。 単なる言葉尻のことに過ぎないというのなら、それはそれで構いませんけど。 [17] XML 1.0 TE から XML 1.1 の変更点: - [[一致]]の定義で、[[ISO/IEC10646]] から [[Unicode]] に変更された (マークされていない) - 変更点解説 の追加。内容をまとめると: -- XML 1.0 は 1998 年の最初の勧告以来、何が[[整形式]]でなにがそうでないかは変えずに来た。これは[[相互運用性]]的には極めて有用だ。 -- しかしその間に XML の参照する [[Unicode]] はどんどん変わっていって、 [[名前]]に使えるべき文字が使えなかったり、そもそも本来使えるべきでない文字が名前文字になっていた。 -- 名前文字の定義の仕方をまったく変えて、がちっと決めてしまうのではなく、 禁止文字以外なんでもありにした。 -- [[メインフレーム]]の[[改行]]文字が[[空白]]じゃなくて不便だったので、 追加した。完全性のために [CODE(char)[U+2028]] も追加した。 -- [CODE(char)[[[C0]]]] を使いたいという要求が多かったので、 [CODE(char)[[[NULL]]]] 以外は[[文字参照]]でなら使えるようにした。 [[頑強性]]のため、 [CODE(char)[[[DEL]]]] と [CODE(char)[[[C1]]]] は文字参照でないと使えないようにした。 -- [DFN[[[完全正規化]]]]制約集合を追加した。 著者は従う'''べき'''だし、処理器は検証する'''べき'''だ。 完全正規化されていれば[[バイナリ比較]]できる。 -- 整形式の定義に関わるので新しい版とした。 版は [[XML宣言]]の版宣言で区別する。 - [CODE(ABNF)[[[document]]]] の定義で、[[制限文字]]の除外が追加された - [CODE(ABNF)[[[Char]]]] の定義が拡大され、 [CODE(char)[C0]] ([CODE(char)[NULL]] を除く。) が追加された - 新しい生成規則 [CODE(ABNF)[[[RestrictedChar]]]] - [Q[Unicode 3.1 の符号化 [[UTF-8]], [[UTF-16]]]] から [Q[Unicode の符号化]]に改められた (マークされていない) - [[互換文字]]についての [[UnicodeStandard]] 参照から章番号が削除された (マークされていない) - 文字の分類 (附属書 B) についての言及が削除された - 名前の文字について追記された 概要: -- 名前は [CODE(ABNF)[NameStartChar *NameChar]] でなければ'''ならない'''。 つまり[[欧州数字]]と[[基本結合文字]]は最初に来れない。 -- [[区切子]]以外のほとんどの文字が名前に使える。 定義は排他的ではなく包含的なので、まだ Unicode にない[[書字系]]も使える。 -- 名前についての提案 (附属書 I) を参照されたし。 -- [[文書著者]]は、自然言語的に意味のある名前を使い、 記号的な名前や空白を避けるように推奨する (encouraged)。 -- [CODE(char)[[[COLON]]]], [CODE(char)[[[FULL STOP]], [CODE(char)[[[HYPHEN-MINUS]]]], [CODE(char)[[[LOW LINE]]]], [CODE(char)[[[MIDDLE DOT]]]] は陽に認める。 -- 記号・句読点の多くは、 XML 文書以外で名前を使う場合も想定し、 除外している。 -- [CODE(char)[[[GREEK QUESTION MARK]]]] は正規化すると [CODE(char)[[[SEMICOLON]]] になってしまうので除外している。 - [CODE(ABNF)[NameStartChar]] が追加された。 - [CODE(ABNF)[NameChar]] の定義が大きく変更された。 - [CODE(ABNF)[Name]] の定義が [CODE(ABNF)[NameStartChar]] を使うように変更された。 - (要素の内容の文字は) [Q[どのマークの開始区切子も含まないし、 CDATA 区間閉じ区切子も含まない]]が[Q[どのマークの開始区切子も CDATA 区間閉じ区切子も含まない]]に改められた。また、二つ目の [Q[CDATA 区間閉じ区切子, [CODE(XML)[ ] ] >]]]] が単に [Q[CDATA 区間閉じ区切子]]に改められた。 (マークなし) - [Q[XML 文書]]が [Q[XML 1.1 文書]]にに変更された。 (マークなし) - 例示中の [Q[version="1.0"]] が [Q[version="1.1"]] に変更された。 (マークなし) (マークなし) - XML 宣言のない例の説明が、 XML 1.0 とみなされる旨に変更された。 (マークなし) - [CODE(ABNF)[[[prolog]]]] で [CODE(ABNF)[[[XMLDecl]]]] が必須となった。 (マークなし) - XML 1.0 との関係についての記述が追加された <- [Q[XML 文書]]が [Q[XML 1.1 文書]]に、 例示中の [Q[version="1.0"]] が [Q[version="1.1"]] に変更された。 概要: -- 1.1 処理器は XML 1.0 文書も受け入れる'''べきである'''。 -- 1.0 整形式/妥当で、 [CODE(char)[U+007F]] や [CODE(char)[[[C1]]]] を生で含まなければ、版番号を直すだけで 1.1 整形式/妥当である。 - [CODE(ABNF)[SDDecl]] の [CODE(ABNF)[[[S]]]] が [CODE(ABNF)[1*[CODE(char)[U+0020]]]] に変更された。 (マークなし) - 改行の処理についての変更。 概要: -- 次は、 [CODE(char)[[[U+000A]]]] に変換する。 --- [CODE(char)[[[U+000D]]]] [CODE(char)[U+000A]] (従来通り) --- [CODE(char)[U+000D]] [CODE(char)[[[U+0085]]]] --- [CODE(char)[U+0085]] --- [CODE(char)[[[U+2028]]]] --- [CODE(char)[U+000D]] (従来通り) -- [[符号化宣言]]を読むまで表現が不定であるから、 [CODE(char)[U+0085]] や [CODE(char)[U+2028]] を XML 宣言や[[文宣言]]で使うことはできず、[[致命的誤り]]とする。 - 正規化検査の章が追加された。 概要: -- すべての[[解析実体]]は、附属書 B とこの章の [DFN[XML の[[関連構造]]]]の定義にしたがって完全正規化されている'''べきである'''。 XML の関連構造 (relavant constructs) とは、 --- 解析実体の[[置換文]] --- [CODE(ABNF)[Cdata]] --- [CODE(ABNF)[CharData]] --- [CODE(ABNF)[content]] --- [CODE(ABNF)[[[Name]]]] --- [CODE(ABNF)[Nmtoken]] -- 文書は完全正規化されていなくても整形式である。 -- XML 処理器は[[利用者の任意選択]]で完全正規化形かどうかを検証 (verify) することができる'''べきである'''。 検証しない選択肢は完全正規化形であることが[[保証]] ([[certify]]) されているときのみ選ぶ'''べきである'''。 -- 完全正規化形検証は、次の手順であるかのように行わなければ'''ならない''': --= まず[[取込み正規化形]]であるかを検証 --= 関連構造 (参照展開済み) の中に[[合成文字]] ([[composing character]]) で始まるものがないか検証 --- メモ: 合成文字とは、すべての [[Unicode]] の非零[[結合級]] (cmbining class) の文字と、零級であるにもかかわらずある Unicode [[正準分解]] (cannonical decomposition) の最初以外になる文字。 これらの文字は[[基底文字]]の後に続くことを想定したものだから、 関連構造の先頭から排除しても実質表現力低下には至らない。 -- 非検証 (validating) 処理器は、読んでいない[[外部実体]]の取込みにより起こり得る非正規化 (denormalization) を無視しなければ'''ならない'''。 -- 完全正規化形検証において正規化特性を得られない文字 (処理器が対応している Unicode の版より後で追加された文字) に遭遇したら、利用者の任意選択により、その文字により起こり得る非正規化を無視しても'''よい'''。 信頼性や安全性が重要である応用はこれを既定では選択する'''べきではない'''。 -- XML 処理器は入力を完全正規化形にかえては'''ならない'''。 -- XML 1.0/1.1 を出力する応用は、それが完全正規化されているようにする'''べきである'''。 -- 内部処理形が完全正規化されている必要はない。 -- この章の目的は、 XML文書の作者が適切に文書を正規化するように XML 処理器を推奨 (encourage) することで、 XML 応用が複数の「綴り」 をいちいち検査しなくても文字列一致ができるようにというところにある。 -- 実体が非 Unicode 符号化であって、処理器がこれを Unicode に変換するときは、[[正規化転符号器]]を使う'''べきである'''。 - [CODE(ABNF)[extParsedEnt]] で制限文字の除外が書き加えられました。 - [CODE(ABNF)[extParsedEnt]] で [CODE(ABNF)[restrictedChar]] を除外するように修正された。 - 実体と XML 版情報についての節が追加された。 概要: -- [[文書実体]]の版が文書全体の版となる。 -- XML 1.1 文書は XML 1.0 外部実体を呼び出しても良い。 そのような場合でも文書全体に XML 1.1 の規則が適用される。 - 適合性について追記された。 (マークなし) 概要: -- XML 1.1 処理器は XML 1.0 も処理できないと'''いけない'''。 -- XML 生成プログラムは XML 1.1 の機能を使う場合以外 1.0 文書を生成する'''べきである'''。 - [Unicode3] 参照が [Unicode] 参照に改められた。 (マークなし) - ISO/IEC 10646・Unicode 参照の章番号が削除された。 (マークなし) - [ISO/IEC 10646] が最新版参照に改められた。 (マークなし) - [Unicode] が最新版参照に改められた。 [Unicode3] は削除された、 (マークなし) - [XML-1.0] が追加された。 - [Charmod] が追加された。 - 附属書 B 文字級が削除され、新しい附属書 B 文字正規化が追加されました。 (マークされていない (XMLspec 注釈にはある)。) 概要: -- 文字正規化に関する定義をする。背景情報と例示は [Charmod] を参照。[WEAK[(Draft では完全に Charmod 参照だったけど、 Charmod はまだ WD だから定義をコピペしたらしい。)]] -- 文が [[UTF-8]], [[UTF-16]] または [[UTF-32]] で符号化されているとき、 [DFN[[[Unicode符号化形]]]]であるという。 -- [DFN[[[遺産符号化]]]]とは、 Unicode に基づかない任意の文字符号化を意味する。 -- [DFN[[[正規化転符号器]]]]とは、遺産符号化から Unicode 符号化形に変換し、結果が確実に [[Unicode正規化形C]] になる転符号器である。 -- [DFN[[[文字逃避]]]]とは、マーク付け言語またはプログラム言語で、 次の一つ以上を実現する構文装置である。 --- 構文で意味を持つ文字を、その意味を持たさずに表現する --- 選択した文字符号化で表現できない文字を表現する --- 一般に文字を対応する[[文字符号]]を使わずに表現する -- [DFN[[[保証]]]]文は、次の最低一つを満足する。 --- 文が検査により正規化形されていることが確認されている --- 原始文処理部品がわかっていて、正規化文だけを出力することを知っている -- 文は、次の条件を満たすとき、この仕様書の目的においては [DFN[[[Unicode正規化]]]]されている。 --- Unicode 符号化形である --- 次のうちの新しい方の版の Unicode 規格において [[NFC]] である。 ---- [[Unicode3.2]] ---- 実際に文に含まれている全ての文字を含む最古の版 -- 文は、次のいずれかを満たすとき、[DFN[[[取込み正規化]]済み]]である。 --- Unicode 正規化されており、それを取込むことによって正規化形でなくなる文字参照や取込みを含まない。 --- 遺産符号化されており、正規化転符号器を使ったとしたら前項を満たす。 -- [DFN[[[合成文字]]]]は、次の一方又は両方を満たす。 --- なんらかの[[一次分解]]の[[正準分解写像]]の第2文字である。 --- 非零[[結合級]]である。 -- 次のいずれかの時、文は[DFN[[[完全正規化]]]]されている。 --- 文は Unicode 符号化形であり、取込み正規化されており、 関連構造で合成文字や合成文字を表す文字逃避で始まるものがない。 --- 文は遺産符号化であり、正規化転符号器で Unicode 符号化形に変換したとすると前項を満たす。 - 附属書 C XML と SGML が削除された。 (マークされていない。 XMLspec 注釈にはある。) - 附属書 D〜I が附属書 C〜H に繰り上げられた。 (マークされていない。) -- 附属書 C に [CODE(XML)[version="1.0"]] の例がある! 続く。。。 [18] [CODE(char)[U+0085]] や [CODE(char)[U+2028]] が XML 宣言/文宣言で使えない件、 本当は他の文字だって符号化方式が確定しないと分からないのだけどね。 (非 ASCII 文字が混じると推定が難しくなるのは確かだから、適当な線引きだとは思うけど。。。) [19] [CODE(ABNF)[CData]], [CODE(ABNF)[PI]], [CODE(ABNF)[Comment]], [CODE(ABNF)[CharData]], [CODE(ABNF)[EntityValue]], [CODE(ABNF)[AttValue]], [CODE(ABNF)[SystemLiteral]], [CODE(ABNF)[Ignore]] の定義は改められていない。 [CODE(ABNF)[Document]] や [CODE(ABNF)[extParsedEnt]] から [CODE(ABNF)[restritedChar]] が除外されているのだから、 [PRE[ ]PRE] は不可だけど、 [PRE[ "> %foo; ]PRE] ならいいのだろう。 実体参照を置換した結果が [CODE(char)[C0]] や [CODE(char)[C1]] を含んだ[[注釈]]や[[処理指令]]を持っていたら、 (実体参照が存在したという情報を除去して、完全に置換してしまっていたら) 再度 serialize することが (適当な実体でもでっち上げない限り) できなくなってしまう。 [[DOM]] のようにプログラム等から実体を作ろうとする場合も同様。 (従来このような問題は、 [CODE[--]] のような分離子を含めようとしたときか、 非 ISO/IEC 10646 符号化方式で保存しようとしたときにしか生じなかった。) [20] [CODE(XML)[[[standalone]]]] 疑似属性の前の [CODE(ABNF)[S]] は [CODE(ABNF)[#x20+]] にしたのに、 XML 宣言/文宣言の他の [CODE(ABNF)[S]] はそのままのはなぜ? [21] XML 1.1 文書から参照されている XML 1.0 外部解析実体は XML 1.1 の規則が適用される。ということは、 [CODE(char)[C1]] が含まれた外部解析実体は整形式でなくなる。 また、 [CODE(XML)[version="1.0"]] または版情報なしの外部実体を XML 1.1 文書から参照していると、その実体の整形式性・妥当性は正しく検証されるとは限らないわけだ。 (だから XML 1.0 外部実体が正しいか検証するのに、 XML 1.1 文書実体を使ってはいけない。当たり前と言えば当たり前だが。 XML 1.1 外部解析実体のつもりで文宣言を忘れるというのはありうるミスだから、検証器は警告してくれるといいかもしれない。)