<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="http://rss.egloos.com/style/blog.xsl" type="text/xsl" media="screen"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
	<title>悲, 비, Rain, 來人의 향기..</title>
	<link>http://virus56.egloos.com</link>
	<description>..</description>
	<language>ko</language>
	<pubDate>Tue, 21 Apr 2009 03:59:58 GMT</pubDate>
	<generator>Egloos</generator>
	<image>
		<title>悲, 비, Rain, 來人의 향기..</title>
		<url>http://md.egloos.com/img/samplelogo2.gif</url>
		<link>http://virus56.egloos.com</link>
		<width>80</width>
		<height>80</height>
		<description>..</description>
	</image>
  	<item>
		<title><![CDATA[ 한국형 모바일 웹 모범 사례(KMWBP) ]]> </title>
		<link>http://virus56.egloos.com/4892721</link>
		<guid>http://virus56.egloos.com/4892721</guid>
		<description>
			<![CDATA[ 
  <span style="" lang="EN-US">1. KMWBP 개요</span><p class="바탕글"><span style="" lang="EN-US"> <blockquote>모바일 웹2.0 포럼에서 Web과 WAP 표준 규격을 바탕으로 W3C 모범사례 1.0 규격을 준수하고 발전시킨 한국형 모바일 웹 모범사례의 규격을 정의한 표준 문서로 2007년 12월에 Ver1.0이 발표되었고, 2008년 11월 Ver1.5로 개정 되었다. 이 표준은 W3C DDC, HTML 4.01, CSS 2.0, WCSS 1.2, DOM 1, DOM 2 규격을 기초로 하면 모바일 환경에 적합한 규격을 정의한다.<br />
<br />
</blockquote>2. KMWBP의 목적</span></p><ul><li>하드웨어 구성 기준 마련<br />
- 컨텐츠 제공자와 사용자의 하드웨어 환경과 구성에 따라, 컨텐츠 출력과 동작의 차이가 있을 수 있다. KMWBP에서는 환경에서 발생하는 차이점을 최소화 하기 위해, 웹컨텐츠 출력 및 동작을 고려한 하드웨어 기준을 정의한다.</li><li>모바일 환경에 최적화 된 웹 규격 마련<br />
- 모바일 환경에 최적화 된 웹 표준 규격을 마련하여, 다양한 플랫폼에 적용 가능하도록 유연성이 보장된 규격을 정의하는 것이 목표이다. 이를 이용해 유무선 표준 규격을 마련하여 웹 상호 호환성을 확보할 수 있다.</li><li>컨텐츠 개발 가이드 기준으로 사용<br />
- 이 표준은 KMWBP의 표준규격을 정의하므로 컨텐츠 개발 가이드의 참고 자료로서 컨텐츠 개발 가이드의 상세 정의를 참고할 목적으로 활용한다.<br />
</li></ul><br /><br />3. KDDC<br />
<br />
<blockquote>3.1. 목적<br />
&nbsp; DDC의 목적은 이해 가능하고 상호호환 가능한 웹 컨텐츠의 전달 과정에 대해 정의하고 활용하기 위함이다. 이를 통해 모바일 웹 컨텐츠의 전달 과정에서의 관련 표준 및 규격의 범위, 단말의 성능 조건, 네트워크의 성능 조건 등을 정의할 수 있다. 또한 KDDC를 정의하는 목적은 한국형 모바일 OK의 대상과 범위를 명확하게 하고, 이를 통해 모바일 OK 표준화의 대상과 기준을 명확하게 하기 위함에 있다.<br />
<br />
3.2. DDC(Default Delivery Context)<br />
&nbsp; W3C에서 정의하고 있는 DC(Delivery Context)란 장치 독립성 표준화에 등장한 용어이다. DC란 웹 서버(컨텐츠 제공자)와 웹 클라이언트(컨텐츠 사용자) 사이에서 웹 페이지를 전달하는 과정에 관련되는 접근 메커니즘의 허용 범위, 사용자의 선호도, 컨텐츠 사용자의 처리 능력과 같은 여러 특징 요소들의 집합을 의미한다. DC를 이용하면 컨텐츠 사용자와 컨텐츠 제공자 사이에서의 제약과 한계 특성을 고려한 컨텐츠를 전달할 수 있다. W3C의 모바일 웹 모범사례에서는 사용자의 효과적인 웹 활용에 필요한 최소한의 DC를 DDC로 다음과 같의 정의 하고 있다.<br />
<br />
<br />
<ul><li>사용가능한 화면 너비<br />
- 최소 120 픽셀</li><li>마크업 언어 지원<br />
- XHTML Basic 1.1 [XHTML-Basic](application/xhtml+xml 컨텐츠 타입 기반)</li><li>문자 인코딩<br />
- UTF-8</li><li>이미지 형식 지원<br />
- JPEG<br />
- GIF</li><li>최대 페이지 크기<br />
- 20 KB</li><li>컬러<br />
- 최소 256 컬러</li><li>스타일 시트 지원<br />
- CSS1, CSS2</li><li>HTTP<br />
- HTTP1.0/1.1</li><li>스크립트<br />
- 클라이언트 기반의 스크립팅은 지원 안함</li></ul><br />
3.3. KDDC 규격<br />
<br />
<ul><li>단말의 화면 가로 너비 <br />
- 최소 240픽셀, 최대 480 픽셀</li><li>마크업 언어 지원 <br />
- HTML 4.01, XHTML Basic 1.1 [XHTML-Basic] – application/xhtml+xml 콘텐츠 타입 기반</li><li>문자 인코딩<br />
- UTF-8.[UTF-8], EUC-KR</li><li>이미지 형식 지원 <br />
- JPEG<br />
- GIF 89a<br />
- PNG</li><li>최대 페이지 크기<br />
- 50 Kbytes</li><li>컬러 <br />
- 최소 256 컬러 이상</li><li>스타일 시트 지원 <br />
- CSS 레벨 2.1과 CSS 3 일부 지원 <br />
</li><li>HTTP <br />
- HTTP/1.0 [HTTP1.0] 또는 HTTP1.1 [HTTP1.1]</li><li>스크립트<br />
- AJAX를 위한 ECMAScript 3 지원</li><li>AJAX 지원 <br />
- XHR(XMLHttpRequest) 지원 <br />
</li><li>HTTPS/SSL 지원 <br />
- HTTPS/SSL 지원&nbsp; <br />
</li><li>AJAX를 위한 XML Parser 지원 <br />
- DOM1, DOM2 core, DOM3 core, DOM3 event 지원&nbsp;</li></ul>3.4. DDC와 KDDC 비교<br />
<br />
&nbsp; DDC와 KDDC는 기본적으로 동일한 목적은 가진다. KDDC는 DDC 규격이 2005년도에 제정 되었기 때문에 한국형 모바일 웹 표준화가 진행되고 있는 시점에 맞게 현실화 시키기 위해 갱신한 것이다.<br />
</blockquote><br />
<br/><br/>tag : <a href="/tag/표준" rel="tag">표준</a>,&nbsp;<a href="/tag/MobileOK" rel="tag">MobileOK</a>,&nbsp;<a href="/tag/KMWBP" rel="tag">KMWBP</a>,&nbsp;<a href="/tag/KDDC" rel="tag">KDDC</a>			 ]]> 
		</description>
		<category>공부꺼리</category>
		<category>표준</category>
		<category>MobileOK</category>
		<category>KMWBP</category>
		<category>KDDC</category>

		<comments>http://virus56.egloos.com/4892721#comments</comments>
		<pubDate>Tue, 21 Apr 2009 03:45:02 GMT</pubDate>
		<dc:creator>비향</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 한국형 인터넷 웹 컨텐츠 접근성 지침 - 있으나 마나..ㅋㅋ ]]> </title>
		<link>http://virus56.egloos.com/4891179</link>
		<guid>http://virus56.egloos.com/4891179</guid>
		<description>
			<![CDATA[ 
  <span style="font-weight: bold;">한국형 인터넷 웹 컨텐츠 접근성 지침을 제정하는 가장 큰 목적은 웹 컨텐츠에 접근하려는 모든 <br />
사람들이 </span><span style="font-weight: bold;">어떤 컴퓨터나 운영체제, 또는 웹 브라우저를 사용하든지, 또는 어떠한 환경에 처해 있는지에 <br />
구애받지 </span><span style="font-weight: bold;">않고 접근할 수 있는 웹 컨텐츠를 제작할 수 있도록 도와주는 것이다.</span><br style="font-weight: bold;"><br />
 웹 문서를 설계함에 있어서 고려해야 하는 접근권의 유형은 다음과 같다.<br />
<blockquote>1) 시각을 통하여 정보를 인지할 수 없거나 인지 능력이 떨어지는 시각장애가 있는 경우<br />
2) 청각을 통하여 음향 정보를 인지하지 못하는 청각장애가 있는 경우<br />
3) 신경계의 마비, 근골격계의 마비 또는 선천성 기형 등으로 신체의 움직임에 <br />
&nbsp;&nbsp;&nbsp; 제한이 있는 지체장애가 있는 경우<br />
4) 읽기나 문장 이해력이 떨어지는 언어장애가 있는 경우<br />
5) 키보드나 마우스를 사용할 수 없는 장애가 있는 경우<br />
6) 문서에 적용된 어어에 따라 말하거나 이해하는데 어려움이 있는 장애가 있는 경우<br />
&nbsp;&nbsp;&nbsp; - 예를 들면 외국어로 작성된 컨텐츠를 이해하지 못하는 경우<br />
7) 시각, 청각 또는 손을 사용하고 있어서 필요로 하는 일을 할 수 없는 경우<br />
&nbsp;&nbsp;&nbsp; - 예를 들어 운정중이나 소음이 많은 곳에서 일하는 경우로 장애라기 보다는 처한 환경에 따라 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 제한 받는 경우<br />
8) 사용하고 있는 웹 브라우저의 종류나 버전이 다름으로 인하여 어려움이 발생하는 경우</blockquote><br /><br /><br />
<span style="font-weight: bold;">접근성이 준수된 웹 컨텐츠란 아래의 네가지 지침을 만족하는 경우에 가능하다. 아래의 네가지 <br />
지침중 </span><span style="font-weight: bold;">일부분 또는 전체 검사항목을 만족하지 못하는 경우에는 접근성이 없는 웹 컨텐츠라고 <br />
정의 한다.</span><br />
<blockquote>1) 인식의 용이성<br />
&nbsp;&nbsp;&nbsp; - 웹사이트에서 서비스하고 있는 모든 컨텐츠는 누구나 쉽게 인식할 수 있도록 설계되어야 한다.<br />
2) 운용의 용이성<br />
&nbsp;&nbsp;&nbsp; - 웹 컨텐츠에 포함된 모든 요소들의 기능은 누구나 쉽게 사용할 수 있어야 한다.<br />
3) 이해의 용이성<br />
&nbsp;&nbsp;&nbsp; - 사용자들이 가능한 한 쉽게 이해할 수 있도록 컨텐츠나 제어 방식을 구성해야 한다.<br />
4) 기술적 진보성<br />
&nbsp;&nbsp;&nbsp; - 구성한 컨텐츠는 웹 브라우저의 종류, 버전 등에 관계없이 사용될 수 있어야 한다.<br />
</blockquote><br />
<br />
<br />
<span style="font-weight: bold;">한국형 모바일 웹 모범사례 Ver. 1.5 (KMWBP 1.5)</span><br style="font-weight: bold;"><br style="font-weight: bold;"><span style="font-weight: bold;">KMWBP 1.5는 하드웨어구성의 기준을 마련하고 모바일 환경에 최적화된 웹 규격과 컨텐츠 <br />
개발 가이드의 </span><span style="font-weight: bold;">기준으로 사용 하는 목적으로 만들어 졌다.</span><br />
<br />
<br />
KMWBP 1.5는 다음과 같은 규격을 가진다.<br />
(W3C MWBP 에서 추가된 내용은 <font size="1">※ </font>표시)<br />
<br />
<ul><li> 다양한 장비에서 동일 URI에 접속했을 때 제공되는 정보와 기능은 일관성이 있어야 한다.</li><li> 사용자에게 향상된 기능을 제공하기 위해 장비 성능을 상세히 확인해야 한다.</li><li> 다양한 장비에서 오작동을 할 수 있는 요소를 미리 염두에 두고 설계해야 한다.</li><li> 실제 장비와 에뮬레이터 상에서 모두 테스트를 수행한다.</li><li> URI를 짧게 하여 입력을 쉽게 한다.</li><li><font size="1">※</font>URI 입력시, Cookie 정보를 이용한 자동 입력 기능을 제공한다.</li><li><font size="1">※</font>네비게이션 메뉴바는 페이지 안에서 일관되게 동작해야 한다.</li><li><font size="1">※</font>컨텐츠는 페이지 간 네비게이션 메뉴바 영역을 고려해서 설계한다.</li><li><font size="1">※</font>컨텐츠 네비게이션 제어 방법은 출력장치의 입력방식에 따라 확장될 수 있다.</li><li>페이지 상단에는 최소의 네비게이션 메뉴바를 제공한다.</li><li>사용자가 원하는 정보와 페이지에 제공되는 링크 수의 균형을 맞춰 원하는 정보를 쉽게 <br />
찾을 수 있도록 한다.</li><li>일관된 네비게이션 메커니증을 제공한다.</li><li><font size="1">※(확장)</font>하드웨어에서 정의한 키를 이용하여 Accesskey를 지정했을 때, 본 기능을 모두 <br />
사용할 수 있어야 한다.</li><li>네비게이션 메뉴와 자주 사용하는 기능에는 키보드 Accesskey를 지정해 사용한다.</li><li>각 링크의 타겟을 명확히 해야 한다.</li><li>이용되는 파일의 Format이 장비에서 지원되는지 주의한다.</li><li>이미지 맵은 장비에서 효과적으로 지원되지 않는 한 사용하지 않는다.</li><li><font size="1">※</font>브라우저가 팝업 및 새로운 창 열기를 지원할 경우, 컨텐츠를 이용하여 새로운 창을 <br />
출력할 수 있어야 한다.</li><li>팝업 창이나 새로운 창이 열리지 않도록 하고, 사용자에게 사전 정보 없이 현재 창을 바꾸지 않는다.</li><li>사용자에게 사전에 알리거나 중지방법을 제공하지 않는 한, 주기적인 페이지 Auto Refresh는 사용하지 않는다.</li><li>Markup Language를 이용해 페이지를 작성할 때 자동 경로 변경을 사용하지 않고, 서버 설정을 통한<br />
HTTP 3xx Code 경로 변경을 사용한다.</li><li><font size="1">※</font>AJAX를 이용하여 페이지를 갱신할 수 있어야 한다.</li><li>외부자원의 링크 활용을 최소화 한다.</li><li>모바일 환경 사용에 적절한 콘텐트를 보장한다.</li><li>명확하고 간단한 언어를 사용한다.</li><li>사용자가 요청한 범위로 콘텐트를 제한한다.</li><li><font size="1">※</font>LCD 크기 제한으로 콘텐트를 모두 출력할 수 없을 때 브라우저가 OSR 기능을 지원한다면, 본 기능을 이용해 <br />
화면에 최적화한 콘텐트를 출력해야 한다.</li><li><font size="1">※</font>사용 가능한 메모리가 부족하거나 출력 가능한 크기를 초과하는 페이지에 대하여, 사용자가 인지할 수 있는 <br />
정보를 제공해야 한다.</li><li>제한된 사이즈 비율로 페이지를 분할하도록 한다.</li><li>장비의 메모리 한계를 고려한 페이지를 설계한다.</li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">추가적인 스크롤링을 사용해야 하는 경우가 아니라면, 한 방향으로 스크롤을 하도록 제한한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">페이지의 내용을 간단 명료하게 하여 다음 페이지의 내용까지 파악할 수 있도록 한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">여백공간에 그래픽을 사용하지 않는다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">장비에서 제공할 수 없는 이미지는 사용하지 않는다. 정보제공을 위해 꼭 필요한 것이 아니면 고사양의 고해상도 <br />
이미지의 사용은 피한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">색상을 통해 얻을 수 있는 정보도 색상을 사용하지 않고 이용할 수 있게 한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">전경과 배경의 색 조합은 적절한 명암 대비를 유지해야 한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">배경에 이미지를 사용할 경우, 콘텐트 내용을 볼 수 있어야 한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">간단 명료한 페이지 제목을 제공한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">프레임을 사용하지 않는다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">논리적인 구조를 가지는 Markup Language를 사용한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;" lang="EN-US"> 테이블 내에 또 다른 테이블을 포함하지 않는다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">장비에서 테이블을 지원하지 않는 경우 사용하지 않는다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;" lang="EN-US"> 테이블을 이용하여 레이아웃을 구성하지 않는다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">가능하다면 테이블로 표시하지 말고 다른 대안을 이용한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">텍스트가 아닌 요소 (이미지, 애니메이션, 동영상 등) 에 대해서는 그에 상응하는 텍스트를 제공한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">페이지를 OBJECTS 나 SCRIPT 에 의존해 작성하지 않는다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><font size="1">※</font><span style="font-family: 굴림;" lang="EN-US">KMWBP 1.5 규격에는 표준 Markup Language인 DDC 1.5에서 정의하는 Script를 포함한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><font size="1">※</font><span style="font-family: 굴림;" lang="EN-US">LCD 크기 제한으로 이미지를 모두 출력할 수 없는 경우, 이미지 Size를 조절해 LCD 화면에 최적화한 <br />
이미지를 출력해야 한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">고유 크기가 있는 이미지는 페이지 안에 이미지 크기를 명시해서 사용한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">서버에서 본래 이미지 사이즈를 페이지에 알맞게 조절해 사용할 수 있게 한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><font size="1">※</font><span style="font-family: 굴림;" lang="EN-US"></span><span style="font-family: 굴림;">사용 가능한 메모리가 부족하거나 출력 가능한 크기를 초과하는 이미지에 대하여, 사용자가 인지할 수 있는 <br />
정보를 제공해야 한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><font size="1">※</font><span style="font-family: 굴림;">이미지의 길이 단위 사용에 제약을 두지 않는다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">표준 문법에 유효한 문서를 작성한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">언어 속성 값과 스타일 시트 속성 값에는 픽셀 측정과 절대 단위를 사용하지 않는다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><font size="1">※</font><span style="font-family: 굴림;"></span><span style="font-family: 굴림;" lang="EN-US">px 단위 이외에 HTML 4.01에서 정의한 길이 단위 (pt, in, cm, mm, em, ex, %)사용에 대한 제한을 두지 않는다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><font size="1">※</font><span style="font-family: 굴림;"></span><span style="font-family: 굴림;">페이지 내에서 사용되는 단위는 통일성 있게 사용한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">장비가 지원하지 않는 경우를 제외하고, 레이아웃과 형식의 설계는 스타일 시트를 사용한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">필요한 경우 스타일 시트 없이도 문서를 읽을 수 있도록 구성한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">스타일 시트의 크기를 최소화한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">간결하고 효율적인 Markup Language를 사용한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><font size="1">※</font><span style="font-family: 굴림;">컨텐츠 개발 시, 컨텐츠 내부에 Content-Type을 명시해야 한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">장비가 지원하는 컨텐츠를 전송한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">가능하면 모바일 환경에 적합한 포맷으로 컨텐츠를 전송한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><font size="1">※</font><span style="font-family: 굴림;"></span><span style="font-family: 굴림;" lang="EN-US"></span><span style="font-family: 굴림;">인코딩 타입을 사용할 때 페이지에 사용할 인코딩 타입을 사전에 정의한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">지원하는 캐릭터 인코딩을 사용한 컨텐츠를 제공해야 한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">사용되는 캐릭터 인코딩을 확인한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">발생한 오류 정보를 알 수 있는 메시지를 제공하고, 그러한 오류를 피해 브라우징을 계속할 수 있도록 한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><font size="1">※</font><span style="font-family: 굴림;">메모리에 저장되어 있는 COOKIES 정보를 이용해 페이지 이동 및 출력에 사용할 수 있다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">이용 가능한 쿠키에 의존해서는 안 된다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;" lang="EN-US">HTTP 응답에는 캐쉬 정보를 제공한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><font size="1">※</font><span style="font-family: 굴림;"></span><span style="font-family: 굴림;">출력 장치에 따라 지원하는 폰트의 차이가 존재하므로 페이지 내에 사용할 폰트를 정확히 명시해 사용한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><font size="1">※</font><span style="font-family: 굴림;"></span><span style="font-family: 굴림;">출력 장치에 따라 지원하는 폰트를 콘텐트에 사용한 경우 출력 장치의 기본 글꼴로 텍스트를 출력한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><font size="1">※</font><span style="font-family: 굴림;"></span><span style="font-family: 굴림;">출력 장치에 따라 폰트에 적용되는 효과에 차이가 존재하므로 장치에서 지원하지 않는 속성의 사용은 <br />
권고하지 않는다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">글꼴 관련 스타일링에 의존하지 않는다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">키 입력 횟수를 최소화한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">텍스트 입력 횟수를 최소화한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">가능하면 미리 선택된 기본값을 제공한다</span><span style="" lang="EN-US">.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">장비가 지원하는 기본 텍스트 입력 모드, 언어, 포맷을 설정한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">링크, 폼 컨트롤과 객체를 이용한 논리적 탭 순서를 생성한다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">모든 폼 컨트롤에 적절한 라벨을 붙이고, 명시적으로 라벨과 폼 컨트롤을 연계시킨다.</span></p></li><li><p class="바탕글" style="line-height: 130%; text-align: left;"><span style="font-family: 굴림;">라벨과 연관된 폼 컨트롤이 서로 적절한 위치에 있도록 한다.</span></p></li></ul><blockquote><br />
</blockquote><br />
<br/><br/>tag : <a href="/tag/웹접근성" rel="tag">웹접근성</a>,&nbsp;<a href="/tag/지침" rel="tag">지침</a>,&nbsp;<a href="/tag/인터넷" rel="tag">인터넷</a>			 ]]> 
		</description>
		<category>공부꺼리</category>
		<category>웹접근성</category>
		<category>지침</category>
		<category>인터넷</category>

		<comments>http://virus56.egloos.com/4891179#comments</comments>
		<pubDate>Mon, 20 Apr 2009 09:33:30 GMT</pubDate>
		<dc:creator>비향</dc:creator>
	</item>
	<item>
		<title><![CDATA[ RSS 간단하게 파싱하기 ]]> </title>
		<link>http://virus56.egloos.com/4884022</link>
		<guid>http://virus56.egloos.com/4884022</guid>
		<description>
			<![CDATA[ 
  <p>rss 내용을 파싱하는 간단한 함수입니다. <br />
(rss 파일은 fopen이나 fsocket 등등 알아서 읽어오셔야합니다;;) <br />
HTML 파싱용으로도 사용가능합니다 덜덜;; <br />
<br />
function _parser($tag, $str){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;preg_match_all("/&lt;".$tag."&gt;(.*)&lt;\/".$tag."&gt;/iUs", $str, $match); <br />
&nbsp;&nbsp;&nbsp;&nbsp;for($i=0, $total=sizeof($match[1]); $i&lt;$total; $i++){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$match[1][$i]=str_replace("&lt;![CDATA[", "", $match[1][$i]); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$match[1][$i]=str_replace("]]&gt;", "", $match[1][$i]); <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;return $match[1]; <br />
} <br />
<br />
원리는 간단합니다. <br />
&lt;a&gt; <br />
&nbsp; &lt;b&gt;하하하&lt;/b&gt; <br />
&nbsp; &lt;b&gt; <br />
&nbsp; &nbsp; &lt;c&gt;aaa하하하&lt;/c&gt; <br />
&nbsp; &nbsp; &lt;c&gt;222&lt;/c&gt; <br />
&nbsp; &lt;/b&gt; <br />
&lt;/a&gt; <br />
<br />
이런구조를 파싱하시려고 할때 $tmp 변수에 위 내용이 있다고 가정할때 <br />
<br />
* a 태그를 가져올때 <br />
$a = _parser("a", $tmp); <br />
<br />
$a[0]의 값 <br />
&lt;b&gt;하하하&lt;/b&gt; <br />
&nbsp; &lt;b&gt; <br />
&nbsp; &nbsp; &lt;c&gt;aaa하하하&lt;/c&gt; <br />
&nbsp; &nbsp; &lt;c&gt;222&lt;/c&gt; <br />
&nbsp; &lt;/b&gt; <br />
<br />
<br />
* b 태그를 가져올때 <br />
$b = _parser("b", $a[0]); <br />
<br />
$b[0]의 값 <br />
하하하 <br />
<br />
$b[1]의 값 <br />
&lt;c&gt;aaa하하하&lt;/c&gt; <br />
&lt;c&gt;222&lt;/c&gt; <br />
<br />
<br />
* c 태그를 가져올때 <br />
$c = _parser("c", $b[1]); // 두번째 b 태그에만 c태그가 들어있으므로 <br />
<br />
$c[0]의 값 <br />
aaa하하하 <br />
<br />
$c[1]의 값 <br />
222 <br />
<br />
---------------------------------------------------------------------------------------------- <br />
<br />
<br />
*&nbsp; UTF-8로 인코딩 처리하기 <br />
&nbsp;$data 변수에 rss 내용이 있을경우 <br />
&nbsp;&nbsp;&nbsp;&nbsp;if(preg_match("/encoding=\"(.*)\"/Us", $data, $match)){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(strtolower($match[1]) != "utf-8"){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$data=iconv($match[1], "UTF-8", $data); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
<br />
------------------------------------------------------------------------------------------------- <br />
<br />
* 위 정보를 토대로 RSS 파싱하기 <br />
$data 변수에 rss 정보가 들어있다고 가정합니다. <br />
&nbsp; &nbsp; &nbsp; &nbsp; list($channel) = _parser("channel", $data); <br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; // RSS 제공하는 제목입니다. <br />
&nbsp;&nbsp;&nbsp;&nbsp;list($channel_title) = _parser("title", $channel); <br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; // RSS url 입니다. <br />
&nbsp;&nbsp;&nbsp;&nbsp;list($channel_link) = _parser("link", $channel); <br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; // RSS 설명입니다. <br />
&nbsp;&nbsp;&nbsp;&nbsp;list($channel_description) = _parser("description", $channel); <br />
<br />
&nbsp; &nbsp; &nbsp; echo '&lt;h2&gt;&lt;a href="'.$channel_link.'" target="_blank"&gt;'.$channel_title.'&lt;/a&gt; : '.$channel_description.'&lt;/h2&gt;'.$list.'&lt;/ul&gt;'; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$channel_item = _parser("item", $channel);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;for($i=0, $total=sizeof($channel_item);$i&lt;$total; $i++){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$item = $channel_item[$i]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list($title) = _parser("title", $item); // RSS기사 제목 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list($link) = _parser("link", $item); // RSS기사 url <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list($pubDate) = _parser("pubDate", $item); // RSS기사 날짜 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$pubDate= date("m/d", strtotime($pubDate)); <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo '&lt;li&gt;'.$date.' &lt;a href="'.$link.'"&gt;'.$title.'&lt;/a&gt;&lt;/li&gt;'; <br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p><p>&nbsp;</p><p>출처 : <a class="con_link" href="http://tong.nate.com/singiruda/48479415" target="_blank">http://tong.nate.com/singiruda/48479415</a></p><p><br />
</p><br/><br/>tag : <a href="/tag/rss" rel="tag">rss</a>,&nbsp;<a href="/tag/웹" rel="tag">웹</a>			 ]]> 
		</description>
		<category>web dev</category>
		<category>rss</category>
		<category>웹</category>

		<comments>http://virus56.egloos.com/4884022#comments</comments>
		<pubDate>Fri, 17 Apr 2009 06:14:10 GMT</pubDate>
		<dc:creator>비향</dc:creator>
	</item>
	<item>
		<title><![CDATA[ RSS 2.0과 MSXML 이용한 RSS 리더 구현 ]]> </title>
		<link>http://virus56.egloos.com/4883957</link>
		<guid>http://virus56.egloos.com/4883957</guid>
		<description>
			<![CDATA[ 
  <p class="contentsbox">지난해부터 국내에서 큰 인기를 얻고 있는 RSS는 웹2.0의 핵심 기술 가운데 하나.특히 정보 생산자와 소비자 사이에 커뮤니케이션이 원활하게 이뤄질 때 RSS는 더 큰 의미를 가지게 된다. 일단 커뮤니케이션이활발해지면 그 위에서 RSS 기반의 다양한 서비스들이 확장될 수 있기 때문이다. 여기서는 RSS 포맷에 대해 충분히 이해하고,애플리케이션 기반의 간단한 RSS 브라우저를 만들어보자. </p><p>&nbsp;</p><p>매일 아침 우리는 포털 사이트나 신문 홈페이지 등에서 최신 뉴스를 검색하고, MSDN이나 코드 프로젝트(CodeProject)에 새로운 글들이 올라와 있는지를 훑어본다. 또한 자신의 블로그와 지인들의 블로그 등에 들러 흥미로운 콘텐츠 등을읽게 된다. 이렇게 들려야 할 웹 사이트가 많아질수록 이리 저리 이동하는 것이 불편하고 찾아다니기가 귀찮아지는 게 사실이다. <br />
그런데 이런 일련의 행위는 최신의 글을 읽는다는 점에서 모두 비슷하다. 물론 그 내용이나 구성들도 대부분 크게 다르지 않다.개발자는 물론이고, 심지어 일반인들도 이런 경우 여러 웹 사이트에 올라온 최신 글을 자신에게 자동으로 배송해 주는 툴이 있으면좋겠다고 생각해 봤을지 모른다. 마치 아웃룩을 써서 배달된 메일을 읽는 것처럼, 특정 웹 사이트의 최신 글(뉴스, 블로그 콘텐츠등)을 취합해 오프라인에서 아무 때나 그 글을 읽을 수 있게 해주는 프로그램을 꿈꾸게 되는 것이다.<br />
다행스럽게도 이런 글과그림으로 구성된 대부분의 콘텐츠들은 그 양식상의 공통점으로 인해 RSS라는 특정한 규칙(규약)이 적용될 수 있다. 따라서 여러포털과 그들이 보유한 전용 웹 사이트에서는 RSS를 적용한 게시물들이 서비스 되고 있고, 그 수가 빠른 속도로 증가하는 추세다.따라서 이 RSS를 충분히 이해하고 활용할 수 있으면 위와 같은 요구사항을 충족시켜 줄 툴을 개발할 수 있다. 필자도 자주이슈로 떠오른 RSS에 대한 규약과 그 활용 방법에 대해 살펴보고, 간단한 RSS 뷰어(Viewer)를 만들어 봄으로써이용자들의 다양한 요구사항을 충족시켜 줄 기초를 다지게 됐다. 독자들도 이 글을 통해 RSS를 보다 쉽게 이해하고 활용할 수있는 계기가 되었으면 한다.</p><p>&nbsp;</p><p class="sub1">RSS의 개념과 쓰임새</p><p>RSS는 Rich Site Summary(혹은 RDF Site Summary, Really SimpleSyndication)의 줄임 말로 뉴스나 블로그 등과 같이 콘텐츠가 자주 업데이트되는 사이트들이 업데이트된 정보를 쉽게사용자들에게 제공하기 위해 만들어진 포맷이다. XML(Extensible Markup Language) 기반으로 되어 있고제목, 내용, 날짜 등 배포에 필요한 최소한의 정보만으로 쉽게 작성할 수 있도록 구성되어 있다. 현재는 0.9, 1.0, 2.0등 다양한 버전으로 서비스되고 있다. 이 RSS는 XML의 가장 성공적인 사례가 되어 수 만개의 웹 사이트에서 RSS를 이용할수 있게 됐고, 그 수는 앞으로도 크게 늘어날 전망이다. 한편 새로운 RSS 표준으로 ATOM이 부상하고 있다. 이는 RSS의단점인 버전 관리와 사용자의 임의 확장 제약 등을 보완한 새로운 표준인데 아직까지는 많이 활용되지 않으므로 여기서는 다루지않는다.<br />
한번쯤은 뉴스 사이트나 블로그 등에서 ‘RSS Feed’와 같은 아이콘을 본 기억이 있을 것이다. 이것은 곧 RSS 표준으로 서비스를 제공하고 있다는 의미다. 현재 RSS가 서비스에 많이 이용되는 곳은 다음과 같다.</p><p>&nbsp;</p><p class="sourcebox">- 뉴스 및 공지사항(매 시간 새로운 정보가 추가, 변경되는 뉴스와 신규 소식 서비스) <br />
- 강좌(고객이 매번 사이트를 방문하여 규칙적으로 확인하지 않는 콘텐츠 서비스) <br />
- 일정(주요 행사, 마감 일자, 휴일 정보) <br />
- 검색 결과(관심 키워드에 대한 변경 및 신규 정보 조회 서비스) <br />
- 메일링 리스트(주기적인 이메일로 서비스 한 내용 모음) <br />
- 포드캐스팅을 통한 멀티미디어 파일 배포<br />
- 입찰 정보, 채용 정보 등의 서비스<br />
</p><p>&nbsp;</p><p>이외에도 RSS는 유연하고 간단한 포맷덕분에 다양한 형식의 콘텐츠를 배포하거나 활용하는 데 널리 쓰이고 있다. </p><p>&nbsp;</p><p class="sub1">RSS 활용의 실제</p><p>그럼 RSS의 장점을 십분 활용한 프로그램들에는 어떤 것들이 있을까? 여기서 대표적인 몇 가지를 소개한다. 물론, 이곳에소개된 것 외에 많은 형태의 제품들이 상용 혹은 배포용으로 개발되어 인터넷상에서 이용되고 있다. 이런 프로그램들을 제대로사용하면 독자들은 뉴스나 강좌, 그리고 블로깅 등을 이용하기 위해 인터넷을 헤매야 하는 불편을 크게 줄일 수 있다. </p><p>&nbsp;</p><p class="sub1">RSS 리더 </p><p>RSS 프로그램들은 주로 뉴스 리더로 사용되고 있는데, RSS 문서(Document)를 읽을 수 있도록 뷰어, 아이템리스트(Item List) 등으로 구성되어 있다. 손쉽게 콘텐츠를 분류해 요약된 글을 읽고, 흥미 있는 내용이면 원문으로 이동해읽을 수 있는 기능을 제공한다. 또한 기존 항목에 대한 검색 기능을 추가한 제품도 있다. 국내의‘연모’(http://yeonmo.theple.com)와 ‘Xpyder’(http://www.xpyder.co.kr)가대표적이다. </p><p>&nbsp;</p><p class="sub1">RSS 검색 엔진</p><p>인터넷 상에서 정리된 자료와 뉴스, 블로그 등을 모두 검색하는 엔진으로 웹 블로그 검색 엔진이 가장 대표적인 형태다. ‘FeedStar’(http://www.feedster.com)가 그 좋은 예다.</p><p>&nbsp;</p><p class="sub1">RSS 포맷의 역사</p><p>RSS 0.9는 넷스케이프(Netscape)사의 포털 서비스를 위한 목적으로 처음 개발됐다. 그 후 웹 블로그와 기타 다른제품 등에 쓰기 위해 UserLand Software에서 더 간단한 형태의 RSS 0.91을 발표한다. 비슷한 시기에RSS-DEV Working Group은 RDF(Resource Description Framework)를 기반으로 한 RSS1.0을 제작했는데, 1.0 역시 RSS 0.9를 기본으로 삼았다. 그 후에 UserLand는 0.92, 0.93, 0.94에이어 2.0을 발표했다. 실제 많이 쓰이는 버전은 심플함을 지향하는 RSS 0.9x(2.0) 버전과 확장성이 강한 RSS1.0이다. 이들은 모두 동일한 기반 구조를 지녔고 XML을 바탕으로 한다.<br />
그럼 지금부터 RSS의 버전별 특징을 간단히 살펴보자. 현재 가장 많이 사용되고 있는 2.0과 1.0 버전에 대한 특징을 실제 XML 소스를 통해 설명한다.</p><p>&nbsp;</p><p class="sub1">RSS 포맷 2.0</p><p>현재 가장 많이 사용되고 있다. 2.0을 만든 데이브 와이너(Dave Winer)가 하버드로 옮김에 따라 이 포맷의 소유권역시 현재 하버드가 가지고 있다. 현재 http://blogs.law.harvard. edu/tech/rss에서 공식 배포되고있다. <br />
RSS 0.92까지는 아이템의 수가 제한되어 있었으나, RSS 2.0에 오면서 숫자 제한이 없어졌다. 아이템에 해당하는 모든 엘리먼트는 선택 사항이다(&lt;표 3&gt; 참조).</p><p>&nbsp;</p><p class="sourcebox">&lt;리스트 1&gt; RSS 2.0의 샘플<br />
<br />
&lt; ?xml version="1.0" encoding="euc-kr" ?&gt;<br />
&lt; rss version="2.0"&gt;<br />
&lt; channel&gt;<br />
&lt; title&gt;아이헬퍼스&lt; /title &gt;<br />
&lt; link&gt;http://www.ihelpers.co.kr&lt; /link &gt; <br />
&lt; description&gt;아이헬퍼스&lt; /description &gt; <br />
&lt; language&gt; ko&lt; /language&gt;<br />
&lt; lastBuildDate&gt;Nov, 15 2004 08:13:29 GMT&lt; /lastBuildDate&gt;<br />
&lt; webMaster&gt;smson@ihelpers.co.kr&lt; /webMaster&gt;<br />
&lt; item&gt;<br />
&lt; title&gt;RSS에 대하여&lt; /title&gt;<br />
&lt; link&gt;http://www.ihelpers.co.kr/programming/lec.php?CMD=view&amp;TYPE=1&amp;IDX=245&lt; /link&gt;<br />
&lt; author&gt;홍상영&lt; /author&gt;<br />
&lt; pubDate&gt;Nov, 15 2004 08:13:29 GMT&lt; /pubDate&gt;<br />
&lt; category&gt;강좌&lt; /category&gt;<br />
&lt; /item&gt;<br />
&lt; item&gt;<br />
&lt; title&gt;게시판의 조회수를 정확하게 측정하자&lt; /title&gt;<br />
&lt; link&gt;http://www.ihelpers.co.kr/programming/tipntech.php?CMD=view&amp;TYPE=0&amp;IDX=458&lt; /link&gt;<br />
&lt; author&gt;홍상영&lt; &lt; /author&gt;<br />
&lt; pubDate&gt;Nov, 13 2004 01:33:48 GMT&lt; /pubDate&gt;<br />
&lt; category&gt;Tip&amp;Tech&lt; /category&gt;<br />
&lt; /item&gt;<br />
&lt; item&gt;<br />
&lt; title&gt;글자와 이미지에 Blink 효과주기&lt; /title&gt;<br />
&lt; link&gt;http://www.ihelpers.co.kr/programming/tipntech.php?CMD=view&amp;TYPE=0&amp;IDX=457&lt; /link&gt;<br />
&lt; author&gt;홍상영&lt; /author&gt;<br />
&lt; pubDate&gt;Nov, 12 2004 19:36:07 GMT&lt; /pubDate&gt;<br />
&lt; category&gt;Tip&amp;Tech&lt; /category&gt;<br />
&lt; /item&gt;<br />
&lt; /channel&gt;<br />
&lt; /rss&gt; </p><p>&nbsp;</p><p><table class="data-table-2" summary="Table 2. Object relational mapping, part 2" bgcolor="#cccccc" border="0" cellpadding="5" cellspacing="1" width="589"><tbody><tr bgcolor="#ffffff"><td class="tb-row" wbgcolor="#ffffff" width="91"><b>Element </b></td><td width="285"><b>Description </b></td><td width="179"><b>Example </b></td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="91"><b>title </b></td><td height="20" width="285">채널 명(사이트 명 또는 사이트 메뉴 명)</td><td height="20" width="179">아이헬퍼스 - 새 소식</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="91"><b>link</b></td><td height="20" width="285">웹사이트(채널) URL 정보</td><td height="20" width="179">http://www.ihelpers. co.kr</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="91"><b>description</b></td><td height="20" width="285">채널 설명(HTML은 쓰지않는 것이 좋다)</td><td height="20" width="179">아이헬퍼스의 최신 소식</td></tr></tbody></table><br />
&lt;표 1&gt; 필수적인 채널 엘리먼트 <br />
<br />
<table class="data-table-2" summary="Table 2. Object relational mapping, part 2" bgcolor="#cccccc" border="0" cellpadding="5" cellspacing="1" width="589"><tbody><tr bgcolor="#ffffff"><td class="tb-row" wbgcolor="#ffffff" width="94"><b>Element </b></td><td width="222"><b>Description </b></td><td width="245"><b>Example </b></td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="94"><b>language </b></td><td height="20" width="222">채널에 사용한 언어 - 사용 가능 언어</td><td height="20" width="245">ko</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="94"><b>copyright</b></td><td height="20" width="222">채널 정보에 대한 권한</td><td height="20" width="245">Copyright ⓒ 2000-2004 <br />
iHelpers.</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="94"><b>manageing <br />
Editor </b></td><td height="20" width="222">채널 수정 담당자 이메일 주소</td><td height="20" width="245">smson@ihelpers.co.kr <br />
(홍길동)</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="94"><b>webMaster</b></td><td height="20" width="222">채널 관련 문의 담당자 이메일 주소</td><td height="20" width="245">webmaster@ihelpers.co.kr <br />
(홍길동)</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="94"><b>pubDate</b></td><td height="20" width="222">발행 일자 (RFC 822 형식)</td><td height="20" width="245">Nov, 15 2004 08:13:29 GMT</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="94"><b>lastBuild</b></td><td height="20" width="222">최종 변경 시간</td><td height="20" width="245">Nov, 15 2004 08:13:29 GMT </td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="94"><b>category</b></td><td height="20" width="222">채널이 속해 있는 카테고리 정보<br />
(한 개 이상 가능)</td><td height="20" width="245">공지사항</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="94"><b>generator</b></td><td height="20" width="222">채널 생성 프로그램</td><td height="20" width="245">EditPlus</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="94"><b>docs</b></td><td height="20" width="222">RSS 형식에 대한 문서 URL</td><td height="20" width="245">http://blogs.law.harvard.edu /tech/rss</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="94"><b>cloud</b></td><td height="20" width="222">&lt; cloud domain=”” port=”” <br />
path=”” registerProcedure=””<br />
protocol=”” /&gt;</td><td height="20" width="245">&lt; cloud domain=”rpc.sys.com” <br />
port=”80” path=”/RPC2” <br />
registerProcedure=”</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="94"><b>docs</b></td><td height="20" width="222">RSS 형식에 대한 문서 URL</td><td height="20" width="245">http://blogs.law.harvard.edu /tech/rss</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="94"><br />
</td><td height="20" width="222"><br />
</td><td height="20" width="245">myCloud.rssPleaseNotify” <br />
protocol=”xml-rpc” /&gt;</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="94"><b>ttl </b></td><td height="20" width="222">채널 정보 갱신 주기(단위: 분)</td><td height="20" width="245">&lt;ttl&gt;60&lt; /ttl&gt;</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="94">image</td><td height="20" width="222">이미지 정보</td><td height="20" width="245">(GIF, JPEG 또는 PNG) </td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="94"><b>url </b></td><td height="20" width="222">이미지 URL 정보</td><td height="20" width="245"><br />
</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="94">title</td><td height="20" width="222">이미지 설명, HTML의 IMG <br />
태그의 ALT 구문과 동일 </td><td height="20" width="245"><br />
</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="94">width<br />
height </td><td height="20" width="222">넓이, 높이(단위: pixel)</td><td height="20" width="245">width, height (최대, 기본) - 144/88,400/31</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="94">rating </td><td height="20" width="222">PICS Rating</td><td height="20" width="245"><br />
</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="94">textInput </td><td height="20" width="222">CGI Script와 연계할 수 있는 <br />
Text Input 박스와 Submit <br />
Button 기능 </td><td height="20" width="245"><br />
</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="94">title </td><td height="20" width="222">Submit Button의 Label </td><td height="20" width="245"><br />
</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="94">description </td><td height="20" width="222">Input 박스설명 </td><td height="20" width="245"><br />
</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="94">name</td><td height="20" width="222">Input 박스의 name</td><td height="20" width="245"><br />
</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="94">link </td><td height="20" width="222">CGI Script URL </td><td height="20" width="245"><br />
</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="94">skipHours</td><td height="20" width="222">skipHoursReader(Aggregator)가 채널<br />
정보를 읽지 않길 원하는 시간</td><td height="20" width="245">0 ~ 23</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="94">skipDays</td><td height="20" width="222">Reader(Aggregator)가 채널 정보를 읽지 않길 원하는 날짜 </td><td height="20" width="245">Monday,Tuesday,Wednes,Day...</td></tr></tbody></table>&lt;표 2&gt; 선택적인 채널 엘리먼트 <br />
<br />
<table class="data-table-2" summary="Table 2. Object relational mapping, part 2" bgcolor="#cccccc" border="0" cellpadding="5" cellspacing="1" width="589"><tbody><tr bgcolor="#ffffff"><td class="tb-row" wbgcolor="#ffffff" width="97"><b>Element </b></td><td width="165"><b>Description </b></td><td width="293"><b>Example </b></td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="97"><b>title </b></td><td height="20" width="165">아이템 제목</td><td height="20" width="293">스파이더(Spider) 쫓아 버리기</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="97"><b>link</b></td><td height="20" width="165">아이템 URL</td><td height="20" width="293">정보 http://www.ihelpers.co.kr/ <br />
programming/tipntech.php?<br />
CMD=view&amp;TYPE=0&amp;IDX=452 <br />
iHelpers.</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="97"><b>description <br />
Editor </b></td><td height="20" width="165">아이템에 대한 간략한 설명</td><td height="20" width="293">robots.txt을 이용하여 (entity-encoded HTML) 스파이더 사용 제한하기 </td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="97"><b>author</b></td><td height="20" width="165">작성자 이메일 주소</td><td height="20" width="293">smson@ihelpers.co.kr<br />
(홍길동)</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="97"><b>category </b></td><td height="20" width="165">아이템 해당 카테고리(메뉴)</td><td height="20" width="293">강좌</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="97"><b>comments</b></td><td height="20" width="165">아이템과 관련 있는 URL 정보</td><td height="20" width="293"><br />
</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="97"><b>enclosure</b></td><td height="20" width="165">아이템에 추가할 media 정보</td><td height="20" width="293">&lt; enclosure url=”http://www. scripting.com/mp3s/weather ReportSuite.mp3” length=” 12216320” type=”audio/mpeg” /&gt;</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="97"><b>guid</b></td><td height="20" width="165">유일한 식별문자</td><td height="20" width="293">http://www.ihelpers.co.kr/ programming/tipntech.php? CMD=view&amp;TYPE=0&amp;IDX=452</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="97"><b>pubDate</b></td><td height="20" width="165">발행일자</td><td height="20" width="293">Nov, 05 2004 22:53:27 GMT</td></tr><tr bgcolor="#ffffff"><td class="tb-row" bgcolor="#ffffff" height="20" width="97"><b>source</b></td><td height="20" width="165">출처 </td><td height="20" width="293">http://www.robotstxt.org/wc/robots.html</td></tr></tbody></table>&lt;표 3&gt; 아이템 엘리먼트 <br />
<br />
</p><p>&nbsp;</p><p class="sub1">RSS 포맷 1.0</p><p>RSS 1.0에서 RSS는 ‘RDF Site Summary’를 의미한다. RSS 1.0은 RDF를 사용하고XML-Namespaces(RSS Modules)를 이용해 큰 마찰 없이 확장되도록 해준다. 모듈로써는 Dublin CoreModule이 가장 잘 알려져 있다. RSS 1.0은 &lt;리스트 2&gt;의 샘플에서 보는 것처럼 RSS 0.9x(2.0)와 비슷하나 다음의 네 가지 부분에서 차이를 나타낸다. <br />
<br />
</p><div id="post-view" class="post-view pcol2"><li>&lt; rdf:RDF&gt;...&lt; rdf:RDF&gt; 엘리먼트를 사용한다. <br />
</li><li>RSS 1.0은 ‘http://purl.org/rss/1.0’ (Default Namespace), ‘http://purl.org/dc/elements/1.1/’(Dublin Core)과 같이 Namespace를 사용한다. <br />
</li><li>아이템 엘리먼트가 채널 엘리먼트 밖에서 사용된다(RSS 0.9x의 경우는 채널 엘리먼트 내부에 있다). <br />
<p>&nbsp;</p><p class="sourcebox"><b>RDF란?</b><br />
<br />
XML은 비록 HTML보다 확장성이 뛰어나고유연하지만, 시맨틱 웹의 표준 언어로 사용하기에는 한계가 있다. XML로 정의한 태그(Tag)는 사람들이 이해하는 데는유리하지만, 기계가 자동적으로 그 의미를 해석하기는 어렵기 때문이다. 특히 태그 사이의 의미 연관성을 추론하기가 쉽지 않다.임의로 만든 태그 사용법은 알 수 있어도 어떤 의미를 담고 있는 태그인지 파악하기가 어려운 게 XML의 단점이다. <br />
RDF(ResourceDescription Framework)는 이런 단점을 극복하기 위해 제시된 기술로, 특정 자원에 대해 숨은 자료를 설명하는XML 기반의 프레임워크이다. RDF는 자원, 속성, 속성 값을 묶어 하나의 단위로 취급하는데, 정보를 구성하는 자원과 관련해보다 세밀하게 설명하고 관계 파악을 용이하게 해 준다. 다시 말해, RDF를 이용하면 문서 내 각 요소의 의미와 문서 사이의관련성을 표시하기가 쉬워지고, 기계간의 자동화 처리가 한결 수월해질 수 있다. </p><p>&nbsp;</p><p class="sourcebox">&lt;리스트 2&gt; RSS 1.0의 샘플<br />
<br />
&lt;rdf:RDF<br />
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"<br />
xmlns="http://purl.org/rss/1.0/"<br />
xmlns:dc="http://purl.org/dc/elements/1.1/"&gt;<br />
&lt;channel rdf:about="http://www.xml.com/cs/xml/query/q/ 19"&gt;<br />
&lt;title&gt;XML.com&lt;/title&gt;<br />
&lt;link&gt;http://www.xml.com/&lt;/link&gt;<br />
&lt;description&gt;<br />
XML.com features a rich mix of information and services for the XML community.<br />
&lt;/description&gt;<br />
&lt;language&gt;en-us&lt;/language&gt;<br />
&lt;items&gt;<br />
&lt;rdf:Seq&gt;<br />
&lt;rdf:li rdf:resource="http://www.xml.com/pub/a/ 2002/12/04/normalizing.html"/&gt;<br />
&lt;rdf:li rdf:resource="http://www.xml.com/pub/a/ 2002/12/04/som.html"/&gt;<br />
&lt;rdf:li rdf:resource="http://www.xml.com/pub/a/ 2002/12/04/svg.html"/&gt;<br />
&lt;/rdf:Seq&gt;<br />
&lt;/items&gt;<br />
&lt;/channel&gt;<br />
&lt;item rdf:about="http://www.xml.com/pub/a/2002/12/04/ normalizing.html"&gt;<br />
&lt;title&gt;Normalizing XML, Part 2&lt;/title&gt;<br />
&lt;link&gt;http://www.xml.com/pub/a/2002/12/04/normalizing.html&lt;/link&gt;<br />
&lt;description&gt;<br />
In this second and final look at applying relational normalization techniques <br />
to W3C XML Schema data modeling,Will Provost discusses when not to normalize, <br />
the scope of uniqueness and the fourth and fifth normal forms.<br />
&lt;/description&gt;<br />
&lt;dc:creator&gt;Will Provost&lt;/dc:creator&gt;<br />
&lt;dc:date&gt;2002-12-04&lt;/dc:date&gt; <br />
&lt;/item&gt;<br />
&lt;/rdf:RDF&gt;&lt;rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns="http://purl.org/rss/1.0/"xmlns:dc="http://purl.org/dc/elements/1.1/"&gt; &lt;itemrdf:about="http://www.xml.com/pub/a/2002/12/04/ normalizing.html"&gt;&lt;/item&gt; &lt;/rdf:RDF&gt;</p><p>&nbsp;</p><p class="sub1">RSS 브라우저의 구현</p><p>필자는 최근 DTV용 프로그램(니오젠 ‘레보’)의 일부 모듈을 개발한 경험이 있다. 이는 RSS 기반의 다양한 웹 콘텐츠를리모컨만으로 쉽게 볼 수 있어 유용하지만, 이곳에서 예제로 쓰기에는 구현 내용이 지나치게 많다. 따라서 여기서는 독자들을 위해서핵심 기능만을 간추려 구현한 별도의 유틸리티를 소개한다. 바로 RSS 브라우저(Browser)가 그것이다.<br />
지금부터RSS를 읽어 표현해주는 프로그램을 본격적으로 구현해본다. 필자가 구현한 RSS 브라우저는 Xpyder와 비슷한 사용자인터페이스를 가진 유틸리티로, RSS 서비스를 제공하는 웹 사이트를 등록해 Tree 형태로 좌측에 나열한다. 그곳의 서비스를받아 리스트 형태로 뉴스 목록을 나타내고, 뉴스 목록 가운데 한 아이템을 선택하면 그 요약을 역시 리스트 형태로 우측 상단에표시해준다. 또한 문서를 더블 클릭하면 원문 웹 사이트로 이동해 글을 볼 수 있도록 해준다. 이런 기능을 지닌 간단한 RSS리더를 RSS 2.0을 써서 구현해보자. <br />
RSS를 읽는 기본 클래스 구조는 &lt;그림 1&gt;과 같다. 뉴스에 포커스를 두어 간단히 정리해 봤다.<br />
RSS는 크게 채널 정보와 그 채널의 아이템 정보로 나뉜다. 따라서 이에 대한 클래스를 정의했고, 이중 아이템 정보는 채널 정보의 하위 정보로써 무수히 존재할 수 있으므로 별도의 배열로 정의했다.<br />
<br />
<img src="http://www.dbguide.net/images/know/clum/060823_rss.gif"></p><p>&nbsp;</p><p class="sub1">RSS File 읽기</p><p>구현한 코드 내용은 꽤 간단하므로 간단히 소스에 주석을 달아 설명한다. XML의 해석 엔진은 MSXML 4.0을사용했으므로, 본 프로그램을 변경하거나 사용하려면 MSXML이 설치되어 있는지 확인해봐야 한다(MSXML은 MS 웹 사이트에서쉽게 구할 수 있다). &lt;리스트 3&gt;은 RSS를 파싱하는 부분을 구현한 것이다.<br />
&lt;리스트 3&gt;은RSS를 서비스하는 웹 사이트에서 RSS 파일을 다운로드 하는 것부터 시작한다. 다운로드 할 대상이 되는 RSS 서비스용 웹사이트들을 많이 알아 두면 좋은 정보를 수집하는 데 도움이 될 것이다. XML 엔진을 사용할 수 있도록 MSXML Object를생성하고, 다운로드 한 XML 파일을 읽도록 호출한다. 이렇게 하면 XML 엔진은 XML 파일을 DOM Object로 구성하여관리하게 된다. MSXML 엔진의 사용은 본래 내용에서 벗어난 것이므로 여기서는 다루지 않지만, 그 사용법이 무척 간단하므로소스만 봐도 쉽게 이해할 수 있다. 그럼 이제 파싱을 통해 필요한 데이터를 추출해 보자.<br />
RSS 파일은 일정한 데이터구조가 반복적으로 저장된 형태이므로, 그것을 파싱하기 위해 재귀호출 방식을 사용했다. RSS의 정보는 헤더(Header)에해당하는 채널 정보의 Source 구조체와 그 채널의 실제 데이터가 있는 Item 구조체로 나눠 정의했고, 그 구조체 별로데이터를 채우는 방법은 &lt;리스트 4, 5&gt;에 나타나 있다. &lt;리스트 5&gt;는 RSS XML 상에 기록되어있는 정보를 채널과 아이템으로 분리 구성된 Data 구조체에 읽어 들여 배열로 만드는 과정을 보여준다. 이렇게 읽어 들인 RSS정보는 뷰어의 좌측 Tree View에 채널 별(섹션 별)로 붙여 보여주고, 우측 상단에는 아이템 리스트를 리스트콘트롤(List Control)에 추가해 사용자가 보고 선택할 수 있도록 했다. 그 리스트 아이템은 각 기사의 제목, 생성일,URL, 설명 등에 대한 정보를 가지고 있고, 이를 선택하면 그 원본 기사가 있는 URL로 이동할 수 있도록 처리했다. 그상세한 내용은 제공되는 별도의 소스 코드를 통해 확인하길 바란다. 코드의 나머지 부분은 화면상에 데이터를 표시해 주는 일반적인과정으로 이해하면 된다.<br />
지금까지 RSS 콘텐츠에 대해 알아보고 사용 방법과 그 활용 예를 들었다. 각자의 입맛에 맞는 더우수한 프로그램으로 만드는 일은 이제 독자의 몫이 될 것이다. 이와 관련해 궁금한 사항이 있거나, 더 많은 정보를 얻길 바란다면필자의 블로그(http:// www.devzen.net/blog?npcc)에 방문하길 바란다. </p><p>&nbsp;</p><p class="sourcebox">&lt;리스트 3&gt; MSXML을 이용한 RSS XML 문서 읽기<br />
<br />
#import "msxml4.dll" named_guids // MSXML 사용하기..<br />
<br />
// RSS를 서비스 하는 웹 사이트에서 XML을 다운로드해 Section 별로 Item을 채워 넣는다.<br />
void CFeed::BuildFromFile(CString strXMLFile)<br />
{<br />
CString strTmpFile = GetModuleFileDir() + _T("\\RSSReader.xml");<br />
// Step 0. Download XML File From Web site <br />
if ( URLDownloadToFile( NULL, strXMLFile, strTmpFile,0, NULL ) != S_OK )<br />
{<br />
AfxMessageBox( _T("Failed to download ") + strXMLFile );<br />
return;<br />
}<br />
// Step 1. XML 문서를 읽는다. 실패하면 return<br />
if ( m_pDoc != NULL )<br />
{<br />
m_pDoc-&gt;Release();<br />
m_pDoc = NULL;<br />
}<br />
// MS XML Object Interface를 구한다.<br />
if ( SUCCEEDED (CoCreateInstance(MSXML2::CLSID_DOMDocument,<br />
NULL,<br />
CLSCTX_INPROC_SERVER,<br />
MSXML2::IID_IXMLDOMDocument,<br />
reinterpret_cast&lt;void**&gt;(&amp;m_pDoc))))<br />
m_pDoc-&gt;put_async( VARIANT_FALSE );<br />
<br />
// XML 파일을 읽어서 DOM을 구성한다.<br />
if ( m_pDoc-&gt;load( _bstr_t(strTmpFile) ) == VARIANT_FALSE )<br />
{<br />
// Failed to load XML Document, report error message<br />
AfxMessageBox( _T("Failed to load XML Document") );<br />
return;<br />
}<br />
// Step 2. 버전 정보를 읽고 유효한지 확인한다.<br />
// Step 3. XML에서 채널 노드를 돌면서 아래의 하위 Item을 읽는다.<br />
// title<br />
// link<br />
// description<br />
// language<br />
// copyright<br />
// webMaster<br />
// lastBuildDate<br />
// ttl<br />
// generator<br />
// Then go to image node, get the following items<br />
// title<br />
// url<br />
// link<br />
// width<br />
// height<br />
// description<br />
<br />
// Step 4. item 노드로 가서 아래의 정보를 읽는다. <br />
// title<br />
// description<br />
// link<br />
// author<br />
// category<br />
// pubDate<br />
// subject<br />
<br />
MSXML2::IXMLDOMNode *pNode = NULL;<br />
if ( SUCCEEDED(m_pDoc-&gt;QueryInterface(MSXML2::IID_IXMLDOMNode, <br />
reinterpret_cast&lt;void**&gt;(&amp;pNode))))<br />
{<br />
IterateChildNodes(pNode); <br />
// XML의 각 Node별 파싱을 통해 값을 읽는다.<br />
pNode-&gt;Release();<br />
pNode = NULL;<br />
}<br />
// We are not using smart pointer, so we have to release it outself<br />
if ( m_pDoc )<br />
{<br />
m_pDoc-&gt;Release();<br />
m_pDoc = NULL;<br />
}<br />
}</p><p>&nbsp;</p><p class="sourcebox">&lt;리스트 4&gt; RSS에서 사용하는 노드를 기준으로 파싱해 데이터 수집<br />
<br />
void CFeed::IterateChildNodes(MSXML2::IXMLDOMNode *pNode)<br />
{<br />
BSTR bstrNodeName;<br />
<br />
if ( pNode )<br />
{<br />
m_nDepth++;<br />
CString strOutput;<br />
pNode-&gt;get_nodeName(&amp;bstrNodeName);<br />
<br />
//<br />
// Find out the node type (as a string).<br />
//<br />
BSTR bstrNodeType;<br />
pNode-&gt;get_nodeTypeString(&amp;bstrNodeType);<br />
CString strType;<br />
strType = CString( bstrNodeType );<br />
SysFreeString(bstrNodeType);<br />
<br />
MSXML2::DOMNodeType eEnum;<br />
pNode-&gt;get_nodeType(&amp;eEnum);<br />
<br />
CString strValue;<br />
BSTR bstrValue;<br />
switch( eEnum )<br />
{<br />
case MSXML2::NODE_TEXT:<br />
{<br />
// Text string in the XML document<br />
BSTR bstrValue;<br />
pNode-&gt;get_text(&amp;bstrValue);<br />
strOutput = CString( bstrValue );<br />
SysFreeString(bstrValue);<br />
break;<br />
}<br />
case MSXML2::NODE_COMMENT:<br />
{<br />
// Comment in the XML document<br />
VARIANT vValue;<br />
pNode-&gt;get_nodeValue(&amp;vValue);<br />
VariantClear(&amp;vValue);<br />
break;<br />
}<br />
case MSXML2::NODE_PROCESSING_INSTRUCTION:<br />
{<br />
// Processing instruction<br />
strOutput = CString( bstrNodeName );<br />
break;<br />
}<br />
case MSXML2::NODE_ELEMENT:<br />
{<br />
// Element<br />
strOutput = CString( bstrNodeName );<br />
if ( strOutput == _T("rss") )<br />
{<br />
GetVersion( pNode );<br />
}<br />
else if ( strOutput == _T("copyright") )<br />
{<br />
pNode-&gt;get_text(&amp;bstrValue);<br />
m_source.m_strCopyright = CString( bstrValue );<br />
}<br />
else if ( strOutput == _T("title") &amp;&amp; m_nDepth == 4 )<br />
{<br />
pNode-&gt;get_text(&amp;bstrValue);<br />
m_source.m_strTitle = CString( bstrValue );<br />
}<br />
else if ( strOutput == _T("link") &amp;&amp; m_nDepth == 4 )<br />
{<br />
pNode-&gt;get_text(&amp;bstrValue);<br />
m_source.m_strLink = CString( bstrValue );<br />
}<br />
else if ( strOutput == _T("description") &amp;&amp; m_nDepth == 4 )<br />
{<br />
pNode-&gt;get_text(&amp;bstrValue);<br />
m_source.m_strDescription = CString( bstrValue );<br />
}<br />
else if ( strOutput == _T("language") )<br />
{<br />
pNode-&gt;get_text(&amp;bstrValue);<br />
m_source.m_strLanguage = CString( bstrValue );<br />
}<br />
else if ( strOutput == _T("webMaster") )<br />
{<br />
pNode-&gt;get_text(&amp;bstrValue);<br />
m_source.m_strWebMaster = CString( bstrValue );<br />
}<br />
else if ( strOutput == _T("lastBuildDate") )<br />
{<br />
pNode-&gt;get_text(&amp;bstrValue);<br />
m_source.m_strLastBuildDate = CString( bstrValue );<br />
}<br />
else if ( strOutput == _T("ttl") )<br />
{<br />
pNode-&gt;get_text(&amp;bstrValue);<br />
m_source.m_strTtl = CString( bstrValue );<br />
}<br />
else if ( strOutput == _T("generator") )<br />
{<br />
pNode-&gt;get_text(&amp;bstrValue);<br />
m_source.m_strGenerator = CString( bstrValue );<br />
}<br />
else if ( strOutput == _T("image") )<br />
{<br />
BuildImage( pNode );<br />
}<br />
else if ( strOutput == _T("item") )<br />
{<br />
BuildItem( pNode );<br />
}<br />
break;<br />
}<br />
case MSXML2::NODE_DOCUMENT:<br />
case MSXML2::NODE_DOCUMENT_TYPE:<br />
case MSXML2::NODE_DOCUMENT_FRAGMENT:<br />
case MSXML2::NODE_NOTATION:<br />
case MSXML2::NODE_ENTITY:<br />
case MSXML2::NODE_ENTITY_REFERENCE:<br />
case MSXML2::NODE_CDATA_SECTION:<br />
{<br />
// CData section<br />
strOutput = CString( bstrNodeName ) + _T(" - ") + CString( strType );<br />
}<br />
}<br />
SysFreeString(bstrNodeName);<br />
}<br />
<br />
// Any child nodes of this node need displaying too.<br />
<br />
MSXML2::IXMLDOMNode *pNext = NULL;<br />
MSXML2::IXMLDOMNode *pChild;<br />
pNode-&gt;get_firstChild(&amp;pChild);<br />
while( pChild )<br />
{<br />
IterateChildNodes(pChild);<br />
pChild-&gt;get_nextSibling(&amp;pNext);<br />
pChild-&gt;Release();<br />
pChild = pNext;<br />
}<br />
m_nDepth--;<br />
} </p><p>&nbsp;</p><p class="sourcebox">&lt;리스트 5&gt; RSS정보를 수집용 구조체에 채움<br />
<br />
void CFeed::BuildItem(MSXML2::IXMLDOMNode *pNode)<br />
{<br />
MSXML2::IXMLDOMNode *pNext = NULL;<br />
MSXML2::IXMLDOMNode *pChild;<br />
CString strOutput;<br />
BSTR bstrNodeName;<br />
CFeedItem item;<br />
BSTR bstrValue;<br />
pNode-&gt;get_firstChild(&amp;pChild);<br />
while( pChild )<br />
{<br />
pChild-&gt;get_nodeName(&amp;bstrNodeName);<br />
strOutput = CString( bstrNodeName );<br />
if ( strOutput == _T("title") )<br />
{<br />
pChild-&gt;get_text(&amp;bstrValue);<br />
item.m_strTitle = CString( bstrValue );<br />
}<br />
else if ( strOutput == _T("description") )<br />
{<br />
pChild-&gt;get_text(&amp;bstrValue);<br />
item.m_strDescription = CString( bstrValue );<br />
}<br />
else if ( strOutput == _T("link") )<br />
{<br />
pChild-&gt;get_text(&amp;bstrValue);<br />
item.m_strLink = CString( bstrValue );<br />
}<br />
else if ( strOutput == _T("author") )<br />
{<br />
pChild-&gt;get_text(&amp;bstrValue);<br />
item.m_strAuthor = CString( bstrValue );<br />
}<br />
else if ( strOutput == _T("category") )<br />
{<br />
pChild-&gt;get_text(&amp;bstrValue);<br />
item.m_strCategory = CString( bstrValue );<br />
}<br />
else if ( strOutput == _T("pubDate") )<br />
{<br />
pChild-&gt;get_text(&amp;bstrValue);<br />
item.m_strPubDate = CString( bstrValue );<br />
}<br />
else if ( strOutput == _T("subject") )<br />
{<br />
pChild-&gt;get_text(&amp;bstrValue);<br />
item.m_strSubject = CString( bstrValue );<br />
}<br />
<br />
pChild-&gt;get_nextSibling(&amp;pNext);<br />
pChild-&gt;Release();<br />
pChild = pNext;<br />
}<br />
m_item.Add( item );<br />
} </p><p><br />
참고자료 1. http://blogs.law.harvard.edu/tech/rss<br />
2. http://www.mnot.net/rss/tutorial<br />
3. http://web.resource.org/rss/1.0/spec<br />
4. http://www.codeproject.com</p></li></div><br />
<div class="post-sub ptl"><img src="http://blogimgs.naver.com/blog20/blog/ico_origin.gif" alt="출처" height="17" width="32"> <a href="http://blog.naver.com/artmedia0" target="_top" class="link1">백한가지 기쁨</a> | <a href="http://blog.naver.com/artmedia0" target="_top" class="link1">아트</a><br />
<img src="http://blogimgs.naver.com/blog20/blog/ico_source.gif" alt="원문" height="17" width="32"> <a href="http://blog.naver.com/artmedia0/60028275704" target="_top" class="link1">http://blog.naver.com/artmedia0/60028275704</a></div><br />
<br/><br/>tag : <a href="/tag/rss" rel="tag">rss</a>,&nbsp;<a href="/tag/애플리케이션" rel="tag">애플리케이션</a>,&nbsp;<a href="/tag/웹" rel="tag">웹</a>			 ]]> 
		</description>
		<category>web dev</category>
		<category>rss</category>
		<category>애플리케이션</category>
		<category>웹</category>

		<comments>http://virus56.egloos.com/4883957#comments</comments>
		<pubDate>Fri, 17 Apr 2009 05:55:28 GMT</pubDate>
		<dc:creator>비향</dc:creator>
	</item>
</channel>
</rss>
