유져 생성 CREATE USER 'Username'@'localhost' IDENTIFIED BY '********';

유져 DB권한 설정. GRANT ON `channel` . * TO 'Username'@'localhost' WITH GRANT OPTION ;
 
ALL PRIVILEGES 데이터/구조에 관한 모든 권한
 
USAGE // 데이터/구조에 관한 권한 없음.

DB 데이터에 관한 구조
SELECT ,
 INSERT ,
UPDATE ,
DELETE ,

DB 구조에 관한 구조. CREATE , DROP , REFERENCES , INDEX , ALTER , CREATE TEMPORARY TABLES , LOCK TABLES , CREATE VIEW , SHOW VIEW , CREATE ROUTINE, ALTER ROUTINE , EXECUTE DB 관리 권한 LOCK TABLES REFERENCES 계정생성권한 WITH GRANT OPTION ; 계정생성권한을 제외하고 나머지는 DB권한 부분에 들어감. `channel` . * `channel` 이라는 데이터베이스의 모든 테이블에관한 권한. 'Username'@'localhost' 'Username'이라는 유져의 'localhost'의 권한.
신고
Posted by naearu

GNU 약소 일반 공중 사용 허가서(LGPL)

GNU 일반 공중 사용 허가서(GPL)

신고
Posted by naearu
연구_고민/웹2007.08.23 20:45
<!--StartFragment-->동적으로 셀렉트박스에 Option 항목을 추가할 일이 자주 발생한다.
그럴때에는 new Option();을 이용하면 되는데..
다음과 같이 사용한다.

function AddSelectBox(txt,vlu){
var Obj = document.forms['F'].selBox.options; //전통적인 형식
또는
var Obj = document.getElementsByName('selBox')[0].options; //DOM형식
Obj[Obj.length] = new Option(txt,vlu);
}

AddSelectBox('보여줄 글','값');

꼭 한가지 주의할 점은..
팝업창에서 부모창의 셀렉트박스를 컨트롤 하려고 하면 예외오류가 발생한다는 점이다.
그럴때에는 반드시 부모창에 함수를 만들어 놓고 팝업에서는 그 함수를 호출해야 한다.

//팝업창에서 컨트롤 할때의 예제.
<script>opener.AddSelectBox('보여줄 글','값');</script>
신고
Posted by naearu
연구_고민/웹2007.08.22 21:21
 function number_input()
 {
  if((event.keyCode<48)||(event.keyCode>57))
  {
   event.returnValue=false;
  }
 }



<input name="test" type="text" onkeydown="return number_input()" style="IME-MODE: disabled; ">
신고
Posted by naearu

계산 함수와 함께 각 그룹에 대해 하나의 행과 하나의 요약 정보를 생성


SELECT field_name From table_name


     WHERE search_conditions


          GROUP BY [ALL] aggregate_free_expression [, aggregate_free_expression...]]


          [HAVING search conditions]



- GROUP BY : 선택된 테이블의 각 그룹에 대한 요약 정보를 생성


- HAVING : 결과 행들에 대해 제약을 가함, 조건에 맞지 않는 그룹들을 제외한다.





* ANSI 표준 SQL에서의 요구사항


- fields_name 에 있는 모든 컬럼들은 반드시 GROUP BY 절에 나타나야 한다.


- HAVING 에 있는 컬럼은 반드시 하나의 값을 반환해야 한다.


- HAVING 을 포함한 질의는 반드시 GROUP BY 절을 포함해야 한다.



* Transact - SQL 에서는 ANSI 표준 SQL 보다 많은 옵션을 제공한다.


- GROUP BY 절은 수식을 포함할 수 있다.


- GOURP BY ALL은 WHERE절에서 제외된 그룹까지도 포함한다.


- ALL 은 SELECT문이 WHERE절을 포함할 때만 의미가 있다.





ex)

select title_id, copies_sold = sum(qty) from sales group by title_id


select title_id, copies_sold = sum(qty) from sales

    

     where ord_date between '1/1/1994' and '12/31/1994' group by ALL title_id

신고
Posted by naearu

◈ ROLLUP operator


  - ROLLUP구문은 GROUP BY절과 같이 사용 되며, GROUP BY절에 의해서 그룹 지어진
    집합결과에 대해서 좀 더 상세한 정보를 반환하는 기능을 수행합니다.

  - SELECT절에 ROLLUP을 사용함으로써 보통의 select된 데이터와 그 데이터의
    총계를 구할 수 있습니다.


※ 우선 아주 간단한 예제부터 살펴 보겠습니다.
   (scott유저의 emp테이블을 가지고 테스트 했습니다.)


