/
699.txt
120 lines (88 loc) · 7.66 KB
/
699.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
[5] [DFN[[CODE(URI)@en[[[http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral]]]]]]
([DFN[[CODE(XML)@en[[[rdf:XMLLiteral]]]]]]) は、 [[RDF]] における [[XML]]
型の値 ([DFN[[[XMLリテラル]]]]) です。
* 仕様書
[REFS[
- [24] '''[CITE@en[RDF 1.1 Concepts and Abstract Syntax]] ([TIME[2014-04-27 12:09:28 +09:00]] 版) <https://dvcs.w3.org/hg/rdf/raw-file/default/rdf-concepts/index.html#h3_section-XMLLiteral>'''
- [2] [CITE@en[RDF Schema 1.1]]
( ([TIME[2014-02-27 21:42:23 +09:00]] 版))
<https://dvcs.w3.org/hg/rdf/raw-file/default/rdf-schema/index.html#h3_ch_xmlliteral>
- [3] [CITE@en[RDF 1.1 XML Syntax]] ([TIME[2014-04-26 01:31:46 +09:00]] 版) <https://dvcs.w3.org/hg/rdf/raw-file/default/rdf-xml/index.html#h4_parseTypeLiteralPropertyElt>
]REFS]
* 定義
[26] [[データ型]] [DFN[[CODE@en[[[http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral]]]]]]
は次のように定義されています [SRC[>>24]]。
[27] [[字句空間]]は、 well-balanced で self-contained な [[XML 1.0]] の[[内容]] ([CODE(ABNF)@en[[[content]]]])
で、任意の [[XML]] の[[開始タグ]]と[[終了タグ]]の間に挟むと [[XML名前空間]]に適合するようなすべての[[文字列]]の[[集合]]です
[SRC[>>24]]。
;; [28] 「well-balanced」と「self-contained」は [[XML]] でも [[RDF]] でも定義されていません。
意図するところは推測できますが、推測しないといけないような仕様書でいいのでしょうか・・・。
[29] [[値空間]]は、 [[DOM]] [CODE(DOMi)@en[[[DocumentFragment]]]] [[節点]]の[[集合]]です [SRC[>>24]]。
[CODE(DOMi)@en[[[DocumentFragment]]]] が等しいかどうかは [CODE(DOMm)@en[[[isEqualNode]]]] [[メソッド]]が[[真]]かどうかによります
[SRC[>>24]]。
[30] [[字句から値への写像]]は、相当する [CODE(DOMi)@en[[[DocumentFragment]]]] [[節点]]を用意して、
[CODE(DOMm)@en[[[normalize]]]] [[メソッド]]を適用するというもの [SRC[>>24]] です。
;; [31] どのように [CODE(DOMi)@en[[[DocumentFragment]]]] を作るのかは明記されていません。
[32] [RUBYB[[[正準写像]]]@en[canonical mapping]]は、[[排他的XML正準化]] (1.0) を[[注釈]]あり、
[[InclusiveNamespaces PrefixList]] は空として適用するというもの [SRC[>>24]] です。
;; [34] 厳密にはこの結果は[[Unicode文字列]]ではなく [[UTF-8]] [[オクテット列]]になってしまいそうですが・・・。
[6] [CODE(XML)@en[[[rdf:XMLLiteral]]]] は、[[XMLリテラル値]]の[[クラス]]です [SRC[>>2]]。
[CODE(XML)@en[[[rdf:XMLLiteral]]]] は [CODE(XML)@en[[[rdfs:Datatype]]]] の[[実現値]]であり、
[CODE(XML)@en[[[rdfs:Literal]]]] の[[部分クラス]]です [SRC[>>2]]。
;; [33] [[XML名前空間]]、[[言語]]、[[基底URL]]は文脈から得られませんから、
[[XML]] に含めておく必要があります [SRC[>>24]]。
* RDF/XML 構文
[7] [[RDF/XML]] では、[[要素]]の[[内容]]が[[リテラル]]で、 [CODE(XMLa)@en[[[rdf:parseType]]]] が [CODE(RDF)@en[[[Literal]]]]
なら、[[XMLリテラル]]と解釈されます。
[8] [[内容]]の[[リテラル]]の[[XML情報集合]]から [[RDFグラフ]]における[[XMLリテラル]]の字句形 ([[Unicode]] 文字列)
へは次のようにして変換します [SRC[>>3]]。
[FIG[
= [9] [[リテラル]]から [[XDM 3.0]] [[XPath]] [RUBYB[[[列]]]@en[sequence]]を構築します。
= [10] [[XPath 3.0]] [[関数]] [CODE(XML)@en[[[fn:serialize]]]] を適用し、
[CODE(XML)@en[[[xsd:string]]]] 型の値を得ます。
= [11] 得られた値が字句形です。
]FIG]
[16] 2004年版では次のように定義されていました [SRC[>>15]]。
[FIG[
= [17] [[リテラル]]から [[XPath 1.0]] [[節点集合]] ([[正準XML]] [[文書部分集合]]) を構築します。
= [18] [[排他的XML正準化]] (1.0) により[[オクテット列]]を得ます。このとき、[[注釈]]あり、[[InclusiveNamespaces PrefixList]]
は空とします。
= [19] この[[オクテット列]]を [[UTF-8]] [[文字列]]と解釈したのが字句形です。
]FIG]
[21] [[RDF 1.1]] の変更点 >>20 によると2004年版からの変更点は[[参考]]になったことだけで、技術的内容は変わっていないとされているのですが、
実際には[[排他的XML正準化]]と [CODE(XML)@en[[[fn:serialize]]]] で[[直列化]]の方法が違っています。
後者は[[属性]]の順序が決まっていないなど、自由度があり、結果が一意に定まりません。
(>>30 の通り、[[正準字句形]]が[[正準化]]の結果とされていますから、 [[RDF/XML]] の段階ではまだこの処理を行わなくても良くなったということなのでしょう。)
;; [23] ちなみに1999年版仕様 [SRC[>>22]] はデータモデルベースの仕様ではなく [[XML文書]]の文字列ベースの仕様だったので、
文字列化の方法は規定されていませんでした。[[空白]]の正規化などは将来の課題と言及されていました。
[12] >>11 の値は [[NFC]] である[['''べきです''']] [SRC[>>3]]。
;; [13] なぜか仕様 [SRC[>>3]] 上は >>12 も手順に含まれていますが、「SHOULD be in NFC」
とあるので、[[著者]]の要件だと推測されます。
[14] >>11 が[[リテラル値]]で、[[リテラルデータ型]]が
[CODE(URI)@en[[[http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral]]]] である[[型付きリテラル]]となります [SRC[>>3]]。
* 歴史
[REFS[
- [22] [CITE[Resource Description Framework (RDF) Model and Syntax Specification]] ([TIME[1999-02-24 14:45:07 +09:00]] 版) <http://www.w3.org/TR/1999/REC-rdf-syntax-19990222/#parseLiteral>
- [15] [CITE@en[RDF/XML Syntax Specification (Revised)]] ([TIME[2004-02-10 15:29:31 +09:00]] 版) <http://www.w3.org/TR/2004/REC-rdf-syntax-grammar-20040210/#parseTypeLiteralPropertyElt>
]REFS]
[1] [CITE@en[Defining rdf:XMLLiteral in terms of the DOM]]
( ([[Richard Cyganiak]] 著, [TIME[2012-05-09 23:54:36 +09:00]] 版))
<http://lists.w3.org/Archives/Public/public-rdf-wg/2012May/0186.html>
[4] [[RDF 1.1]] では [CODE@en[[[XMLLiteral]]]] に関する部分が[[規定]]から[[参考]]に格下げされています [SRC[>>20]]。
これは [[DOM4]] が [[W3C勧告]]でないためと説明されています [SRC[>>24]]。
[REFS[
- [20] [CITE@en[RDF 1.1 XML Syntax]] ([TIME[2014-02-21 12:38:31 +09:00]] 版) <http://www.w3.org/TR/2014/REC-rdf-syntax-grammar-20140225/#h2_sotd>
]REFS]
;; [25] [[RDF 1.0]] では[[規定]]の一部だった [CODE@en[[[XMLLiteral]]]] を[[参考]]に格下げさせた [[W3C Process]]
や、規定の一部を曲げてまで [[RDF 1.1]] を [[W3C勧告]]に進めたことに一体どれだけの意味や価値があるのでしょう...
[35] しかしこのような[[非互換変更]]が平気で行われた上に[[参考]]に格下げされるなど、
[CODE[XMLLiteral]] の扱いが低いのは、それだけ使われていないということなのでしょうかね。
[[RDF]] コミュニティーにおける [[RDF/XML]] の地位低下に伴って使いづらくもなっていそうですし、
すべて[[三項組]]に[[正規化]]できるという [[RDF]] ([[Semantic Web]])
の世界観に反しているのかもしれません。
[36] [CITE@en[need CR? :( Re: Denotation of XMLLiterals: poll]]
([[Dan Brickley]]著, [TIME[2003-08-07 21:17:04 +09:00]])
<https://lists.w3.org/Archives/Public/w3c-rdfcore-wg/2003Aug/0086.html>
[37] [CITE[RIF Datatypes and Built-Ins 1.0 (Second Edition)]]
([TIME[2017-10-02 19:47:14 +09:00]])
<https://www.w3.org/TR/2013/REC-rif-dtb-20130205/#Functions_and_Predicates_on_rdf:XMLLiterals>