/
647.txt
1752 lines (1370 loc) · 102 KB
/
647.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
[19] [DFN@en[[ABBR[IRI]]]] ([DFN@en[Internationalized Resource Identifiers]]) は、
利用可能な[[文字]]の種類を [[ASCII]] ベースから [[Unicode]] ベースへと拡張した、
[[URI]] の[[超集合]]である[[識別子]] (の仕様) でした。
[173] 2005年に一旦 [[RFC]] となった後、 [[XML]] との互換性のために [[LEIRI]] を追加し、
[[Web]] との互換性のために [[HTML5]] における [[URI]]
の定義に近いものを追加するなどした改訂版の作業が行われていましたが、
[[IETF]] 内外からの関心を得られず、2013年1月に [[IETF]] の [[IRI]] [[WG]]
は閉鎖されました。これにかわって [[URL Standard]] が [[WHATWG]] [[Living Standard]]
となっています。
[FIG(important)[
[200] 本項は過去の [[URL]] 仕様に関するものです。本項の内容は当時の状況を説明したもので、
現状とは異なることがあります。最新の [[URL]] 仕様については [[URL Standard]]
を参照してください。
]FIG]
* 仕様
[49] 最新かつ正式な [[IRI]] の仕様は、 [[IETF]] の[[提案標準]]である
[[RFC 3987]] でした。 [[RFC 3987]] は2004年12月に [[IESG]] に承認され、
2005年1月に [[RFC]] として発行されました。
[176] 改訂作業が中止される前の最後の [[Internet Draft]] は [[draft-ietf-iri-3987bis-13]]
で、2012年10月に発行されました。
[REFS[
- [174] [[RFC 3987]] ([[IETF]] [[提案標準]]) <http://tools.ietf.org/html/rfc3987>
- [175] [CITE@en[draft-ietf-iri-3987bis-13 - Internationalized Resource Identifiers (IRIs)]] ([TIME[2014-02-09 09:18:04 +09:00]] 版) <http://tools.ietf.org/html/draft-ietf-iri-3987bis-13>
]REFS]
[FIG(important)[
[177] なお、 [[URL]] の現行仕様は [[URL Standard]] です。詳しくはそちらの項をご覧ください。
]FIG]
** IRI に関する様々な仕様と定義
[1] [[IRI]] の [[RFC]] ([[RFC 3987]]) が発行される前、あるいは発行された後にも、
[[URI]]/[[IRI]] 的なものを使う仕様の中には、 [[IRI]] 仕様を先取りして、あるいは独自に、
[[IRI]] のようなものを定義したり、 [[IRI]] の [[Internet Draft]]を参照したりしていました。
特に [[W3C]] の仕様書では、数多くの「[[IRI]] のようなもの」が定義されていました。
[50] たとえ実質的に同じ定義であったとしても、人為的なミス、仕様の改訂、政治的問題、
その他の理由で混乱が起こる危険性はあるので、困ったことですね、
などと昔ここに書いていたのですが、実際各仕様が定義している内容には少しずつ「ずれ」がある上、
その「ずれ」が[[遺物拡張IRI]] (旧称: [[XML資源識別子]]など) や [[HTML 5]] の [[URL]]
のような派生仕様を生み出すまでに至り、既に混乱は極まっている感があります。
*** 「IRI」や「IRI 参照」を定義している仕様
**** RFC 3987 IRI・IRI 参照
[13]
[[IETF]] で標準化された、“最も正しい”「[[IRI]]」や「[[IRI参照]]」の定義です。
両者は[[百分率符号化]]によって [[RFC 3986]] の [[URI]] や [[URI参照]]に変換できる文字列であり、
[[ABNF]] で構文が定義されています。
[52] 実は [[RFC 3987]] をよく読むと、 [[ABNF]] で表現されていない構文上の制約が本文中に含まれています。
[[RFC 3987]] を引用している仕様の中には、「[[RFC 3987]] の [[ABNF]] [[生成規則]]に[[一致]]するもの」
のような参照の仕方をしているものがありますが、それでは [[ABNF]]
に含まれない制約が厳密には参照されていないことになるので、要注意です。
[113] [[SVG Tiny 1.2]] は以前の案では [[XML資源識別子]]を使ったりしていましたが、
最後の[[勧告]]では結局 [[RFC 3987]] [[IRI参照]]になっています。
;; [[XLink]] の[[属性]]までも [[RFC 3987]] [[IRI参照]]になってたりします。
- [[RFC 3987]] ([[IETF]] [[提案標準]])
<urn:ietf:rfc:3987>, <http://www.ietf.org/rfc/rfc3987.txt>
-[CITE[Linking – SVG Tiny 1.2]] ([TIME[2008-12-20 02:31:29 +09:00]] 版) <http://www.w3.org/TR/2008/REC-SVGTiny12-20081222/linking.html>
[53] [[RFC 3987]] になる前の古い [[Internet Draft]] には、最終版とは異なる定義をしているものもあります。
古い [[Internet Draft]] を参照している仕様は要注意です。
[54] また、現在改訂の作業が進められており、 [[Internet Draft]] も発行されています
([[draft-duerst-iri-bis]])。改訂版には元々の [[IRI]] だけではなく、[[遺物拡張IRI]]
の定義も含まれています。
**** XPointer IRI 参照
[2]
「[[IRI]]」を [[URI]] の拡張で [[Unicode]] [[文字]]が使えるものと概念的に定義した上で、
[[XPointer]] [[指示子]]を「[[IRI参照]]」で使う方法や、[[IRI参照]]を [[URI参照]]に変換する方法を規定しています。
;; 用語として定義されているのは「[[IRI]]」ですが、実際規定があるのは
「[[IRI参照]]」 (と「[[URI参照]]」) です。 [[RFC 2396]]
時代の「[[URI]]」には[[素片識別子]]が含まれていないためでしょうか。
それによると、 [[XPointer]] [[指示子]]を [[IRI参照]]中で使う場合、 [CODE(char)[[[%]]]]
は[[百分率符号化]]を行わなければ[['''なりません''']]が、その他の[[文字]]はしても[['''構わない''']]のみです。
また、 [[IRI参照]]から [[URI参照]]への変換では、 [[RFC 2396]] と [[RFC 2732]]
で [[URI参照]]中に認められない[[文字]]を[[百分率符号化]]することになっています。
[55] [[XPointer]] [[指示子]]中には任意の [[Unicode]] [[文字]]
([CODE(char)[[[U+0000]]]] 〜 [CODE(char)[[[U+10FFFF]]]]、除外なし)
がそのまま使えることになっています。従って、
- [[XPointer]] [[IRI参照]]は [[RFC 3987]] [[IRI参照]]や[[遺物拡張IRI参照]]で認められていない
[[Unicode]] [[文字]]を含むことがあります。
- [[XPointer]] [[IRI参照]]では[[素片識別子]]内に [CODE(char)[#]]
を含むことがあります ([[RFC 3987]] [[IRI参照]]では不可)。
- [[XPointer]] [[IRI参照]]では [[authority]] [[部品]]以外でも
[CODE(char)[[['''[''']]]] や [CODE(char)[[[''']''']] を含むことがあります
([[RFC 3987]] [[IRI参照]]では不可)。
- [CITE@en[XPointer Framework]] ([[W3C]] [[勧告]])
-- [CSECTION@en[B. Escaping and Encoding of reserved IRI characters]],
[CSECTION@en[C. Escaping and Encoding of reserved URI characters]]
<http://www.w3.org/TR/2003/REC-xptr-framework-20030325/#dt-iri>
**** XML 名前空間 IRI 参照
[3]
[[XML名前空間 1.1]] の第1版は、当時 [[RFC 3987]] が出版されていなかったため、
[[RFC 3987]] になる前の [[Internet Draft]] である
[[draft-duerst-iri-03]] と [[draft-duerst-iri-05]] を参照しつつ
(どちらも non-normative reference)、独自に [[IRI参照]]を定義しています。
それによると、「[[IRI参照]]」は、 [[hostname]] 部品があればそれに
[[IDNA]] [[ToASCII]] 演算 (≒ [[Punycode]] [[符号化]]) を施し、「追加文字」
を[[百分率符号化]]した結果、[[URI参照]]が得られる[[文字列]]です。
「追加文字」とは、[[Unicode]] の[[非ASCII文字]]から[[私用域]]や[[非文字]]や[[代理組]]の[[符号位置]]を除外したものです。
[56] この定義は実際上 (何が [[IRI参照]]で何が [[IRI参照]]ではないかという点で)
[[draft-duerst-iri-05]] と一致していることになっています (未検証)。
なお、「[[URI参照]]」の定義は明らかにされていません。[[XML名前空間 1.1]]
第1版の仕様書の参考文献には [[RFC 2396]] と [[RFC 2732]]
が挙がっているのですが、両者は本文中のどこからも参照されていません。
[57] [[draft-duerst-iri-05]] と [[RFC 3987]] の定義は異なるようです (未検証)。
そのため、
- [[XML名前空間 1.1]] [[IRI参照]]には [[query]] 部品であっても[[私用域]]の[[文字]]を含めることができません
([[RFC 3987]] [[IRI参照]]では可)。
- [[XML名前空間 1.1]] [[IRI参照]]には [[RFC 3987]] 本文中の追加の構文上の制約が適用されません。
- [[XML名前空間 1.1]] における「[[URI参照]]」が [[RFC 2396]] + [[RFC 2732]]
の定義によると仮定すると、 [[RFC 2396]] + [[RFC 2732]] と [[RFC 3986]]
の「[[URI参照]]」の定義の違いが [[XML名前空間 1.1]] [[IRI参照]]と
[[RFC 3987]] [[IRI参照]]の違いになります。例えば、 [[authority]] 部品内で[ [百分率符号化]]された[[ホスト名]]を用いることは
[[RFC 3987]] では認められていますが、 [[XML名前空間 1.1]] では認められないことになります。
- [CITE@EN[Namespaces in XML 1.1]] ([DEL[[[W3C]] [[勧告]]]] (改訂済))
-- [CSECTION@en[9 Internationalized Resource Identifiers (IRIs)]]
<http://www.w3.org/TR/2004/REC-xml-names11-20040204/#IRIs>
[58] なお、[[XML名前空間 1.1]] は既に改訂されており、
第2版では [[RFC 3987]] を直接参照しています。
第1版における [[IRI]] の定義は第2版からは削除されています。
**** XInclude IRI 参照
[4]
[[XInclude 1.0]] の第1版は、当時 [[RFC 3987]] が出版されていなかったため、
[[RFC 3987]] になる前の [[Internet Draft]] である
[[draft-duerst-iri-11]] を参照しつつ
(non-normative reference)、独自に [[IRI参照]]を定義しています。
それによると、「[[IRI参照]]」は、
[[Unicode]] の[[非ASCII文字]]のうち、[[私用域]]の[[文字]]や[[非文字]]と[[代理組]]の[[符号位置]]を除外したものを[[百分率符号化]]した結果が
[[URI参照]]になる[[文字列]]です。
[59] 「[[URI参照]]」の定義は明記されていませんが、文脈によると少なくても
[[RFC 2396]] によっているようです。更に、 [[RFC 2396]] だけでなく
[[RFC 2732]] もこの仕様書から normative reference として参照されています。
[60] [[XInclude]] [[IRI参照]]も [[XML名前空間 1.1]] [[IRI参照]] (>>3) も
[[RFC 2396]] + [[RFC 2732]] の [[URi参照]]に基づき定義されているとみなすと、
[[XInclude]] [[IRI参照]]は [[XML名前空間 1.1]] [[IRI参照]]のほぼ[[部分集合]]になりますが、
- [[XInclude]] [[IRI参照]]の定義は [[XML名前空間 1.1]] [[IRI参照]]の定義と異なり
[[IDNA]] [[ToASCII]] を行っていませんので、 [[XInclude]] では [[IDN]]
を使うことができません ([[RFC 2396]] + [[RFC 2732]] の構文に一致しませんので)。
[61] なお、 [[XInclude]] 1.0 第1版では「[[IRI参照]]に変換されるもの」も定義されています
(>>62)。
[64] この部分の規定は[[正誤票]]の PEX17 で削除され、 [[XML 1.1]]
の [[XML資源識別子]]を使うという規定に置き換わっています (>>65)。
- [CITE@en[XML Inclusions (XInclude) Version 1.0]]
-- [CSECTION@en[4.1.1 Escaping of href attribute values]]
<http://www.w3.org/TR/2004/REC-xinclude-20041220/#dt-IRI>
*** 「IRI に変換されるもの」や「IRI 参照に変換されるもの」を定義している仕様
**** XInclude IRI 参照に変換されるもの
[62]
[[XInclude]] 1.0 第1版では「[[IRI参照]]」を定義していますが (>>4)、
[CODE(XMLa)@en[[[href]]]] [[属性値]]を [[IRI参照]]に変換する方法も定義しています。
それによると、 [[IRI参照]]に変換するためには[[属性値]]の次の[[文字]]を[[百分率符号化]]しなければ[['''なりません''']]。
- [CODE(char)[[[U+0020]]]]
- [CODE(char)[[[<]]]], [CODE(char)[[[>]]]], [CODE(char)[[["]]]]
- [CODE(char)[[[{]]]], [CODE(char)[[[}]]]], [CODE(char)[[[|]]]],
[CODE(char)[[[\]]]], [CODE(char)[[[^]]]], [CODE(char)[[[`]]]]
[63] この部分の規定は[[正誤票]]の PEX17 で削除され、 [[XML 1.1]]
の [[XML資源識別子]]を使うという規定に置き換わっています (>>65)。
- [CITE@en[XML Inclusions (XInclude) Version 1.0]] ([DEL[[[W3C]] [[勧告]]]] (改訂済))
-- [CSECTION@en[4.1.1 Escaping of href attribute values]]
<http://www.w3.org/TR/2004/REC-xinclude-20041220/#dt-IRI>
**** XLink IRI 参照に変換されるもの
[27]
[[XLink 1.1]] の当初の [[WD]] は、 [CODE(XMLa)@en[[[href]]]] [[属性]]の値は [[RFC 3987]]
の [[IRI参照]]か、 [CODE(char)[[[U+0020]]]] を[[百分率符号化]]すると
[[RFC 3987]] [[IRI参照]]になるものでなければ[['''ならない''']]と規定していました。
この規定は [[XLink 1.0]] との[[後方互換性]]のためとされています。
[73]
- [[XLink 1.0]] が定義していた [[URI参照]]に変換されるもの (>>9) より認められる範囲が狭まっています。
(ただし [[RFC 2396]] と [[RFC 3986]]/[[RFC 3987]] の構文上の違いがあるので、
[[XLink 1.1]] [[IRI参照]]に変換されるものは [[XLink 1.0]] [[URI参照]]に変換されるものの完全な[[部分集合]]にはなっていません。)
- [[XLink 1.1]] の新しい [[CR]] では、「[[XML資源識別子]]」という名前がついて、
内容も変わっています (>>28)。新しい定義の方が、 [[XLink 1.0]] の定義により近い形になっています。
- [CODE(XMLa)@en[xlink:[[role]]]] と [CODE(XMLa)@en[xlink:[[arcrole]]]] の値は [[RFC 3987]]
[[IRI]] ([[IRI参照]]ではなく。) でなければならないとされています。
- [[XML Schema]] / [[RELAX NG]] の[[スキーマ]]例が [[XLink 1.1]] 仕様案内で示されていますが、
[[データ型]]としては [CODE(XML)@en[xs:[[anyURI]]]] が使われています。
[[XML Schema]] の [CODE(XML)@en[xs:[[anyURI]]]] の定義は [[XLink 1.0]]
を指しているわけですから、厳密に考えれば奇妙な話です。
- [CITE@en[XML Linking Language (XLink) Version 1.1]] ([DEL[[[W3C]] [[作業原案]]]] (改訂済))
-- [CSECTION@en[5.4 Locator Attribute ([CODE(XMLa)@en[href]])]]
<http://www.w3.org/TR/2005/WD-xlink11-20050707/#link-locators>
--[CSECTION@en[5.5 Semantic Attributes ([CODE(XMLa)@en[role]], [CODE(XMLa)@en[arcrole]], and [CODE(XMLa)@en[title]])]]
<http://www.w3.org/TR/2005/WD-xlink11-20050707/#link-semantics>
**** XTM 2.0 IRI に変換されるもの
[104] [[XTM 2.0]] ([[ISO/IEC 13250-3]]) は、 [CODE(XMLa)@en[[[href]]]]
[[属性値]]を本文では [[RFC 3987]] [[IRI参照]]としています [SRC[>>195]]。しかしながら、
[[RELAX NG]] [[スキーマ]] ([[規定]]、[[引用規格]]の版は明示せず。) と
[[XML Schema]] [[スキーマ]] ([[参考]]、[[引用規格]]に含まれず。) では
[CODE(XML)@en[[[xs:anyURI]]]] としています。
;; [197] [[IRI参照]]と [CODE(XML)@en[[[xs:anyURI]]]] の差異には言及がありません。
[196] 更に次のような不思議な規定も含んでいます。 [CODE(XMLa)@en[[[href]]]]
[[属性値]]から [[IRI]] を得るためには、まず[[パーセント符号化]]を[[復号]]し、
[[UTF-8]] [[バイト列]]から[[文字列]]を得て、[[文書]]の [[IRI]]
に対して[[解決]]して[[絶対IRI]]を得ます [SRC[>>195]]。
;; [198] [[UTF-8]] として[[復号]]できない場合や[[パーセント符号化]]されていない[[非ASCII文字]]が既に含まれている場合の処理には言及がありません。
;; [199] [[IRI]] の[[解決]]の方法にも言及がありません。敢えて[[復号]]しているからには、
[[RFC 3987]] が想定しているような [[URI]] に変換してからの[[解決]]ではないと思いますが。。。
[REFS[
- [194] [CITE[Topic Maps — XML Syntax]] ([TIME[2007-12-04 20:04:09 +09:00]] 版) <http://www.isotopicmaps.org/sam/sam-xtm/>
-- [195] [CITE[Topic Maps — XML Syntax]] ([TIME[2007-12-04 20:04:09 +09:00]] 版) <http://www.isotopicmaps.org/sam/sam-xtm/#sect-xlink-locator>
]REFS]
*** 「URI に変換されるもの」、「URI 参照に変換されるもの」を定義している仕様
**** HTML 4.01 URI 誤り処理
[10]
[[HTML 4]] は[[著者]]に対しては [[URI]] しか認めていませんが、
informative な附属書中で、[[利用者エージェント]]が[[非ASCII文字]]を含む
[[URI]] [[属性値]]の処理に関して、
= まずは [[UTF-8]] として[[百分率符号化]]し、試してみる
= 古い[[文書]]に対応したい[[利用者エージェント]]は、前項が失敗した場合、
[[文書]]の[[文字符号化]]を使って[[百分率符号化]]し、試してみる
という方法を述べています (1項目は推奨されており、2項目は note での言及、
ただしどちらも informative)。
;; なお、 [[HTML 4]] は「[[URI参照]]」の意味で「[[URI]]」という語を使っていると見られる上、
[[RFC 1738]]、[[RFC 1808]]、[[RFC 2396]] をいずれも normative
に参照しており、混乱しています。
[70]
- [[HTML 4]] のこの解説は必ずしも実情に合っておらず、
[[HTML 5]] の「[[URL]]」の定義は異なったものとなっています (>>69)。
- [[XSLT 1.0]] の[[HTML出力方式]]では、値が [[URI]] である[[属性]]について、 [[HTML 4]]
の[[推奨]]する方式によって[[百分率符号化]]するべきであるとされています
([[HTML出力方式]]の項を参照)。
- [[XPath 2.0]]/[[XQuery 1.0]] にはこの解説に基づいたと称する[[関数]]
[CODE@en[fn:[[escape-html-uri]]]] が定義されていますが、
この関数が行うのは [CODE(char)[[[U+0020]]]] 〜 [CODE(char)[[[U+007E]]]]
''以外''の[[百分率符号化]]であって、 [[HTML 4]] の解説とは[[制御文字]]の扱いが含まれている点が異なります。
そもそも [[XPath 2.0]]/[[XQuery 1.0]] には [[IRI参照]] (実際には[[遺物拡張IRI参照]]的なもの)
から [[URI参照]]に変換する[[関数]] [CODE@en[fn:[[iri-to-uri]]]] もあるので、
[[URI参照]]で認められない [[ASCII]] [[文字]]を[[百分率符号化]]しない
[CODE@en[fn:[[escape-html-uri]]]] の存在意義は疑問です。
[REFS[
- [[HTML 4]] ([[W3C]] [[勧告]])
-- [CSECTION@en[B.2.1 Non-ASCII characters in URI attribute values]]
<IW:HTML4:"appendix/notes.html#h-B.2.1">
- [[XSLT 1.0]]
--[CSECTION@en[16.2 HTML Output Method]] <http://www.w3.org/TR/xslt#section-HTML-Output-Method>
- [CITE@EN[XQuery 1.0 and XPath 2.0 Functions and Operators]] ([[W3C]] [[勧告]])
--[CSECTION@en[7.4.12 fn:escape-html-uri]]
<http://www.w3.org/TR/2007/REC-xpath-functions-20070123/#uri>
- [172] [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/#func-escape-html-uri>
]REFS]
;; [[HTMLにおけるURL]]も参照。
****XML システム識別子
[7]
[[XML]] の[[システム識別子]]は、 [[URI参照]]に変換できるものと定義されています。
(なお、 1.0 1e E76 以後、[[システム識別子]]に[[素片識別子]]が現れるのは[[誤り]]とされています。)
厳密な定義は正誤票で何度も重ねて訂正され、各版で内容が微妙に異なっています。
,版,参照する [[URI]] 仕様,[[百分率符号化]]しなければならない[[文字]]
,1.0 1e,[[RFC 2396]] になる前の [[Internet Draft]] ([[RFC 1738]] と [[RFC 1808]] も参照、3ついずれも informative),[[非ASCII文字]]
,1.0 1e E49,同上,[[非ASCII文字]]、[[RFC 2396]] 2.2 節 [[reserved]] 文字
,1.0 1e E66,[[RFC 2396]]、[[RFC 2732]],[[非ASCII文字]]
,1.0 1e E78、1.0 2e、1.0 2e E5,[[RFC 2396]]、[[RFC 2732]],"[[非ASCII文字]]、[[RFC 2396]] 2.4 節除外文字 (ただし [CODE(char)[#]], [CODE(char)[[[%]]]], [CODE(char)[[['''[''']]]], [CODE(char)[[[''']''']]]] を除く)"
,1.0 2e E26、1.0 2e E43、1.0 3e、1.1 1e,同上,"[CODE(char)[[[U+0000]]]]-[CODE(char)[[[U+001F]]]], [CODE(char)[[[U+007F]]]], [CODE(char)[[[U+0020]]]], [CODE(char)[[[<]]]], [CODE(char)[[[>]]]], [CODE(char)[[[U+0022]]]], [CODE(char)[[[{]]]], [CODE(char)[[[}]]]], [CODE(char)[[[|]]]], [CODE(char)[[[U+005C]]]], [CODE(char)[[[^]]]], [CODE(char)[[[`]]]], [CODE(char)[[[U+0080]]]] 以上"
,1.0 4e E14、1.0 4e、1.1 1e E22、1.1 2e,[[RFC 3986]],同上
- 1.0 1e E49 の修正は誤った変更です (reserved は [[URI]] で使え’'る''[[文字]])。
- 1.0 1e では「[[URI]]」とありましたが、 1e [[正誤票]] E88 で「[[URI参照]]に置き換えられています。
- 1.0 2e と 1.0 3e の間で実質的な変更はありません。
;; [149] [[XML Schema]] にも[[システム識別子]]がありますが、こちらは [CODE(XML)@en[[[xs:anyURI]]]] とされています。
[REFS[
-[CITE[Extensible Markup Language (XML) 1.0]]
([DEL[[[W3C]] [[勧告]]]] (改訂済))
-- [CSECTION@en[4.2.2 External Entities]]
<http://www.w3.org/TR/1998/REC-xml-19980210#dt-sysid>
-- [CITE@en[Errata in REC-xml-19980210]] ([TIME[2000-10-07 09:19:21 +09:00]] 版)
---E88 <http://www.w3.org/XML/xml-19980210-errata#E88>
---E78 <http://www.w3.org/XML/xml-19980210-errata#E78>
---E76 <http://www.w3.org/XML/xml-19980210-errata#E76>
---E66 <http://www.w3.org/XML/xml-19980210-errata#E66>
---E49 <http://www.w3.org/XML/xml-19980210-errata#E49>
-[CITE@EN[Extensible Markup Language (XML) 1.0 (Second Edition)]]
([DEL[[[W3C]] [[勧告]]]] (改訂済))
-- [CSECTION@en[4.2.2 External Entities]]
<http://www.w3.org/TR/2000/REC-xml-20001006#dt-sysid>
-- [CITE@en[Errata in REC-xml-20001006]] ([TIME[2004-11-25 20:26:49 +09:00]] 版)
--- E5 <http://www.w3.org/XML/xml-V10-2e-errata#E5>
--- E26 <http://www.w3.org/XML/xml-V10-2e-errata#E26>
--- E43 <http://www.w3.org/XML/xml-V10-2e-errata#E43>
- [CITE@EN[Extensible Markup Language (XML) 1.0 (Third Edition)]]
([DEL[[[W3C]] [[勧告]]]] (改訂済))
-- [CSECTION@en[4.2.2 External Entities]]
<http://www.w3.org/TR/2004/REC-xml-20040204/#dt-sysid>
-- [CITE@en[Errata in REC-xml-20040204]] ([TIME[2006-08-10 00:48:41 +09:00]] 版)
<http://www.w3.org/XML/xml-V10-3e-errata#E14>
- [CITE@EN[Extensible Markup Language (XML) 1.1]]
([DEL[[[W3C]] [[勧告]]]] (改訂済))
-- [CSECTION@en[4.2.2 External Entities]]
<http://www.w3.org/TR/2004/REC-xml11-20040204/#dt-sysid>
-- [CITE@en[Errata in REC-xml11-20040204]] ([TIME[2006-08-10 00:48:58 +09:00]] 版) <http://www.w3.org/XML/xml-V11-1e-errata#E22>
- [CITE@en[Extensible Markup Language (XML) 1.0 (Fourth Edition)]]
([[W3C]] [[勧告]])
--[CSECTION@en[4.2.2 External Entities]]
<http://www.w3.org/TR/2006/REC-xml-20060816/#dt-sysid>
-[CITE@en[Extensible Markup Language (XML) 1.1 (Second Edition)]]
([[W3C]] [[勧告]])
--[CSECTION@en[4.2.2 External Entities]]
<http://www.w3.org/TR/2006/REC-xml11-20060816/#dt-sysid>
]REFS]
**** RDF/XML:1999 (XML 1.0 1e の処理の参照)
[22]
[[RDF]] の1999年の仕様では、[[生成規則]]上の [CODE(ABNF)@en[[[URI-reference]]]]
は [[XML]] における[[文字列]]であり、 [[RFC 2396]] に従って解釈するとされていました。
構文上は [[URI]] として正しくない[[文字列]]も認められていたことになります。
Note では、 [[XML]] (の最新版) を引用しつつ、[[非ASCII文字]]は[[百分率符号化]]して
[[URI]] として解釈することが実装に勧められています。
;; なお、この仕様書は「[[URI]]」と「[[URI参照]]」の両方の語が現れますが、
「[[URI参照]]」という語が現れるのは[[生成規則]]の名前だけで、
基本的に両者を区別していないようです。
[100]
なお、 [[CellML]] は [[RDF]] の1999年の仕様書を引用していますが、
[CODE(XMLa)@en[rdf:[[about]]]] [[属性]]の値は [[RFC 2396]] の [[URI]]
(仕様書中の例示から察するに、 [[URI参照]]のつもり。) と規定しています。
;; >>99 も参照してください。
- [CITE[Resource Description Framework (RDF) Model and Syntax Specification]]
([DEL[[[W3C]] [[勧告]]]] (改訂済))
--<http://www.w3.org/TR/1999/REC-rdf-syntax-19990222/#grammar>
- [[CellML]]
--[CSECTION@en[8.2 Basic Structure]]
<http://www.cellml.org/specifications/cellml_1.1/index_html#sec_metadata_basic_structure>
****XLink/XML 基底/XML 署名 URI 参照に変換されるもの
[9]
[[XLink]] [CODE(XMLa)@en[xlink:[[href]]]] [[属性]]や
[CODE(XMLa)@en[[[xml]]:[[base]]]] [[属性]]や
[[XML署名]]の [CODE(XMLa)@en[[[URI]]]] [[属性]]の値は、
次の[[文字]]を[[百分率符号化]]した後、
[[RFC 2396]] [[URI参照]]として解釈されることになっています。
- [[非ASCII文字]]
- [[RFC 2396]] 2.4節除外文字 ([CODE(char)[#]], [CODE(char)[[[%]]]],
[CODE(char)[[['''[''']]]], [CODE(char)[[[''']''']]]] を除く。)
[72] [[百分率符号化]]する[[文字]]の種類の規定では [[RFC 2396]] と
[[RFC 2732]] に基づいているのですが、「[[URI参照]]」の定義としては
[[RFC 2396]] しか参照していません。仕様書中の文言を厳密に解釈するなら、
[[authority]] [[部品]]中であっても [CODE(char)[[['''[''']]]], [CODE(char)[[[''']''']]]]
は使えないことになります。
[32] [[SVG 1.0]]、[[SVG 1.1]] は、 [[SVG]] [[文書]]で用いられる
[CODE(XMLa)@en[xlink:[[href]]]] [[属性]]について、
[[XLink 1.0]] を参照しつつも [[XLink 1.0]] と同じことを再度規定しています。
[8]
- [[XLink]]/[[XML基底]]/[[XML署名]]
[[URI参照]]に変換されるものは [[XML]] [[システム識別子]]における
[[URI参照]]に変換されるもの (1.0 2e 以降、1.1、>>7) とほぼ同じですが、
「[[URI参照]]」の定義が [[RFC 2396]] だけを参照している点が異なります。
- [[XLink]]/[[XML基底]]/[[XML署名]] [[URI参照]]に変換されるものは、
[[XLink 1.1]] [[CR]] で定義され (>>28)、
[[XML基底]]第2版の [[PER]] が参照 (>>74)
している [[XLink]] [[XML資源識別子]]とほぼ同じですが、
「[[IRI参照]]」ではなく、[[RFC 2396]] の「[[URI参照]]」を参照している点が異なります。
- 同じ [[XLink 1.0]] でも、 [CODE(XMLa)@en[xlink:[[role]]]] [[属性]]や
[CODE(XMLa)@en[xlink:[[arcrole]]]] [[属性]]は
[[RFC 2396]] [[URI参照]]でなければならないとされています。
(書き方が曖昧なので、[[URI]] で禁止されている[[文字]]があっても escape して処理されるように見えますが、
[CODE(XMLa)@en[xlink:[[href]]]] [[属性]]とは違って著者が escape
しなくてもよいと明確に読める文言はありません。)
-[99] [[CellML]] は [[XLink 1.0]] を引用していますが、
[CODE(XMLa)@en[xlink:[[href]]]] [[属性]]の値は [[RFC 2396]] の [[URI]]
(仕様書中の例示から察するに、 [[URI参照]]のつもり。) と規定しています。
;; >>100 も参照してください。
-[103] [[OpenDocument]] 1.0/1.1 は [[XLink 1.0]] を採用しており、[[スキーマ]]上の
[CODE(XMLa)@en[xlink:[[href]]]] [[属性]]の[[データ型]]は
[CODE(XML)@en[xs:[[anyURI]]]] になっています。
ただし、 13.5.1 の [CODE(XMLe)@en[anim:[[audio]]]] [[要素]]について定義しているところなど数箇所では「[[IRI]]」
と書いてあります (変更履歴によると昔の案では「[[URI]]」としていたのを「[[IRI]]」に変えたようです)。
-[105] [[GML]] は [[XLink 1.0]] 用の [[XML Schema]] を規定していますが、
そこでは [CODE(XMLa)@en[xlink:[[href]]]] などの[[データ型]]が [CODE(XML)@en[xs:[[anyURI]]]]
になっています。
- [[W3C]] が用意している [CODE(URI)@en[[[http://www.w3.org/XML/1998/namespace]]]] [[名前空間]]用の
[[XML Schema]] [[スキーマ]] (執筆時点での最新版は
<http://www.w3.org/2007/08/xml.xsd>) では、
[CODE(XMLa)@en[[[xml]]:[[base]]]] [[属性]]の定義は [CODE(XML)@en[xs:[[anyURI]]]]
となっています。
-[CITE[XML Linking Language (XLink) Version 1.0]] ([[W3C]] [[勧告]])
--[CSECTION@en[5.4 Locator Attribute ([CODE(XMLa)@en[href]])]]
<http://www.w3.org/TR/2001/REC-xlink-20010627/#link-locators>
--[CSECTION@en[5.5 Semantic Attributes ([CODE(XMLa)@en[role]], [CODE(XMLa)@en[arcrole]], and [CODE(XMLa)@en[title]])]]
<http://www.w3.org/TR/2001/REC-xlink-20010627/#link-semantics>
-[DEL[[CITE[XML Base]] ([[W3C]] [[勧告]])]]
--[CSECTION@en[3.1 URI Reference Encoding and Escaping]]
<http://www.w3.org/TR/2001/REC-xmlbase-20010627/#escaping>
-[CITE[XML-Signature Syntax and Processing]] ([[W3C]] [[勧告]])
--[CSECTION@en[4.3.3.1 The [CODE(XMLa)@en[URI]] Attribute]]
<http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/#sec-URI>
- [DEL[[[SVG 1.0]] ([[W3C]] [[勧告]])]]
--[CSECTION@en[5.3.2 URI reference attributes]]
<http://www.w3.org/TR/2001/REC-SVG-20010904/struct.html#xlinkRefAttrs>
-[[SVG 1.1]] ([[W3C]] [[勧告]])
--[CSECTION@en[5.3.2 URI reference attributes]]
<http://www.w3.org/TR/2003/REC-SVG11-20030114/struct.html#xlinkRefAttrs>
- [[CellML 1.1]]
--[CSECTION@en[9.4.1 The <import> element]]
<http://www.cellml.org/specifications/cellml_1.1/index_html#sec_importing_models_spec_rules_import_element>
- [[OpenDocument]] 1.0
- [[GML]]
--<http://schemas.opengis.net/xlink/1.0.0/xlinks.xsd>
****WebCGM URI に変換されるもの
[11]
[[WebCGM]] 第2版は、 [[WebCGM]] [[処理器]]が [[URI]] の解釈の際に[[非ASCII文字]]を[[百分率符号化]]しなければならないと規定しています。
この仕様書は [[RFC 2396]] (だけ) を参照していますが、「[[URI参照]]」
という言葉を使わず、「[[URI]]」を「[[URI参照]]」も含めた意味で使っているようです。
処理の規定の部分では [[XML 1.0]] 第2版の[[システム識別子]]の処理の規定 (>>7)
を採用すると述べられているのですが、なぜかそれを参照するだけに留まらずにわざわざ独自の規定を行っており、
その規定が [[XML 1.0]] 第2版のものではなく、 [[XML 1.0]]
第1版と同じで[[非ASCII文字]]しか[[百分率符号化]]しないものとなっています。
[76]
- なお、この部分の規定は第1版にはありませんでした。
- [[RFC 2732]] は参照されていません。従って、厳密には [[XML 1.0]] の (正誤票適用時も含めた)
どの版とも一致しません。
- [[WebCGM]] 第2版 ([[W3C]] [[勧告]])
-- [CITE[WebCGM Intelligent Content]] [CSECTION@en[3.1.1.4 Non-ACSII Characters in URIs]]
<http://www.w3.org/TR/2001/REC-WebCGM-20011217/REC-03-CGM-IC.html#webcgm_3_1_1_4>
- [[WebCGM]] 2.1 ([[W3C]] [[勧告]])
-- <http://www.w3.org/Graphics/WebCGM/drafts/REC/WebCGM21-IC.html#webcgm_3_1_1_4>
****WebCGM 2.0 URI 参照に変換されるもの
[33]
[[WebCGM]] の新しい版である [[WebCGM]] 2.0 の仕様書では、前版の記述 (>>11)
と違って [[RFC 3986]] と [[RFC 3987]] を参照し、
「[[URI参照]]」という言葉を使ってより明確な形の規定に改められています。
;; ただし、「[[URI]]」という用語は「[[URI参照]]」と必ずしも区別されていないように見受けられます。
さて、この新しい規定では、 [[WebCGM]] における [[URI]] ([[URI参照]]ではなく。)
は [[RFC 3987]] 3.1 節の[[百分率符号化]]を施した後、
[[RFC 3986]] [[URI参照]] ([[URI]] ではなく。) にならなければならないとされています。
;; [[RFC 3987]] 3.1節には [[ASCII]] 範囲内の [[URI]] で使えない文字を[[百分率符号化]]して[['''構わない''']]ことになっていますが、
それが適用されるか否かには全く言及していません。
加えて、[[百分率符号化]]の適用例が示されているのですが、
その中には、[[百分率符号化]]以外の [CODE(char)[[[%]]]] が
[CODE(char)[%25]] になるという怪しい例が含まれています。
-[CITE@en[OASIS CGM Open specification - WebCGM 2.0 - WebCGM Intelligent Content]]
([DEL[[[W3C]] [[会員提出]]]] (改訂済))
-- [CSECTION@en[3.1.1.4 Non-ASCII characters in URIs]]
<http://www.w3.org/Submission/2006/SUBM-WebCGM20-20060313/WebCGM20-IC.html#webcgm_3_1_1_4>
- [CITE[WebCGM 2.0 - WebCGM Intelligent Content]] ([[W3C]] [[勧告]])
-- [CSECTION@en[3.1.1.4 Non-ASCII characters in URIs]]
<http://www.w3.org/TR/2007/REC-webcgm20-20070130/WebCGM20-IC.html#webcgm_3_1_1_4>、
- [CITE[WebCGM 2.0 - WebCGM Intelligent Content]] ([[OASIS]] [[標準]])
-- [CSECTION@en[3.1.1.4 Non-ASCII characters in URIs]]
<http://docs.oasis-open.org/webcgm/v2.0/OS/WebCGM20-IC.html#webcgm_3_1_1_4>
****XML 型録 URI 正規化
[31]
[[XML型録]]仕様書では、[[正規化]]と称して、[[型録処理器]]に対する入力や[[型録]]中で示された
[[URI参照]]のようなものを [[URI参照]]に変換する処理を定義しています。
定義されている処理の内容は、 [[XLink 1.0]] 等 (>>8) と同じです。
「[[URI参照]]」の定義として [[RFC 2396]] を参照している点も同じです。
[[XML型録]]で定義されている値が [[URI参照]]の[[属性]]については、
本文の定義に従うなら [[RFC 2396]] の [[URI参照]]なのですが、
2003年以降の仕様に含まれる [[XML Schema]] や [[RELAX NG]]
の[[スキーマ]]では [CODE(XML)@en[[[anyURI]]]] となっています。
- [[XML型録]] ([[OASIS]] 仕様)
-- [CSECTION@en[System Identifier and URI Normalization]]
<IW:XMLCatalog:"#sysid-norm">
**** XSCD URI
[108] [CITE@en[W3C XML Schema Definition Language (XSD): Component Designators]]
という仕様の2008年11月の [[WD]] は、「[[URI]]」や「[[URI参照]]」や「[[IRI]]」や
「[[LEIRI]]」や「[[AnyURI]]」のような色々なものや [[Unicode]] [[文字]]への言及が入り混じって、
何が著者の意図なのか、何が厳密な解釈なのかよくわからないのですが・・・。
はっきりした事実は、
- [[スキーマ指示子]]は [[URI]] である。構文的には[[素片識別子]]なき [[URI]] である。
-- この定義の“近く”の注記には (別件で) [[RFC 3986]] の引用がある。
-- [[EBNF]] 構文上は、[[スキーマ指示子]]は [[AnyURI]] である。
-- ただし、 [[AnyURI]] とは零文字以上の [[XML 1.0]] [[Char]] である。
- [[絶対スキーマ部品指示子]]は[[スキーマ指示子]]と[[相対スキーマ部品指示子]]からなる。
[[URI参照]]である。
- [[相対スキーマ部品指示子]]は [[XPointer]] [[素片識別子]]である。
-- [[百分率符号化]]についての言及はない。
-- [[XPointer Framework]] 仕様内には言及があるので、それを援用できるのか?
-- [[EBNF]] 構文上は、[[百分率符号化]]への配慮も言及もない。
- [[スキーマ部品指示子]]は [[URI]] で認められない [[Unicode]] [[文字]]を含んでも構わない。
- [[正準スキーマ部品指示子]]は[[絶対スキーマ部品指示子]]であって、
[[URI]] であって、 [[LEIRI]] → [[IRI]] → [[URI]] と変換して得られたものである。
[109]
本文の字面通り解釈 + [[RFC 3986]] を引用している仕様書だから [[URI]] といえば [[RFC 3986]]
だろうという常識的推測だと、[[URI参照]]である[[絶対スキーマ部品指示子]]を含む (と思われる)
[[スキーマ部品指示子]]に [[URI]] で認められない[[文字]]を含められることになって、
矛盾します。もっとも、この程度の矛盾した用語法はありがちなことなので、
だからこの解釈は間違いとは断言できませんが。でもこの解釈なら[[正準スキーマ部品指示子]]に[[正準]]なんて名前は付けませんよね。
[[EBNF]] だけを信用すると、 [[XPointer framework]] の定義を孫引きしているため、
[[絶対スキーマ部品指示子]]には [CODE(char)[[[U+0000]]]]~[CODE(char)[[[U+10FFFF]]]] すべてが現れ得ることになります。
[[正準スキーマ部品指示子]]の定義から[[絶対スキーマ部品指示子]]は [[LEIRI]]
([[WG Note]]、>>67) で [[EBNF]] は多少緩くなっていると推測すると、
そんなに矛盾はないと思います。でもそんなことどこにも書いていません。
[110] ちなみに、1つ前の [[WD]] では [[RFC 2396]] [[URI]] だけを参照した単純な定義でした。
(それでも [[EBNF]] と食い違っているとかはありましたが。)
-[CITE@en[W3C XML Schema Definition Language (XSD): Component Designators]] ([TIME[2008-11-26 01:50:46 +09:00]] 版) <http://www.w3.org/TR/2008/WD-xmlschema-ref-20081117/#section-scds>
*** 「XML 資源識別子」、「遺物拡張 IRI」、「遺物拡張 IRI 参照」を定義・参照している仕様
[66] 名前と内容と定義文書が頻繁に変わる'''これ'''は、そもそも
[[W3C]] の [[XML中核WG]] が [[XML]] 関連仕様の [[URI]]/[[IRI]]
の定義を統一するべく、作業を始めました。
はじめは [[XRI]] という名前でしたが、 [[OASIS]] の同名の仕様との衝突を避けるため、
[DFN[[[XML資源識別子]]]] ([DFN@en[XML Resource Identifier]]、[[XMLRI]] とも)
に改名されました。
[[XLink 1.1]] で定義するつもりだったり (>>28)、
[[XML 1.1]] で定義するつもりだったり (>>65) した後、
[[Internet Draft]] が出版されました。その頃名前は [DFN@en[[[HRRI]]]]
(確か、 [DFN@en[Human Readable Resource Identifiers]]) でした。
それが [[RFC 3987]] の改訂版となる [[Internet Draft]] に吸収され、
[[HRRI]] のような積極的に使いたくなる名前は避けるべきだとして
[DFN[[[遺物拡張IRI]]]] ([DFN@en[Legacy Extended IRI]]、[DFN@en[[[LEIRI]]]]) および
[DFN[[[遺物拡張IRI参照]]]] ([DFN@en[Legacy Extended IRI reference]])
として定義されるに至りました。この間、名前と定義文書だけでなく、
定義そのものも少しずつ変化しています。
[67]
作業が始まって5年以上が経つわけですが、 [[XML中核WG]] は [[LEIRI]]
の作業の完了待ちで各種仕様の改訂作業も中断状態、もうほんと gdgd です。
業を煮やした [[XML中核WG]] は、2008年秋に [[LEIRI]] に関する [[Internet Draft]]
と同じ内容の [[W3C]] [[WG Note]] を発行しました。
これを参照する形で [[XML]] 関連仕様の新版を発行するつもりのようです。
;; 他の定義との差異や採用仕様などはこの項で説明します。歴史的経緯や技術的詳細は
[[LEIRI]] の項をご覧ください。
**** XInclude 1.0 第2版 (将来の XML 1.1 の定義の参照)
[65]
[[XInclude]] 1.0 の第1版[[勧告]]に対する[[正誤票]]の修正案 PEX17
では、独自の「[[IRI参照]]」 (>>4) や「[[IRI参照]]に変換されるもの」 (>>62)
の定義を削除し、代わりに [[XML 1.1]] の「[[XML資源識別子]]」であるとしました。
[[XML資源識別子]]とは [[RFC 3987]] の [[IRI参照]]に変換されるものであるとも述べていました。
この修正は [[XInclude]] 1.0 第2版[[勧告]]に反映されました。
第2版は更に [[XML 1.1]] の4.2.2節で「[[XML資源識別子]]」が定義されていると明確化しています。
ただし、実は [[XML 1.1]] の改訂はこの時点では行われておらず (その後立ち消え)、
[[XML 1.1]] には「[[XML資源識別子]]」という言葉が一切出てきません。
- [CITE@en-US[XInclude 1.0 Errata]] ([TIME[2006-04-24 01:05:52 +09:00]] 版)
<http://www.w3.org/2004/12/xinclude-errata/#PEX17>
-- 第1版 [[W3C]] [[勧告]] (改訂済) の[[正誤票]]。
- [CITE@EN[XML Inclusions (XInclude) Version 1.0 (Second Edition)]]
([[W3C]] [[勧告]])
-- [CSECTION@en[4.1.1 Escaping of href attribute values]]
<http://www.w3.org/TR/2006/REC-xinclude-20061115/#IRIs>
****XLink XML 資源識別子
[28]
[[XLink 1.1]] [[CR]] は「[[XML資源識別子]]」を定義しています。
当時の [[XML中核WG]] の目論見としては、各種 [[XML]] 関連仕様の
[[URI]]/[[IRI]] の定義をこれを参照する形に改める予定だったようです。
[[XML資源識別子]]を
[[IRI参照]]にするためには次の[[文字]]を[[百分率符号化]]しなければなりません。
- [CODE(char)[[[U+0000]]]] 〜 [CODE(char)[[[U+001F]]]], [CODE(char)[[[U+007F]]]]
- [CODE(char)[[[U+0020]]]]
- [CODE(char)[[[<]]]], [CODE(char)[[[>]]]], [CODE(char)[[["]]]]
- [CODE(char)[[[{]]]], [CODE(char)[[[}]]]], [CODE(char)[[[|]]]],
[CODE(char)[[[\]]]], [CODE(char)[[[^]]]], [CODE(char)[[[`]]]]
なお、 [[XML資源識別子]]を相対形から絶対形に[[解決]]する場合に、
[[IRI]] や [[URI]] を経由せずとも直接変換できることが明記されています。
[68]
- 前の [[WD]] (>>27) では [CODE(char)[[[U+0020]]]]
だけが[[百分率符号化]]対象でしたが、[[URI]] で認められない
[[ASCII]] [[文字]]全体に拡大しています。
- [[XLink]] [[XML資源識別子]]は [[XLink]]/[[XML基底]] [[URI参照]]に変換されるもの
([[XLink 1.0]] の定義、>>9)
とほぼ同じですが、「[[URI参照]]」ではなく「[[IRI参照]]」
を参照している点が異なります。
- [[XLink]] [[XML資源識別子]]は [[XML]] [[システム識別子]]における
[[URI参照]]に変換されるもの (1.0 2e 以降、1.1、>>7) とほぼ同じですが、
「[[URI参照]]」ではなく「[[IRI参照]]」
を参照している点が異なります。
- [CODE(XMLa)@en[xlink:[[role]]]] や
[CODE(XMLa)@en[xlink:[[arcrole]]]] の値は [[IRI]]
([[IRI参照]]ではなく。) でなければならないとされています。
明記されていませんが、引用されているのでおそらく [[RFC 3987]] の [[IRI]] です。
- [[XML Schema]] / [[RELAX NG]] の[[スキーマ]]例が [[XLink 1.1]] 仕様案内で示されていますが、
[[データ型]]としては [CODE(XML)@en[xs:[[anyURI]]]] が使われています。
[[XML Schema]] の [CODE(XML)@en[xs:[[anyURI]]]] の定義は [[XLink 1.0]]
を指しているわけですから、厳密に考えれば奇妙な話です。
- [[W3C]] [[Note]] で定義される [[LEIRI]] ([[LEIRI参照]]) とは[[私用域]]等 [[IRI]]
で使えない [[Unicode]] [[文字]]の扱いが異なります。
- [CITE@en[XML Linking Language (XLink) Version 1.1]] ([DEL[[[W3C]] [[勧告候補]]]] (改訂済))
--[CSECTION@en[5.4.1 XML Resource Identifiers]]
<http://www.w3.org/TR/2006/CR-xlink11-20060328/#xml-resource-identifier>
--[CSECTION@en[5.5 Semantic Attributes ([CODE(XMLa)@en[role]], [CODE(XMLa)@en[arcrole]], and [CODE(XMLa)@en[title]])]]
<http://www.w3.org/TR/2006/CR-xlink11-20060328/#link-semantics>
**** XML 基底 2e PER (XLink 1.1 CR の参照)
[74]
[[XML基底]]の第2版 [[PER]] では、第1版の [[URI参照]]に変換されるもの (>>9)
の規定が削除され、 [[XLink 1.1]] [[CR]] で定義されている [[XML資源識別子]] (>>28)
を参照する形に改められています。
;; [[勧告]]は >>115。
- [DEL[[CITE@EN[XML Base (Second Edition)]] ([[W3C]] [[PER]])]]
--[CSECTION@en[3 [CODE(XMLa)@en[xml:base]] Attribute]]
<http://www.w3.org/TR/2006/PER-xmlbase-20061220/#syntax>
****XLink 1.1 2nd LCWD (IRIbis 02 の参照)
[71]
>>28 の次に出版された [[XLink 1.1]] の [[WD]] では、[[XML資源識別子]]の定義は削除されており、
[[RFC 3987]] の改訂案である [[draft-duerst-iri-bis-02]] の [[LEIRI]]
を参照するように改められています。なお、次の版では >>118 です。
- [CITE@en[XML Linking Language (XLink) Version 1.1]] ([[W3C]] [[WD]])
--[CSECTION@en[5.4 Locator Attribute ([CODE(XMLa)@en[href]])]]
<http://www.w3.org/TR/2008/WD-xlink11-20080331/#link-locators>
**** LEIRI W3C Note
[116] 2008年に [[W3C]] [[XML Core WG]] によって出版された [[W3C]] [[WG Note]]
[CITE@EN[Legacy extended IRIs for XML resource identification]] は、
[DFN[[[遺物拡張IRI]]]] ([DFN[[[Legacy extended IRI]]]], [DFN[[ABBR[[[LEIRI]]]]]]) と
[DFN[[[遺物拡張IRI参照]]]] ([DFN[[[Legacy extended IRI reference]]]], [DFN[[ABBR[[[LEIRI]]参照]]]])
を定義しています。
この仕様書は [[RFC 3987]] の次の [[IRI]] 仕様案 [[Internet Draft]] ([[draft-duerst-iri-bis-04]])
の一部を [[W3C]] [[TR]] としてほぼそのまま再発行したものです。「[[IRI]]」そのものをも定義する同 [[ID]]
とは異なり、 [[RFC 3987]] を参照しています。
-[[draft-duerst-iri-bis-04]] とは内容が一致しています。
@@ [[RFC 3987]] を参照している本 WG Note と [[draft-duerst-iri-bis-04]] で定義に違いがないかは未検証です。
- [[XML基底]]第2版 [[PER]] の [[XML資源識別子]] (>>28) よりも認められる範囲が拡大しています。
- 使える[[文字]]の種類は [[XPointer]] の定義 (>>2) とほぼ同じです。
[WEAK[([[LEIRI]] では [CODE(char)[[[U+FFFE]]]]、[CODE(char)[[[U+FFFF]]]]、[[代理組]]用[[符号位置]]が認められていません。)]]
- [CITE@EN[Legacy extended IRIs for XML resource identification]] ([[W3C]] [[WG Note]])
<http://www.w3.org/TR/2008/NOTE-leiri-20081103/>
- 2009年7月9日に[[その場修正]]されていますが、技術的内容に変更はありません。
**** XML 基底第2版勧告 (LEIRI W3C WG Note の参照)
[115] >>74 の次の [[XML基底]] 第2版[[勧告]]では、 [CODE(XMLa)@en[[[xml:base]]]]
[[属性]]の値は >>116 の [[LEIRI]]
(文脈と例示から察するに [[LEIRI参照]]のことか。) です。
-[CITE@EN[XML Base (Second Edition)]] ([[W3C]] [[勧告]])
--<http://www.w3.org/TR/2009/REC-xmlbase-20090128/#syntax>
**** XLink 1.1 勧告案・勧告 (LEIRI W3C WG Note の参照)
[118] >>71 の次の [[XLink 1.1]] [[勧告案]]および[[勧告]]では、
>>116 の [[LEIRI]] [[W3C]] [[WG Note]] を参照しています。
;; この仕様でも [[LEIRI]] は実際には [[LEIRI]] [[参照]]を表すようです。
- [[XLink 1.1]] [[W3C]] [[勧告案]] <http://www.w3.org/TR/2010/PR-xlink11-20100225/>
- [[XLink 1.1]] [[W3C]] [[勧告]] <http://www.w3.org/TR/2010/REC-xlink11-20100506/>
*** 「anyURI」を定義・参照している仕様
[77] 後述のように、 [[XML Schema]] 第2部の[[データ型]]に関する仕様書で定義されている
[[URI]]・[[IRI]] のための[[データ型]] [DFN@en[[[anyURI]]]]
は、「[[URI]]」という名前にも関わらず、実質的に [[IRI参照]]として定義されています。
この[[データ型]]は [[XML Schema]] 仕様書内では [[XLink 1.0]]
を参照する形で定義がなされていますが、
[[スキーマ]]で [CODE(XML)@en[[[anyURI]]]] [[データ型]]を使う[[文書型]]の仕様書の中には、
[[RFC 3987]] [[IRI参照]]などを引用するものもあって、
厳密には矛盾した、あるいは不必要な制約が加わった形の参照となっていることがあります。
**** XML Schema 1.0 anyURI
[15]
[[XML Schema]] [[データ型]] [DFN@en[anyURI]] は、
[[URI]] を表すものであり、絶対形・相対形を含み、[[素片識別子]]があってもよいと定義されています。
更に、 [[RFC 2396]] と [[RFC 2732]] により定義される [[URI]]
の役割を果たす値を表すものとして使うべきであるとされています。
そして、 [[anyURI]] から [[URI]] への変換は [[XLink 1.0]] 5.4節による、
とされています。
[[anyURI]] の[[字句空間]]は [[XLink 1.0]] 5.4 節に従った変化によって
[[RFC 2396]] + [[RFC 2732]] の [[URI参照]]となる[[文字列]]、とされています。
[78] わかりにくい定義がなされているのですが、結局のところ、
[[XLink 1.0]] [[URI参照]]に変換されるものと同じものを意図しているようです。
([[XML Schema]] 第2部第1版が参照しているのは [[XLink 1.0]] [[PR]]
ですが、内容は >>8 と同じです。第2版は[[勧告]]を参照しています。)
厳密に解釈すれば [[XLink 1.0]] の「[[URI参照]]」は [[RFC 2396]]
により、 [[XML Schema]] は [[RFC 2396]] と [[RFC 2732]]
によっているので、 [[XML Schema]] の場合の方が表す範囲が広いことになります。
なお、 [[XLink 1.0]] は文脈的に [[XML 1.0]] で認められていない
[[C0制御文字]]はそもそも対象外で認められていないように読めるのですが、
[[XML Schema]] はそのような除外が記されておらず、 [[C0制御文字]]も認められているとも解釈できます。
([[XML Schema]] [[データ型]] [CODE(XML)@en[[[string]]]] は [[XML 1.0]]
で認められている[[文字]]だけと明記されているのですが、 [CODE(XML)@en[[[anyURI]]]]
については何も言及がありませんし、後者が前者の[[派生型]]というわけでもありません。)
ところで、 [[XML Schema]] 仕様書は「[[URI]]」を「[[URI参照]]」
の意味で使っているようです。
第2版では note が追加されるなど多少変更はありますが、実質的な規定の内容には変化がありません。
;; よくみると「anyURI represents a Uniform Resource Identifier Reference (URI)」
という定義になっていて、「[[URI]]」というのは「[[URI参照]]」の意味だということになってます。
[REFS[
- [39] [CITE[XML Schema Part 2: Datatypes]] ([DEL[[[W3C]] [[勧告]]]] 改訂済)
-- [51] [CSECTION@en[3.2.17 anyURI]]
<http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/#anyURI>
- [86] [CITE@EN[XML Schema Part 2: Datatypes Second Edition]] ([[W3C]] [[勧告]])
-- [193] [CSECTION@en[3.2.17 anyURI]]
<http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/#anyURI>
]REFS]
**** RELAX NG anyURI
[75]
[[RELAX NG]] を定義する [[ISO/IEC 19757]]‐2:2002 では、 [[RELAX NG]]
の構文の定義の中で、「[DFN@en[anyURI]]」を定義しています (6章)。
それによると、 [[anyURI]] とは、 [[XLink 1.0]] 5.4節の[[百分率符号化]]処理 (>>9)
の結果が [[RFC 2396]] + [[RFC 2732]] の [[URI参照]]となる[[文字列]]です。
また、 7.4 節、7.6 節は anyURI として定義された[[属性]]の処理を規定していますが、
そこでは [[XLink 1.0]] 5.4節の[[百分率符号化]]処理 (>>9)
と同じであると規定されています。
更に、附属書 A には [[RELAX NG]] 自体の [[RELAX NG]] [[スキーマ]] (規定) がありますが、
そこでは [CODE(URI)@en[[[http://www.w3.org/2001/XMLSchema-datatypes]]]]
を [CODE(XMLa)@en[[[datatypeLibrary]]]] とした上で [CODE(XML)@en[[[anyURI]]]]
が関係する[[属性]]の[[データ型]]として用いられています。
[29] 対応する[[翻訳JIS]] である [[JIS X 4177]] にも、当然同じ規定があります。
;;
[76] つまり、実質的には同じものを本文中では [[XML Schema]] を参照せずに規定し、
附属書中では [[XML Schema]] (>>15) を使って規定しています。
もっとも、厳密いえば [[ISO/IEC 19757]]‐2:2003 の中では [[XML Schema]]
の[[データ型]]の [[URL]]
[CODE(URI)@en[[[http://www.w3.org/2001/XMLSchema-datatypes]]]]
の意味を特に定義しておらず、 [[XML Schema]]
は参考文献にも挙がっていませんので、附属書Aの意図するところは (厳密には)
明確になっていません。
- [[ISO/IEC 19757]]‐2:2003 ([[ISO/IEC]] [[国際標準]])
-- [CSECTION@en[6 Full syntax]]
-- [CSECTION@en[7.4 datatypeLibrary attribute]]
-- [CSECTION@en[7.6 href attribute]]
-- [CSECTION@en[Annex A (normative) RELAX NG schema for RELAX NG]]
- [[JIS X 4177]]‐2:2005 ([[JIS]] [[規格]])
****RDF/XML anyURI
[84]
[[RDF/XML]] の2004年版仕様書は、構文の定義中に「anyURI」があり、
「Any URI.」と説明されているのですが、それ以上の詳しい説明はありません。
anyURI が使われているのは [[RDF/XML]] として解釈する
[[XML 1.0]] [[文書]]中の[[要素]]の[[名前空間URI]] と[[局所名]]を連結したもの
(いわゆる[[展開URI]]) に関する部分です。他の部分との整合性を考えれば、
[[RDF URI参照]] (>>6) と解するのが適切でしょうか。
- [CITE@en[RDF/XML Syntax Specification (Revised)]] ([[W3C]] [[勧告]])
-- [CSECTION@en[6.3.2 Grammar Event Matching Notation]]
<http://www.w3.org/TR/2004/REC-rdf-syntax-grammar-20040210/#anyURI>
****XML Schema 1.1 anyURI
[79]
[[XML Schema 1.1]] における [DFN@en[[[anyURI]]]] の定義は
[[XML Schema 1.0]] のもの (>>15) とは異なり、 [[RFC 3987]]
(またはその改訂版) の [[IRI参照]]とされています。
ただし、その[[字句空間]]は単なる[[文字列]]と同じで、それ以上の制約は設けられていません。
Note には [[anyURI]] が実用上有用であるためには [[RFC 3987]] 3.1節の[[百分率符号化]]によって
[[RFC 3986]] [[URI]] になる[[文字列]]であるべきだと述べられていますが、
note であって定義には含まれていません。
;;
[80] なお、 [[XML Schema 1.1]] も [[URI]]/[[IRI]] と
[[URI参照]]/[[IRI参照]]の違いに無頓着なようです。
- [CITE@EN[W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes]] ([[W3C]]
[[LCWD]])
--[CSECTION@en[3.3.18 anyURI]]
<http://www.w3.org/TR/2008/WD-xmlschema11-2-20080620/#anyURI>
@@ 最終版の anyURI について
**** UDDI anyURI (XML Schema anyURI の参照)
[95] [[UDDI]] は [[XML Schema]] [CODE(XML)@en[[[anyURI]]]] を採用しているのですが、
実用上、互換性の問題があったようで、[[非ASCII文字]]を含む [CODE(XML)@en[[[anyURI]]]]
の取扱いに関する技術ノートが出版されています。
[[非ASCII文字]]を含む [CODE(XML)@en[[[anyURI]]]] をどのタイミングで [[XLink 1.0]]
の方法によって [[RFC ''2732'']] [[URI]] に変換しなければならない・するべきかといったことなどが述べられています。
- [CITE[Handling of anyURI datatypes Technical Note]] ([TIME[2008-11-17 12:28:01 +09:00]] 版)
<http://www.oasis-open.org/committees/uddi-spec/doc/tn/uddi-spec-tc-tn-anyurihandling-20040921.htm>
****WSDL anyURI (XML Schema anyURI の参照)
[35]
[[WSDL 2.0]] は [[XML Schema]] 第2版の [CODE(XML)@en[[[anyURI]]]] (>>15)
を使っています。ですが、単に引用するだけではなく、
- 本質的には [[RFC 3987]] [[IRI]] だ
- [[URI]] への変換は [[XLink 1.0]] で定義されているが、 [[RFC 3987]]
3.1 節とほとんど同じだ
- [[相互運用性]]のため、 [CODE(char)[[[<]]]], [CODE(char)[[[>]]]],
[CODE(char)[[["]]]], [CODE(char)[[[U+0020]]]], [CODE(char)[[[{]]]],
[CODE(char)[[[}]]]], [CODE(char)[[[|]]]], [CODE(char)[[[\]]]],
[CODE(char)[[[^]]]], [CODE(char)[[[`]]]] を使わないことをお勧めする
と述べられています。
実際に使用している箇所では、 [Q[[[RFC 3987]] の[[絶対IRI]]]]
のように更に制約があります。
[87] どうしてわざわざ「本質的に」などとわけのわからないことを付け加える必要があるのでしょう。
なお、この仕様書も [[URI]]/[[IRI]] と [[URI参照]]/[[IRI参照]]の違いには無頓着に見えます。
-[CITE@en[Web Services Description Language (WSDL) Version 2.0 Part 1: Core Language]]
([[W3C]] [[勧告]])
-- [CSECTION@en[1.4.3 XML Schema anyURI]]
<http://www.w3.org/TR/2007/REC-wsdl20-20070626/#xmlSchemaAnyURI>
*** IRI・IRI 参照に近い意味で「URI」や「URI 参照」を定義している仕様
****P3P URI
[25]
[[P3P]] は用語の定義の中で「[[URI]]」を定義しています。その中では [[RFC 2396]]
によると述べているのですが、 [[HTML]] や [[XML]] においては [[W3C]]
[[charmod]] [[WD]] の規定に従うとしています。
(ただし、 [[HTTP]] においては適用しないとされています。)
ですが、その参照 (normative reference) されている [[W3C]] [[charmod]] [[WD]]
は、仕様が [[IRI]] (の当時の [[Internet Draft]] である [[draft-masinter-url-i18n-08]])
を使用[['''するべきです''']]と述べているに過ぎず、 [[P3P]]
の実装が何をするべきなのかは明らかでありません。
[26] [[P3P 1.1]] [[WD]] の当該規定は [[P3P 1.0]] [[勧告]]から変更されていません。
参照している [[charmod]] [[WD]] も古いもののままです。
[40]
なお、 [[WD]] の当該部分は後に分割された別の単独の仕様書に移動しています (>>180)。
しかしながら、その仕様書は [[CR]] に達した後、放置されているようです。
(実質的な内容は変化していません。)
[[W3C]] [[勧告]]から [Q@en[Work in progress]]
な仕様を参照したことに大きな問題があります。
[REFS[
- [CITE@en[The Platform for Privacy Preferences 1.0 (P3P1.0) Specification]]
([[W3C]] [[勧告]])
--[CSECTION@en[1.3 Terminology]]
<http://www.w3.org/TR/2002/REC-P3P-20020416/#Terminology>
-[CITE@en[The Platform for Privacy Preferences 1.1 (P3P1.1) Specification]]
([[W3C]] [[WD]])
--[CSECTION@en[1.3 Terminology]]
<http://www.w3.org/TR/2005/WD-P3P11-20050701/#Terminology>
- [CITE@en[Character Model for the World Wide Web 1.0]] ([DEL[[[W3C]] [[WD]]]] 改訂済)
--[CSECTION@en[8 Character Encoding in URI References]]
<http://www.w3.org/TR/2002/WD-charmod-20020220/#sec-URIs>
-- [[P3P]] [[勧告]]が参照 (normative reference) する [[WD]]。
- [CITE@en[Internationalized Resource Identifiers (IRI)]]
<http://www.w3.org/International/2001/draft-masinter-url-i18n-08.txt>
-- [[charmod]] [[WD]] が参照する [[Internet Draft]]。
-- 当然のことながら、後の [[RFC 3987]] とは内容が異なります。
]REFS]
**** W3C Charmod
[181] [[W3C]] [[Charmod]] は、 >>182 のように[[URI参照]]から [[IRI参照]]への読み替え(?)を適合する仕様書に対して求めています。
[FIG[
- [182] [DFN[[[C058]]]] [[URI参照]]として解釈される[[プロトコル要素]]等を定義する仕様書は、
[[IRI]] (やその部分集合) を使う[['''べきです''']] [SRC[>>180]]。
]FIG]
;; [184] 「部分集合」を認めているので、ただの [[URI]] しか認めていなくても >>182 に適合しちゃうんですけど、
この規定の趣旨的にそれでいいのでしょうか。。。
[183] その他いくつか [[IRI]] に関する要件を定義しています。
[FIG[
- [185] [DFN[[[C059]]]] [[IRI参照]]から[[URI参照]]への変換がいつ行われるのかを、 [[IRI]]
に従い定義しなければ[['''なりません''']] [SRC[>>180]]。
- [186] [DFN[[[C060]]]] [[URI]] の新しい構文を定義する仕様書は、[[非ASCII文字]]を [[UTF-8]]
で[[パーセント符号化]]しなければ[['''なりません''']] [SRC[>>180]]。
- [187] [DFN[[[C061]]]] [[URI]] の新しい構文を定義する仕様書は、その構文の[[正規化]]の要件も定義する[['''べきです''']]
[SRC[>>180]]。
]FIG]
[REFS[
- [180] [CITE@en[Character Model for the World Wide Web 1.0: Resource Identifiers]]
([[W3C]] [[CR]])
<http://www.w3.org/TR/2004/CR-charmod-resid-20041122/>
]REFS]
[188] なお [[Charmod]] が参照しているのは [[RFC 3987]] になる前の [[I-D]] です。
**** XML 暗号化 URI
[24]
[[XML暗号化]]仕様書では、「[[URI]]」は [[XML Schema]] [[データ型]]
[CODE(XML)@en[[[anyURI]]]] (>>15) と [[XML署名]]
[CODE(XMLa)@en[[[URI]]]] [[属性]]の規定 (>>8)
に従わなければ[['''なりません''']]と規定されています。
なお、「[[URI]]」の参考文献として [[RFC 2396]] ([[URI]])、[[RFC 1738]] ([[URL]])、
[[RFC 2141]] ([[URN]])、[[RFC 2611]] ([[URN]]) が参照されています。
[83] 手当たり次第に何でも引用できるものはしてしまおうとでもいうのでしょうか、
無茶苦茶ですね。引用されている [[XML署名]]の規定は [[XLink 1.0]]