-- Group By를 사용해서 직업별로 급여 합계를 구하는 예제 입니다.

SELECT job, SUM(sal)
FROM emp
GROUP BY job


JOB          SUM(SAL)
---------- ----------
ANALYST          600
CLERK              3200
MANAGER        33925
PRESIDENT      5000
SALESMAN      4000


-- 아래 SQL문은 위의 예제에 ROLLUP구문을 사용해서 직업별로 급여 합계를 구하고
   총계를 구하는 예제 입니다.

SELECT job, SUM(sal)
FROM emp
GROUP BY ROLLUP(job)
 

JOB          SUM(SAL
---------- ----------
ANALYST          6000
CLERK              3200
MANAGER        33925
PRESIDENT       5000
SALESMAN       4000
                       52125   --> 급여 합계에 대한 총계가 추가 되었습니다.




우선 간단하게 ROLLUP  Operator의 예제를 살펴보았습니다.
조금더 복잡한(?) 예제를 하나더 해보면은요..

-- 부서의 직업별로 인원수와 급여 합계를 구하는 예제를 하나더 해보겠습니다.

-- 일반적인 Group By절을 사용해서 SQL문을 구현해보면은요.. 아래와 같이 하면 되겠죠..

SELECT b.dname, a.job, SUM(a.sal) sal, COUNT(a.empno) emp_count
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY b.dname, a.job


DNAME       JOB               SAL  EMP_COUNT
----------  ---------- ---------- ----------
ACCOUNTING  CLERK               1300          1
ACCOUNTING  MANAGER          2450          1
ACCOUNTING  PRESIDENT        5000          1
RESEARCH    ANALYST            6000          2
RESEARCH    CLERK                1900          2
RESEARCH    MANAGER           2975          1
SALES       MANAGER              28500          1
SALES       SALESMAN             4000          3


-- 결과를 보면은요..  부서별로 인원이 몇명이고, 또 급여합계가 얼마가 되는지 한눈에 보이지 않죠...
   일일이 부서에 해당하는 직업별 급여와 사원수를 일일이 더해야 되죠..

-- 이런 경우 ROLLUP  Operator를 적용해서 구현을 하면은 부서별 급여합계와 사원 총수를
   쉽게 볼 수 있습니다...

SELECT b.dname, a.job, SUM(a.sal) sal, COUNT(a.empno) emp_count
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY ROLLUP(b.dname, a.job)


DNAME      JOB               SAL  EMP_COUNT
---------- ---------- ---------- ----------
ACCOUNTING CLERK              1300          1
ACCOUNTING MANAGER          2450          1
ACCOUNTING PRESIDENT        5000          1
ACCOUNTING                         8750          3  -->  ACCOUNTING 부서의 급여합계와 전체 사원수..
RESEARCH   ANALYST            6000          2
RESEARCH   CLERK                1900          2
RESEARCH   MANAGER           2975          1
RESEARCH                            10875          5 -->  RESEARCH 부서의 급여합계와 전체 사원수..
SALES      MANAGER              28500          1
SALES      SALESMAN             4000          3
SALES                                  32500          4 -->  SALES부서의 급여합계와 전체 사원수..
                                            52125         12 ->  전체 급여 합계와 전체 사원수


위와 같이 ROLLUP Operator을 일반적인 누적에 대한 총계를 구할때 사용하면 아주 편리하게
사용 할 수 있습니다.
 
 
 
 
 
 
 
 
 -   
 SELECT NVL(DECODE(B.NO, '1', DNAME), '총계') DNAME,
SUM(CLERK) CLERK,
SUM(MANAGER) MANAGER,
SUM(ETC) ETC,
SUM(DEPT_SAL) DEPT_SAL
FROM (
SELECT B.DNAME, A.CLERK, A.MANAGER, A.ETC, A.CLERK + A.MANA
GER + A.ETC DEPT_SAL
FROM (
SELECT DEPTNO,
SUM(DECODE(JOB,'CLERK',SAL)) CLERK,
SUM(DECODE(JOB,'MANAGER',SAL)) MANAGER,
SUM(DECODE(JOB,'MANAGER',0,'CLERK',0,SAL)) ETC
FROM EMP
GROUP BY DEPTNO
) A, DEPT B
WHERE A.DEPTNO = B.DEPTNO ) A,
(SELECT '1' NO FROM DUAL
UNION ALL
SELECT '2' FROM DUAL) B
GROUP BY DECODE(B.NO, '1',A.DNAME);

위 처럼 오라클에서 지원하는 함수를 이용하지 않고 만들어 봤어요..
참조 하세요.
 
 
 
 -   
 SELECT b.dname, a.job, SUM(a.sal) sal, COUNT(a.empno) emp_co
unt
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY b.dname, a.job

분석해 볼까여
1.select;
2.from
3.where
4.group

2.테이블 두개가 메모리에 적제가 되겠죠
3.조건에 의해 deptno 을 기준으로 하나의 테이블로 정리 되겠죠
그다음은 4. 가 계산되는데
여기서 4.가 없다고 가정하면
1.로 가서 결국 하나의 행이 결과값으로 도출될 것입니다. 그룹함수에 의해서
총합과 행의 총갯수가 반환되겠죠
그럼 다시 되돌아가서
4.group by 절이 계산을 하게 되는데 우선 b.dname만 있다면 몇개의 레코드가 반환될까여 부서명이
4개라면.. 4개의 레코드가 반환되겠죠(단 4개의 부서가 데이타에 존재한다면)
그 다음에 a.job 까지(직업은 3개라고 가정하면) 두개의 조건이 주어졌습니다.
그럼 몇개의 레코드가 반환될까여 12개의 레코드가 반환될까여????

이번에는 문장을 분석해서 SQL을 작성해 볼까여 (위 강의가 기준)
부서의 직업별로 인원수와 급여 합계를 구하라

키포인트 인원수와 급여합계입니다.
여기서 그룹함수가 사용된다는 것을 알수 있고 GROUP BY절을 사용해야 된다는 것도 알수가 있습니다.
형식은
1.SELECT
2.TABLE
3.WHERE
4.GROUP BY
로 형식이 가추어 지고
1. 컬럼은 4개가 되고 그룹함수 SUM()가 COUNT()가 들어가고여
2. 테이블은 위 강의가 기준이니까 2개이고여
3. 자연스럽게 JOIN 이 일어나겠네여 무슨 조인일까여????
4. GROUP BY절에서 부서와 직업이 GROUP으로 묶여지겠네여...
SQL을 작성하면 위와 같겠지여

 
 
 




◈ CUBE operator


 ※ CUBE강좌를 보시기 전에 바로 위에 있는 ROLLUP강좌를 꼭 봐주세요..
 
 ROLLUP 강좌예제 중에서 아래 SQL문 예제를 가지고 CUBE강좌를 진행 하려고 합니다.

====================  ROLLUP 강좌의 예제입니다.  =======================

SELECT b.dname, a.job, SUM(a.sal) sal, COUNT(a.empno) emp_count
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY ROLLUP(b.dname, a.job)


DNAME      JOB               SAL  EMP_COUNT
---------- ---------- ---------- ----------
ACCOUNTING CLERK              1300          1
ACCOUNTING MANAGER          2450          1
ACCOUNTING PRESIDENT        5000          1
ACCOUNTING                         8750          3  -->  ACCOUNTING 부서의 급여합계와 전체 사원수..
RESEARCH   ANALYST            6000          2
RESEARCH   CLERK                1900          2
RESEARCH   MANAGER           2975          1
RESEARCH                            10875          5 -->  RESEARCH 부서의 급여합계와 전체 사원수..
SALES      MANAGER              28500          1
SALES      SALESMAN             4000          3
SALES                                  32500          4 -->  SALES부서의 급여합계와 전체 사원수..
                                            52125         12 ->  전체 급여 합계와 전체 사원수

=========================================================================


위의 SQL의 결과를 보면 부서별로 각 직업에 해당하는 급여와 사원수를 볼 수 있습니다.

하지만 부서별로 각 직업의 급여와 사원수, 그리고 또 각 직업별로 급여 합계와 사원수를
보기 위해서는 두개의 ROLLUP을 사용해서 SQL문을 작성해야 합니다.

아래와 같이 되겠죠..
 

SELECT b.dname, a.job, SUM(a.sal) sal, COUNT(a.empno) emp_count
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY ROLLUP(b.dname, a.job)
UNION
SELECT ' ', job, SUM(sal) sal, COUNT(empno) emp_count
FROM emp
GROUP BY ROLLUP(job)
 
DNAME      JOB               SAL  EMP_COUNT
---------- ---------- ---------- ----------
ACCOUNTING CLERK               1300          1
ACCOUNTING MANAGER          2450          1
ACCOUNTING PRESIDENT        5000          1
ACCOUNTING                         8750          3
RESEARCH    ANALYST           6000          2
RESEARCH    CLERK               1900          2
RESEARCH    MANAGER          2975          1
RESEARCH                           10875          5
SALES          MANAGER         28500          1
SALES          SALESMAN         4000          3
SALES                                 32500          4   => 요기 까지는 첫 번째 ROLLUP를 이용해서 구하고요
                   ANALYST          6000          2
                   CLERK              3200          3
                   MANAGER         33925          3
                   PRESIDENT        5000          1
                   SALESMAN         4000          3
                                           52125         12  => 요 부분은 두 번째 ROLLUP을 이용해서 구했습니다.
 


CUBE Operator를 사용하면 편하게 하나의 SQL문으로 위의 결과를 얻을 수 있습니다.
직접 SQL문을 실행시켜 보면 쉽게 이해가 갑니다.


SELECT b.dname, a.job, SUM(a.sal) sal, COUNT(a.empno) emp_count
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY CUBE(b.dname, a.job)

DNAME      JOB               SAL  EMP_COUNT
---------- ---------- ---------- ----------
ACCOUNTING CLERK               1300          1
ACCOUNTING MANAGER          2450          1
ACCOUNTING PRESIDENT        5000          1
ACCOUNTING                         8750          3 =>ACCOUNTING 부서의 직업별 급여의 총계와 사원수.
RESEARCH    ANALYST           6000          2
RESEARCH    CLERK               1900          2
RESEARCH    MANAGER          2975          1
RESEARCH                           10875          5=>RESEARCH 부서의 직업별 급여의 총계와 사원수.
SALES          MANAGER         28500          1
SALES          SALESMAN         4000          3
SALES                                 32500          4=>SALES 부서의 직업별 급여 총계와 사원수.
                   ANALYST          6000          2
                   CLERK              3200          3
                   MANAGER         33925          3
                   PRESIDENT        5000          1
                   SALESMAN         4000          3   
                                           52125         12  => 직업별로 급여의  총계와 사원수를 보여줍니다.


CUBE를 어느 경우에 사용 할 수 있는지 이해 되셨죠..
CUBE Operator는 Cross-Tab에 대한 Summary를 추출하는데 사용 됩니다
즉 ROLLUP에 의해 나타내어지는 Item Total값과 Column Total값을 나타 낼 수 있습니다.

너무 어렵게 설명했나요... 응용해서 테스트 해보세요..


◈ GROUPING() 함수


GROUPING Function은 ROLLUP, CUBE Operator에 모두 사용할 수 있습니다.

GROUPING Function는 해당 Row가 GROUP BY에 의해서 산출된 Row인 경우에는 0을 반환하고,
ROLLUP이나 CUBE에 의해서 산출된 Row인 경우에는 1을 반환하게 됩니다.

따라서 해당 Row가 결과집합에 의해 산출된 Data인지,
ROLLUP이나 CUBE에 의해서 산출된 Data인지를 알 수 있도록 지원하는 함수입니다.


SELECT b.dname, a.job, SUM(a.sal) sal, COUNT(a.empno) emp_count,
       GROUPING(b.dname) "D", GROUPING(a.job) "S"
FROM emp a, dept b
WHERE a.deptno = b.deptno
GROUP BY CUBE(b.dname, a.job)


DNAME        JOB               SAL  EMP_COUNT    D    S
----------   ----------    ------- ---------- ---- ----
ACCOUNTING CLERK            1300          1    0    0
ACCOUNTING MANAGER       2450          1    0    0
ACCOUNTING PRESIDENT     5000          1    0    0
ACCOUNTING                      8750          3    0    1
RESEARCH    ANALYST        6000          2    0    0
RESEARCH    CLERK            1900          2    0    0
RESEARCH    MANAGER       2975          1    0    0
RESEARCH                        10875          5    0    1
SALES          MANAGER      28500          1    0    0
SALES          SALESMAN      4000          3    0    0
SALES                              32500          4    0    1
                   ANALYST         6000          2    1    0
                   CLERK             3200          3    1    0
                   MANAGER      33925          3    1    0
                   PRESIDENT     5000          1    1    0
                   SALESMAN      4000          3    1    0
                                       52125         12    1    1
 


신고
Posted by naearu
연구_고민2007.08.17 15:06

Atom

위키백과 ― 우리 모두의 백과사전.

href="http://ko.wikipedia.org/wiki/Atom#column-one">navigation, 찾기

Atom웹로그나 최신 소식과 같은 웹 컨텐츠의 신디케이션을 위한 XML 기반의 문서 포맷이자, 웹로그 편집을 위한 HTTP 기반의 프로토콜이다.

[편집] 역사

2003년 6월샘 루비는 무엇이 "체계적인 로그"를 만드는가에 대한 논의를 위한 위키를 만들었다. 사람들은 곧 RSS를 대체하기 위한 새로운 신디케이션 포맷을 논의하기 시작했다. 얼마 후에 로드맵(RoadMap) 프로젝트[1]가 만들어졌고, 상당한 참여자들의 주목을 끌었다. 이 새로운 포맷은 블로거 API나 라이브저널 XML-RPC 클라이언트/서버 프로토콜과 같은 블로그 편집 프로토콜의 대안의 역할도 할 수 있도록 방향이 정해졌다.

이 시점에서, 결정 절차의 부재로 인해 논의가 다소 산만하게 진행되었다. 명칭도 문제가 되었는데, Atom으로 확실히 결정되기 전에는 파이(Pie), 에코(Echo), 네코(Necho) 등의 명칭이 혼재했다. 7월 초, 'Atom 0.2'로 알려진 중간 결과물이 나온 후부터 메일링 리스트를 통해 논의가 이루어졌다. 이 단계에서 마지막 중간 결과물인 'Atom 0.3'이 12월에 공개되었다. 이 버전은 여러 신디케이션 도구에 광범위하게 적용되었으며, 특히 블로거나 G메일 같은 구글 관련 서비스에도 사용되기 시작했다.

2004년에는 프로젝트를 W3CIETF 같은 표준화 단체로 옮기는 것을 검토하기 시작했다. 논의 끝에 IETF로 결정이 났으며, 애텀펍 워킹 그룹(Atompub Working Group)이 2004년 6월에 조직돼 헌장을 만들고 절차를 세웠다. 초기의 작업은 신디케이션 포맷에 중점을 두었고, 몇 번의 초안이 나온 후에 'Atom 1.0'이 2005년 7월 발표되어, 8월에 RFC 인터넷 표준이 되기 전의 마지막 단계인 "제안 표준"(proposed standard)으로 인정받았다.

2005년 8월 현재에는 출판 프로토콜과 신디케이션 포맷의 다양한 확장에 대한 작업이 진행 중이다. 최근의 개발과 논의에 대해서는 Atom 위키에서 찾아볼 수가 있다.

[편집]

다음은 Atom 피드 문서의 한 예이다.

<?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> <title>견본 피드</title> <subtitle>재치 있고 통찰력 있는 촌평을 기입해보라</subtitle> <link href="http://example.org/"/> <updated>2003-12-13T18:30:02Z</updated> <author> <name>아무개</name> <email>ahmooge@example.com</email> </author> <id>urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6</id> <entry> <title>Atom 기반의 로봇이 이리저리 헤집고 있다</title> <link href="http://example.org/2003/12/13/atom03"/> <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> <updated>2003-12-13T18:30:02Z</updated> <summary>내용 요약</summary> </entry> </feed>


아톰 영문판




아톰 구글 한글번역판



신고
Posted by naearu
TAG ATOM, 아톰
연구_고민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
연구_고민2007.08.17 10:40
연구_고민2007.08.16 15:35

1. 수퍼키(Super Key)

Ÿ 한 릴레이션 내에 있는 속성들의 집합으로 구성된 키

Ÿ 릴레이션을 구성하는 모든 튜플에 대해 유일성(Unique)은 만족하지만, 최소성(Minimality)은 만족하지 못함

* 유일성: 하나의 키 값으로 하나의 튜플만을 유일하게 식별할 수 있어야 함

* 최소성: 키를 구성하는 속성하나를 제거하면 유일하게 식별할 수 없도록 꼭 필요한 최소의 속성으로 구성되어야 함



2. 후보키(Candidate Key)

Ÿ 릴레이션을 구성하는 속성들 중에서 튜플을 유일하게 식별하기 위해 사용되는 속성들의 부분 집합

Ÿ 유일성과 최소성을 모두 만족함



3. 기본키(Primary Key)

Ÿ 후보키 중에서 특별히 선정된 키로 중복된 값을 가질 수 없음

Ÿ 유일성과 최소성을 가지며 튜플을 유일하게 식별하기 위해 반드시 필요함

Ÿ NULL 값을 가질 수 없음



4. 대체키(Alternate Key)

Ÿ 후보키 중에서 선정된 기본키를 제외한 나머지의 후보키



5. 외래키(Foreign Key)

Ÿ 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합

Ÿ 한 릴레이션에 속한 속성 A와 참조 릴레이션의 기본키인 B가 동일한 도메인 상에서 정의되었을 때의 속성 A를 외래키라고 함

Ÿ 외래키는 참조 릴레이션의 기본키와 동일한 키 속성을 가짐



더보기..

신고
Posted by naearu