* 仕様書

[REFS[
- [40] [CITE@en[RDF 1.1 XML Syntax]] ([TIME[2018-04-22 22:59:05 +09:00]]) <https://dvcs.w3.org/hg/rdf/raw-file/default/rdf-xml/index.html#RDF>
- [63] [CITE@en[DOM Tree Validation]] ([TIME[2018-05-01 00:44:36 +09:00]]) <https://manakai.github.io/spec-dom/validation-langs#rss-1.0-rdf:rdf-element>
]REFS]

* 属性

[43] [CODE[xml:lang]] や [CODE[xml:base]] や[[名前空間属性]]などを除き、
基本的に[[属性]]は認められていません [SRC[>>40]]。

* 内容

[42] [CODE[rdf:RDF]] [[要素]]の[[内容]]は、0個[[以上]]の[[節点要素]]です。
前後や間に [[XMLの空白]]も挿入できます。 [SRC[>>40]]

* 文脈

[1] [[RDF/XML]] の [CODE(XMLe)@en[rdf:[[RDF]]]] [[要素]]が陽に認められている場所は、
[FIG(list)[
- [3] [[RDF/XML]] [[文書]]の[[根要素]]として
- [6] [[RSS 1.0]] [[文書]]の[[根要素]]として
- [38] [[XMPパケット]]の[[根要素]]として
- [39] [[XMP]] [CODE(XMLe)@en[[[xmpmeta]]]] [[要素]]の[[子要素]]として
- [4] [[CellML]] [[文書]]内の適当な場所
- [5] [[SMIL]] [CODE(XMLe)@en[[[metadata]]]] [[要素]]の[[子供]]として
- [31] [[CCXML]] [CODE(XMLe)@en[[[metadata]]]] [[要素]]の[[子供]]として
- [32] [[XTD]] [CODE(XMLe)@en[[[metadata]]]] [[要素]]の[[子供]]として
- [33] [[PLS]] [CODE(XMLe)@en[[[metadata]]]] [[要素]]の[[子供]]として
- [34] [[SSML]] [CODE(XMLe)@en[[[metadata]]]] [[要素]]の[[子供]]として
- [27] [[MathML]] の [CODE(XMLe)@en[[[annotation-xml]]]] [[要素]]の[[子要素]]として
- [28] [[InkML]] の [CODE(XMLe)@en[[[annotationXML]]]] [[要素]]の[[子要素]]として
- [37] [[RDF/XML/HTML注釈]]として
- [46] [CITE[Systems Biology Markup Language (SBML) Level 3Core - sbml-level-3-version-2-release-2-core.pdf]], [TIME[2019-04-26T19:11:44.000Z]], [TIME[2021-06-09T06:42:28.163Z]] <http://sbml.org/Special/specifications/sbml-level-3/version-2/core/release-2/sbml-level-3-version-2-release-2-core.pdf#page=100>
]FIG]

[29] 例示により特に想定されていることがわかる箇所は、
[FIG(list)[
- [2] [[HTML 5]] でいう「[[メタデータ内容]]」が認められる場所
-- <http://www.whatwg.org/specs/web-apps/current-work/#metadata-content-0> に「e.g. RDF」とあり
- [30] [[SVG]] の [CODE(XMLe)@en[[[metadata]]]] [[要素]]の[[子要素]]として
- [35] [[EmotionML]] の [CODE(XMLe)@en[[[info]]]] [[要素]]の[[子要素]]として
-- [36] [CITE@en[Emotion Markup Language (EmotionML) 1.0]] ([TIME[2014-05-20 20:02:30 +09:00]] 版) <http://www.w3.org/TR/emotionml/#s2.3.3>
]FIG]

[41] なお [CODE[rdf:RDF]] [[要素]]を省略し、
[[節点要素]]を直接使うことも認められています。

-*-*-

[44] 現実的には、 [[RSS 1.0]] の一部として用いられる場合と
[[PDF]] 内で [[XMP]] として用いられる場合を除き、
既に [[RDF/XML]] はほとんど用いられていないと思われます。

* [CODE(XMLe)@en[rdf:RDF]] 要素 (RSS 1.0)

[7] [DFN[[CODE(XMLe)@en[[[rdf:RDF]]]] [[要素]]]]は、[[RSS 1.0]] [[文書]]の[[根要素]]です。

[26] 
:要素名: [CODE(XMLe)@en[[[rdf:RDF]]]] (“[[RDF名前空間]]の”「[[RDF]] ([[文書]])」より) (>>11)
:文脈:[[RSS 1.0]] [[文書]]の[[根要素]]として (>>9)
:[[内容モデル]]:[CODE(XMLe)@en[[[channel]]]], [CODE(XMLe)@en[[[item]]]] など (>>18)
:[[属性]]:[[名前空間属性]] (>>13)

** 仕様書

- [8] [CITE[RDF Site Summary (RSS) 1.0]] ([TIME[2008-06-10 05:47:42 +09:00]] 版) <http://web.resource.org/rss/1.0/spec#s5.2>

** 文脈

[9] [[RSS 1.0]] [[文書]]の[[根要素]]は [CODE(XMLe)@en[[[rdf:RDF]]]] [[要素]]でなければなりません
[SRC[>>8]]。

[10] この[[要素]]は当時の [[RDF]] (現在の [[RDF/XML]]) 仕様への適合性のため、
また [[RSS 0.9]] との互換性のために必要でした。 [[RDF]] に基づかない [[RSS 0.91]]
や [[RSS 2.0]]、あるいは新しい [[RDF/XML]] 仕様に基づく [[RSS 1.1]] では除去されています。

** 要素名

[11] [[名前空間接頭辞]]は [CODE(XML)@en[rdf:]] とすることは[RUBYB[規定の一部である]@en[normative]]と[RUBYB[考える]@en[consider]]ことが[RUBYB[勧められています]@en[advised]]。
また、 [[RSS 0.9]] と厳密に後方互換であることを願う場合は [CODE(XML)@en[rdf:]]
としなければ[RUBYB[なりません]@en[must]]。 [SRC[>>8]]

;; [12] このようにわけのわからない規定になっているのは、[[名前空間接頭辞]]を自由に決定できるはずの
[[XML名前空間]]仕様との不整合を避けたかったのでしょう。

[16] [[RSS 0.9]] に限らず、新しい実装でも[[XML名前空間]]を正しく処理しないものがあるので、
現実には必ず [CODE(XML)@en[rdf:]] である必要があります。

** 属性

[13] 次の2つの[[名前空間属性]]を指定しなければなりません [SRC[>>8]]。
- [14] [CODE(XML)@en[[[xmlns:rdf]]="[[http://www.w3.org/1999/02/22-rdf-syntax-ns#]]"]] ([[RDF名前空間]])
- [15] [CODE(XML)@en[[[xmlns]]="[[http://purl.org/rss/1.0/]]"]] ([[RSS 1.0名前空間]])

[17] [[RDF/XML]] や [[XML名前空間]]としてはここで[[既定名前空間]]を指定しなければならない必然性はないわけですが、すべての[[利用者エージェント]]が[[XML名前空間]]を正しく実装しているわけでもないので、
互換性を考えると妥当な話です。

[25] [CODE(XMLa)@en[[[xml:lang]]]] [[属性]]によって[[フィード]]全体の[[言語]]が記述されることもよくあります。

** 内容モデル

[18] [CODE(XMLe)@en[[[rdf:RDF]]]] [[要素]]は次の各[[子要素]]を任意の順序で持ちます [SRC[>>8]]。
- [19] [CODE(XMLe)@en[[[channel]]]] (1つ)
- [20] [CODE(XMLe)@en[[[image]]]] (0-1)
- [21] [CODE(XMLe)@en[[[item]]]] (1つ以上)
- [22] [CODE(XMLe)@en[[[textinput]]]] (0-1)

[23] これ以外の[[要素]]を含めてもいいのかなどは明確に規定されていません。

[24] 現実には空の[[チャンネル]]を表す [[RSS]] も存在し、その場合
[CODE(XMLe)@en[[[item]]]] は一つも含まれないことになります。

* RSS 1.0 の判別

[45] [[RSS 1.0]] は [[RDF/XML]] でもあるというのが元々の“[[設定]]”
でしたが、現実的には [[RSS 1.0]] を [[RDF]] として扱うのは困難です。
実装は [[XML文書]]が与えられた時、
[[RSS 1.0]] かどうか判定する必要が出てきます。

[56] [[要素]][VAR[要素]]が[DFN[[RUBYB[RSS 1.0 [CODE[rdf:RDF]]要素]@en[RSS 1.0 [CODE[rdf:RDF]] element]]]]であるとは、
次のことをいいます [SRC[>>63]]。

[FIG(list)[
- [58] [VAR[要素]]の[F[名前空間URL]]が [[RDF名前空間]]で、
- [59] [VAR[要素]]の[F[局所名]]が [CODE[RDF]] で、
- [60] 次のいずれかを満たす:
-- [61] 
[VAR[要素]]の[F[接頭辞][名前空間接頭辞]]が [CODE[rdf]] で、
[VAR[要素]]に [[XMLNS名前空間]]の [CODE[xmlns]] [[属性]]があって[[属性値]]が [[RSS 1.0名前空間]]で、
[VAR[要素]]に [[XMLNS名前空間]]の [CODE[rdf][xmlns:rdf]] [[属性]]があって[[属性値]]が [[RDF名前空間]]である
-- [62] 
[VAR[要素]]の[F[親]]が[[文書]]であり、
[VAR[要素]]の[F[親]]の[F[内容型]]が [CODE[application/rss+xml]] である
]FIG]

[53] [[MIME Sniffing]] の
[[rules for distinguishing if a resource is a feed or HTML]] 
では、
[[文書要素]]らしきものとして [CODE[rdf:RDF]] [[要素]]があり、
[[RDF名前空間]]と [[RSS 1.0名前空間]]の[[名前空間属性]]が指定されている時、
[CODE[application/rss+xml]] を返します。

;; [54] [[RSS 1.0]] も参照。

[50] [[RSS 1.0]] であると判別できたときは、[[フィード]]として処理するべきです。

[57] [[RSS 1.0]] であると判断できなかったときは、 [[RDF]] として処理するべきです。
[[RDF]] に対応していない時は、他の未対応の[[ファイル形式]]の場合と同様に
([[ダウンロード]]などとして) 処理するべきです。