XML의 이해
룰 파일은 XML 형태로 되어 있습니다.
그
이유는 좀 더 자유로운 형식의 룰을 지원하고, 프로그램도 이해하기 쉽기
때문이죠.
룰 파일을 이해하시려면 XML 파일에 대해서 약간의 지식이 필요합니다. 먼저
아래의아래의
포스트를 보시고 다음으로 진행하십시오. XML에 대해서 알고 계시면 다음으로 넘어가시면
됩니다.
룰 엘리먼트(Rule element)취상위 엘리먼트입니다. 형식은 아래와 같습니다.
<PUMzRule Version="2.0" Type="News" Base="">
룰 엘리먼트의 속성들(attributes)
- 버전(Version): 룰의 버전을 의미하며, "2.0"이"2.0"이"2.0"이"2.0"이
최신입니다.
- 형태(Type): 현재 "News" 밖엔 없습니다.
- 기본 룰(Base): 부모가
되는 룰인데, 현재는 처리되지 않습니다. ""로 비워둡니다.
프라퍼티 엘리먼트(Properties element)프라퍼티 엘리먼트는 Java의 Hashtable<key, value>이나
C#의
Dictionary<key, value>같은 것으로 룰, 컨텐트 핸들러 엘리먼트의 자식 엘리먼트가 될
수
있습니다. 프라퍼티 엘리먼트는 속성을 갖지 않으며, 자식 엘리먼트들의 이름(name)이 키(key)가
되고,
자식 엘리먼트의 텍스트(text)가 값(value)가 됩니다. 자식 엘리먼트의 갯수는 무제한입니다.
<Properties>
<Url>http://feeds.engadget.com/weblogsinc/engadget</Url>
<SelectTitle>/rss/channel/title</SelectTitle>
</Properties>
위의
경우는, "Url"이라는 키에 "http://feeds.engadget.com/weblogsinc/engadget" 값을 저장합니다. "SelectTitle"이라는 키에 "/rss/channel/title" 값을
가집니다.
프라퍼티 엘리먼트의 상위 엘리먼트가 컨텐트 핸들러라면 컨텐트 핸들러가 이 값들을
사용하게
됩니다.
사이트 엘리먼트(Site element)사이트 엘리먼트는
룰
엘리먼트의 자식 엘리먼트로 하나만 존재합니다. 사이트 목록에 표시하는 용도와 클리핑
엔진의
인코딩 방식을 알려줍니다.
<Site Title="Engadget" Url="http://engadget.com/" Encoding="utf-8"/>
사이트 엘리먼트의 속성들
- 제목(Title): 목록에
표시할 사이트의 제목
- 웹 주소(Url): 사이트 URL. 참고용으로 엔진이 접속하지는
않습니다.
- 인코딩(Encoding): 해당 사이트의 컨텐트의 인코딩 문자열입니다. 한국 사이트는 보통
"euc-kr" 이나, 간혹 "utf-8" 인 경우도 있습니다. 정확히 알려면 해당 사이트의
소스 보기를 해서 charset값을 확인해 보십시오.
태스크
엘리먼트(Task element)룰 엘리먼트의 자식 엘리먼트이며, 갯수는 무제한입니다. 보통
2개를
사용합니다. 하나는 컨텐트를 긁어와서 처리하는 용도로, 다른 하나는 처리한 컨텐트를
파일로
저장하는 용도로 사용합니다. 정의한 순서대로 실행됩니다.
<Task Id="Grab" RootContentHandlerId="Listed">
...
</Task>
<Task Id="Output" RootContentHandlerId="Listed">
...
</Task>
태스크 엘리먼트의 속성들
- 아이디(Id): 태스크간 구분을 위해 고유한 아이디를 부여합니다.
- 최상위
컨텐트 핸들러 아이디(RootContentHandlerId): 태스크내에서 가장 먼저 실행할 컨텐트 핸들러의 아이디를 지정합니다.
컨텐트 핸들러 엘리먼트(ContentHandler element)태스크 엘리먼트의
자식
엘리먼트이며, 갯수는 무제한 입니다. 태스크에서 최상위 컨텐트 핸들러로 정의한 컨텐트
핸들러가
가장 먼저 실행되고, 이 컨텐트 핸들러가 실행을 마치면 자식 컨텐트
핸들러가
실행됩니다. 형태에 따라 실행되는 방법이 달라집니다. 주로 자식 컨텐트를 만들어
내는
역할을 합니다. 자식 컨텐트를 만들어낸 후에는 본 컨텐트에 대해 컨텐트
필터를
실행합니다.
<ContentHandler Id="Listed" ChildContentHandlerId="Article" Type="XML">
컨텐트 핸들러의 속성
- 아이디(Id): 컨텐트 핸들러의 구분을
위해 고유한 아이디를 부여합니다. 하나의 태스크 내에서만 고유하게 하면 됩니다.
- 자식 컨텐트 핸들러 아이디(ChildContentHandlerId): 다음에 실행할 컨텐트 핸들러 아이디를 지정합니다. 이
속성을 입력하지 않거나 값을 비워놓으면 이 컨텐트 핸들러가 해당 태스크내에서 가장
마지막으로 실행되는 것을 의미합니다.
- 형태(Type): 형태에 따라 다른 처리를 합니다.
입력가능한 값으로는 아래와 같습니다.
- "ItemList": 자식 컨텐트의 URL을
열거된 아이템을 이용해서 만들고, 그 URL에 있는 컨텐트를 가져오게 합니다.
- "NumberRange": 자식 컨텐트의 URL을 일련의 숫자를 이용해서 만들고, 그 URL에 있는 컨텐트를 가져오게 합니다.
- "XML": 컨텐트가 "XML"형태인 경우, 엘리먼트를 선택해서 자식 컨텐트를 만든다.
- "Regex": 정규식(Regular Expression)을 이용해서 컨텐트에서 자식 컨텐트의 URL을 뽑아내고, 그
URL에 있는 컨텐트를 가져오게 합니다.
- "Normal": 자식 컨텐트가 없는 경우
컨텐트 핸들러들