2008년 10월 14일 화요일

펌즈 룰 파일의 구조

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": 자식 컨텐트가 없는 경우


컨텐트 핸들러들

댓글 1개: