연구_고민2007.08.17 15:01
번역본에 대한 저작권이 어떻게 되는지는 모르겠으나, 암튼 필요하시면 누구나 활용하셔도 좋습니다....
============================================================================

RSS 2.0 Specification

Contents

What is RSS?

RSS는 웹 컨텐츠를 배급/배포하기 위한 포맷이며, RSS란 이름은 'Really Simple Syndication'의 약자이다.

RSS는 XML로 표기된 데이터이며 모든 RSS 파일은 반드시 World Wide Web Consortium(W3C)에서 정의한 XML1.0 규격을 준수하여야 한다.

RSS version history에서 RSS 버전의 히스토리를 볼 수 있다

RSS 문서는 가장 상위 레벨로서 <rss> element를 가지며 이 태그 안에는 해당 RSS 문서가 준수하는 RSS 버전을 알려주는 version 속성을 포함한다. 이 규격을 만족하는 RSS 문서의 경우 version 속성의 값은 반드시 2.0이어야 한다.

<rss> element는 하나의 <channel> element를 가지며, 이 element는 특정 channel에 대한 정보와 해당 channel의 컨텐츠들에 대한 정보를 가지고 있다.

Sample files

RSS 버전에 따른 샘플 파일은 RSS 0.91, 0.92, 2.0에서 각각 얻을 수 있다.

About this document

이 문서는 2002년 가을 시점의 버전 2.0.1에 대한 RSS의 status를 다루고 있으며, RSS 0.91 (June 2000)을 기본으로 하여  RSS 0.92 (December 2000) 및 RSS 0.94(August 2002)에서 소개된 새로운 Feature들을 포함하고 있다.

변경 이력은 Change Notes에서 볼 수 있다.

이문서에서는 첫번째로 <channel> element가 가지는 필수 sub-element와 부가적인 sub-element에 대하여 기술하며, 두번째로는 <item>의 sub-element를 다룬다. 마지막 부분에서는 FAQ, 향후 로드맵, 그리고 RSS를 확장하기 위한 가이드라인을 제시한다.

Required channel elements

다음은 <channel> element가 가지는 필수(Required) sub-element들에 대하여 기술한다.

Element Description Example
title 해당 channel의 이름으로서 다른 사용자가 이 서비스를 참조하기 위한 이름이다. 만약 RSS 파일가 가진 정보를 동일하게 가지는 HTML로 이뤄진 웹사이트가 있다면 channle의 title은 해당 웹사이트의 title 값과 동일하여야 한다. GoUpstate.com News Headlines
link 해당 channel에 대응되는 HTML 웹사이트의 URL이다. http://www.goupstate.com/
description       해당 channel을 설명하기 위한 구절 혹은 문장이다. The latest news from GoUpstate.com, a Spartanburg Herald-Journal Web site.


Optional channel elements

다음은 <channel>이 가지는 부가적인(Optional) sub-element들에 대하여 기술한다.

Element Description Example
language 해당 channel이 작성된 언어. 이를 이용하여 사용자가 특정 언어로 작성된 사이트들을 그룹핑하는 것도 가능하다. 사용가능한 value는 Netscape에서 제공하는 링크(here)에서와 같다. 또한 W3C에서 정의한 값들(values)을 사용할 수도 있다. en-us
copyright Channel 안의 컨텐트에 대한 Copyright Copyright 2002, Spartanburg Herald-Journal
managingEditor 해당 컨텐트에 대한 편집상의 책임을 가진 사람에 대한 메일 주소 geo@herald.com (George Matesky)
webMaster 해당 Channle과 관련된 기술적 이슈에 대한 책임을 가진 사람의 메일 주소. betty@herald.com (Betty Guernsey)
pubDate Channle 내의 각 컨텐츠가 publish된 날짜. 예를 들어 New York Times는 일간이므로 매 24시간마다 한번씩 publish 하며 그 시간이 pubDate가 된다. RSS 규격에서 사용되는 모든 date-time 형식은 RFC 822에서 정의한 Date와 Time 규격을 따라야 한다. 단 year 값이 두자 혹은 네자로 표현될 수 있다(RFC 822에서는 두자리이다). Sat, 07 Sep 2002 00:00:01 GMT
lastBuildDate channel 내의 컨텐츠가 마지막으로 변경된 시간. Sat, 07 Sep 2002 09:42:31 GMT
category channel이 속하는 카테고리를 하나 이상 명시한다. <item> 내의 category  element와 동일한 규칙을 따른다. More info. <category>Newspapers</category>
generator channel을 생성하는데 사용된 프로그램을 명시하는 스트링. MightyInHouse Content System v2.3
docs 해당 RSS 파일 안에 사용된 포맷에 대한 문서의 위치를 가리키는 URL. 이 페이지와 같은 RSS 규격에 대한 URL이 될 수 있다. http://blogs.law.harvard.edu/tech/rss
cloud 해당 channel이 갱신되었음을 통보(notified) 받게 될 리스트에 등록하는 절차를 제공한다. More info here. <cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="pingMe" protocol="soap"/>
ttl ttl은 'time to live'를 의미한다. channel이 소스로부터 refresh하기 이전에 얼마나 캐쉬되어질 수 있는가를 분단위로 표시한다. (It's a number of minutes that indicates how long a channel can be cached before refreshing from the source). More info here. <ttl>60</ttl>
image 해당 channel과 함께 보여질 이미지를 명시한다. 이미지의 형식은 GIF, JPEG 혹은 PNG 이다. More info here.
rating channel에 대한 PICS rating.
textInput channel과 함께 보여질 텍스트 입력 상자를 명시한다. More info here.
skipHours 수집기(Aggregator)에게 수집을 건너뛰어도 될 시간을 알려준다. More info here.
skipDays 수집기에게 수집을 건너뛰어도 될 요일을 알려준다. More info here.


<image> sub-element of <channel>

<image>는 <channel>의 필수가 아닌 부가 sub-element로서, 다시 세개의 필수 sub-element와 세개의 부가 sub-element를 가진다.

<url>은 해당 channel에 대한 이미지GIF, JPEG 혹은 PNG)의 URL이다.

<title>은 이미지에 대한 설명으로서, channel에 대한 내용이 HTML로 표현될 때 HTML의 <img> 태그의 ALT 속성으로 사용되는 값이다.

<link>는 channel에 대한 사이트의 URL로서, HTML로 표현될 때 이미지에 걸려지는 사이트 링크로 사용된다.

부가적인 sub-element로서 이미지의 넓이와 높이를 픽셀 단위로 표현하는 <width>와 <height>가 있다.
<description>은 HTML에서 해당 이미지에 걸려지는 링크의 TITLE 속성으로 사용되는 텍스트이다.

width의 최대 값은 144이며 디폴트는 88이다.
width의 최대 값은 400이며 디폴트는 31이다.

<cloud> sub-element of <channel>

<cloud>는 <channel>의 부가 sub-element이다.

HTTP-POST, XML-RPC 혹은 SOAP 1.1에서 구현되어질 수 있는 rssCloud 인터페이스를 지원하는 웹 서비스를 명시한다. (It specifies a web service that supports the rssCloud interface which can be implemented in HTTP-POST, XML-RPC or SOAP 1.1.)

이 sub-element의 목적은 channel이 갱신되었음을 알려주는 대상 리스트에 등록할 수 있는 절차(process)를 명시하는 것이다.

<cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" />

위의 예에서, 해당 channel의 갱신을 통보받기 위해서는 'rpc.sys.com'의 80번 포트의 '/RPC2/'에 XML-RPC 메시지를 전송하면 된다. 호출하는 프로시져는  'myCloud.rssPleaseNotify'이다..

이 element와 rssCloud 인터페이스에 대한 전체 설명은 here를 참조한다.

<ttl> sub-element of <channel>

<ttl>는 <channel>의 부가 sub-element이다.

ttl은 'time to live'를 의미하며, channel이 소스로부터 refresh하기 이전에 얼마나 캐쉬되어질 수 있는가를 분단위로 표시한다. 이는 RSS 소스가 Gnutella와 같은 파일 공유 네트워크에 의하여 관리될 수 있도록 해준다.

예: <ttl>60</ttl>

<textInput> sub-element of <channel>

<textInput>은 부가 <channel>의 sub-element이며, 4개의 필수 sub-element를 포함한다.

<title> -- 텍스트 입력 상자의 Submit 버튼의 라벨.

<description> -- 텍스트 입력 상자에 대한 설명

<name> -- 텍스트 오브젝트의 이름

<link> -- 텍스트 입력 요청을 처리하는 CGI 스크립트의 URL

<textInput> element의 목적이 모호한데, 이를 검색엔진 박스를 명시하는데 사용하거나 리더로 하여금 피드백을 제공할 수 있게 하는데 사용할 수 있다. 대부분의 Aggregator들은 이를 무시한다.


Elements of <item>


하나의 channel이 가질 수 있는 <item>의 수는 제한이 없다. 하나의 item은 하나의 "story"를 표현한다고 할 수 있는데, 신문이나 잡지의 한 story의 개념에 해당하며, 이때 item의 description은 story의 줄거리를, link는 전체 story에 대한 위치를 의미한다. item의 description에 전체 HTML(entity-encoded HTML이 들어갈 수 있다. see examples)을 넣음으로써 item 자체로 story를 완성할 수도 있는데, 이경우에 link와 title은 생략될 수 있다. item이 가지는 모든 element들은 필수가 아니지만(optional), title이나 description 중 적어도 하나는 존재하여야 한다.  

Element Description Example
title 해당 item의 제목 Venice Film Festival Tries to Quit Sinking
link 해당 item에 대한 전문이 있는 URL http://nytimes.com/2004/12/07FEST.html
description     해당 item의 줄거리(synopsis) Some of the most heated chatter at the Venice Film Festival this week was about the way that the arrival of the stars at the Palazzo del Cinema was being staged.
author 해당 item 작성자의 Email 주소. More.
category 해당 item을 하나 이상의 카테고리로 분류. More.
comments 해당 item과 관련한 코멘트들을 볼 수 있는 페이지의 URL. More.
enclosure 해당 item에 포함되어 있는 미디어 개체에 대하여 기술한다. More.
guid 해당 item을 유일하게 구분해주는 구분자. More.
pubDate 해당 item이 발행(publish)된 시간. More.
source 해당 item의 출처가 되는 RSS channel. More.


<source> sub-element of <item>

<source>는 <item>의 부가(ptional) sub-element 이다.

<source>에는 해당 item의 출처가 된 RSS channel의 이름을 값으로 가지며, 이 이름은 그 출처 RSS channel 내의 <title> element에 해당된다. 속성으로는 필수 속성인 url를 가지며, url 속성의 값은 해당 소스에 대한 XML의 위치를 가리킨다.

<source url="http://www.tomalak.org/links2.xml">Tomalak's Realm</source>

이 element의 목적은 뉴스 item에 대한 출처를 공시함으로써 링크에 대한 신뢰성을 높이기 위한 것이다. 또한 aggregator의 Post 명령에서 사용될 수 있는데, aggregator에서 웹블로그(weblog)의 저작 툴로 item을 포워딩할 때 반드시 자동으로 생성되어져야 한다.

<enclosure> sub-element of <item>

<enclosure>는 <item>의 부가 sub-element이다.

이 element는 세개의 필수 속성인 url, length, type을 가진다.
url은 해당 enclosure의 위치를 표시하며, length은 바이트 단위의 크기를, type은 어떤 표준 MIME 타입인가를 알려준다.

url은 반드시 http url이어야 한다.

<enclosure url="http://www.scripting.com/mp3s/weatherReportSuite.mp3" length="12216320" type="audio/mpeg" />

다음의 링크는 이 element의 사용에 대한 사용 예이다. here.

<category> sub-element of <item>

<category>는 <item>의 부가 sub-element이다..

가질 수 있는 속성은 부가 속성인 domain 한가지이며, 이는 카테고리 분류를 표현하는 스트링값이다.domain의 값은 해당 분류(category)에 대한 트리 구조 안에서의 위치(hierarchic location)를 알려준다. 이를 처리하는 주체(Processor)는 category를 해석하는 방식(convention)을 규정할 수도 있다. 다음은 두가지의 예이다.

<category>Grateful Dead</category>

<category domain="http://www.fool.com/cusips">MSFT</category>

필요한 만큼의 각각 다른 도메인들에 대한 category를 포함시킬 수 있으며, 동일 도메인 내의 각기 다른 파트를 참조하는 item들이 존재할 수도 있다. (You may include as many category elements as you need to, for different domains, and to have an item cross-referenced in different parts of the same domain.)

<pubDate> sub-element of <item>

<pubDate>는 <item>의 부가 sub-element이다.

해당 item이 발행된(published) 시간을 표시하는 date이다. 만약 이 시간이 현재보다 미래인 경우, aggregator는 그 시간이 될 때까지 해당 item을 보이지 않도록 할 수 있다(may).

<pubDate>Sun, 19 May 2002 15:21:36 GMT</pubDate>

<guid> sub-element of <item>

<guid>는 <item>의 부가 sub-element이다.

guid는 'globally unique identifier'를 의미하며, 해당 item를 유일하게 구분지어주는 구분자이다. guid가 존재하는 경우에, aggregator는 그 item이 새로운 item인가를 판단하는데 guid를 사용할 수 있다.

<guid>http://some.server.com/weblogItem3207</guid>

guid의 표현방식(syntax)에는 아무런 규칙이 없으며, aggregator는 guid를 스트링으로 인식하여야 한다. guid의 유일성은 해당 RSS 피드를 생성하는 주체가 보장하여야 한다.

만약 guid가 "isPermaLink"라는 속성을 가지고 그 값이 참(true)이라면, RSS Reader는 이 guid가 해당 item에 대한 permalink라고 여길 수 있다. 즉, guid의 값이 해당 item에 대한 Full Story를 가리키는 웹페이지(웹브라우저에서 열려지는)에 대한 url이 된다. 예를 들면 다음과 같다:

<guid isPermaLink="true">http://inessential.com/2002/09/01.php#a2</guid>

isPermaLink 속성은 필수가 아니며(optional), 디폴트 값은 참(true)이다. 이 속성의 값이 거짓(false)인 경우 guid는 무언가를 가리키는 url이 아니라고 판단하여야 한다.

<comments> sub-element of <item>
<comments>는 <item>의 부가 sub-element이다.

해당 item에 대한 코멘트 페이지에 대한 url을 표시한다.

<comments>http://ekzemplo.com/entry/4403/comments</comments>

다음의 링크에 코멘트에 대한 상세한 내용이 있다. here.

<author> sub-element of <item>

<author>는 <item>의 부가 sub-element이다.

해당 item 저자(author)의 email 주소이다. RSS을 이용한 신문이나 잡지의 경우 저작자는 해당 <item>이 설명하는 기사를 작성한 사람이 될 수 있다. 공동으로 사용하는 블로그와 같은 경우 저작자는 관리편집자나 웹마스터와 다른 사람일 수 있다. 한 개인만이 사용하는 블로그의 경우 <author>를 사용하지 않는 것이 적절하다.

<author>lawyer@boyer.net (Lawyer Boyer)</author>

Comments

RSS에서는 <link>와 <url> element의 값은 반드시 스페이스가 처음으로 나오지 않아야 하며, 또한  IANA-registered URI scheme(예를 들어, http://, https://, news://, mailto:, ftp://)으로 시작되어야 한다. RSS 2.0 이전 규격에서는 단지 'http//'과 'ftp://' 만이 허용되었으나 실제로는 다른 URI scheme들이 컨텐츠 개발자나 aggregator에 의해 사용되어졌다. Aggregator는 자신이 지원하는 URI scheme을 제한할 수 있으며 따라서 컨텐츠 개발자는 모든 aggregator가 모든 scheme을 지원한다고 가정하면 안된다.

RSS 0.91에서는 많은 element들이 값의 길이가 500 혹은 100자를 넘을 수 없으며, 0.91의 <channel> 안에는 최대 15개까지의 <item>만을 가질 수 있지만 RSS 0.92와 그 이후의 규격에서는 스트링의 길이나 XML-level의 제한이 없다. 규격과는 상관없이 Processor들이 스스로의 제약을 두거나 generator가 특정 갯수 이상의 <item>이 하나의 channel에 나타나지 않도록, 혹은 스트링의 길이 제한을 두는 것을 선호할 수는 있다.  

RSS 2.0에서, Provision은 channel 내의 category를 활용하여 해당 channel을 어떤 카탈로그 시스템 내의 특정 구분자(identifier)에 링크함으로써 이루어진다. 예를 들어, 어떤 channel을 'Syndic8' 구분자에 링크하기 위해서는, 'Syndic8'이란 domain 속성을 가진 category element를 <channel>의 sub-element로 포함하고, 그 값으로서 Syndic8 데이터베이스 내의 해당 channel에 대한 구분자를 가진다.다음은 적절한 예이다.

 <category domain="Syndic8">1765</category>.

guid에 대하여 자주 묻는 질문은 <link>와의 비교할 때 똑같지 않는가이다. 이에 대한 답은 어떤 컨텐츠 시스템에서는 '예'이며, 또 다른 시스템에서는 '아니오'라는 것이다. 어떤 시스템에서는 <link>가 특정 weblog item에 대한 permalink일 수 있지만, 다른 시스템에서의 경우 <item>이 어떤 긴 내용의 기사의 줄거리라면 <link>는 그 기사를 가리키고 <guid>는 해당 weblog entry에 대한 permalink가 된다. 모든 경우에 있어서 가급적 guid를 제공하고 가능하다면 그것을 permalink로 만드는 것을 권장하며, 이는 aggregator로 하여금 같은 item들을 반복하여 처리하지 않도록 해준다(This enables aggregators to not repeat items, even if there have been editing changes).

RSS 2.0 포맷에 대한 질문은 RSS2-Support 메일링 리스트를 이용한다.

Extending RSS

RSS가 1999년에 시작된 이후 RSS는 간단하고 이해하기 쉬운 포맷이 되기 위하여 노력해왔다. 하지만 RSS가 유명해짐에 따라 개발자들로부터 W3C에서 정의한(specified) namespace를 활용하여 새로운 모듈들을 확장하여 RSS에 적용되기를 원하게 되었다.

RSS 2.0은 이에 대하여 다음과 같은 간단한 규칙을 통하여 이 요구를 수용하였으며, 이를 이용함으로써 RSS Feed는 이 규격 페이지에는 없지만 다른 namespace에서 정의한 다른 element들을 포함할 수 있게 된다.

이 문서에서 정의한 element들은 어떤 특정 namespace에 속하지 않기 때문에, RSS 2.0은 기존의 0.91이나 0.92 RSS 버전과의 호환성을 지킬 수 있다. 만약 RSS 2.0의 element들이 어떤 하나의 namespace에 속했다면 0.9x 파일은 RSS 2.0 파일일 수 없게 된다.

Roadmap

RSS는 완벽한 포맷은 아니지만, 매우 유명하고 광범위하게 지원되어지고 있다. RSS에 대한 안정적인 규격을 가지는 것이 장기적으로 필요하며, 이 규격 작업의 목적도 RSS를 활용한 시장의 성장을 촉진하고 새로운 syndication 포맷이 개발되는데 혼선을 주지 않기 위하여 RSS가 더이상 변경되지 않는 규격이 되는데 도움을 주기 위한 것이다. 따라서 RSS 규격은 2.0.1에서 동결되며 향후 2.0.2나 2.0.3이 나올 수는 있지만 그것은 단지 규격을 좀더 가다듬고 명확하기 위한 목적이지 새로운 기능(Feature)를 추가하는 것이 목적이 아니다. 이후의 개선 작업은 namespace를 활용하여 모듈 내에서 이루어지거나 완전히 다른 이름의 새로운 syndication 포맷으로 이루어져야 한다.

License and authorship

RSS 2.0 is offered by the Berkman Center for Internet & Society at Harvard Law School under the terms of the Attribution/Share Alike Creative Commons license. The author of this document is Dave Winer, founder of UserLand software, and fellow at Berkman Center.
신고
Posted by naearu