SMW, #set_internal

시멘틱 미디어 위키가 좋기는 한데, 위키 문서를 작성하고 편집하는 사람들이 시멘틱미디어위키의 속성들을 모두 알고 문서 링크마다 그 속성들을 넣어준다는 것은 불가능한 일이기 때문에 시멘틱 미디어위키와 미디어위키의 “틀”을 함께 사용하는 방법이 좋아요.

예전에 축구 관련된 정보들을 모아 놓은 위키에 써볼 수 있을까 해서 한번 궁리했던 것들이에요.

홍길동이라는 선수에 대해 설명하는 위키문서에 (1) “홍길동은 2003년 K리그에서 대전시티즌 소속으로 12경기에 출전해서 5골을 넣었고 경고는 3개를 먹었다” (2) “홍길동은 2004년 K리그에서 울산 소속으로 10경기에 출전해서 7골을 넣었고 경고는 4개를 먹었다” 같은 정보를 기록한다고 해봐요.

이것들을 시멘틱 위키로 적용해 보면 아래 같은 방식이 될거에요.

(1) “홍길동은 [[played year::2003]]년 [[played league::K리그]]에서 [[played club::대전시티즌]] 소속으로 [[played::12]]경기에 출전해서 [[made goal::5]]골을 넣었고 경고는 [[got warning::3]]개를 먹었다” (2) “홍길동은 [[played year::2004]]년 [[played league::K리그]]에서 [[played club::울산]] 소속으로 [[played::10]]경기에 출전해서 [[made goal::7]]골을 넣었고 경고는 [[got warning::4]]개를 먹었다”

그런데 이렇게 속성들을 입력해 놓으면 제대로 활용할 수 없게 되요.

인터넷에 돌아다니는 시멘틱 미디어위키 관련된 소개들에 있는 것처럼 영화 괴물에 대한 위키 문서에 시멘틱 위키 속성을 넣었을 때 감독, 제작년도, 관객수 이런 것들은 그 문서에 “유일한 속성”이 되기 때문에 다른 쪽에서 이 속성들을 불러서 “2012년에 만들어진 관객수 100만 이상인 영화”를 찾을 수 있게 되는데, 축구선수 홍길동 문서에서 위에 있는 것처럼 정보를 입력하면 홍길동이라는 문서에 10가지 정보가 개별적으로 들어가기 때문에 “2003년에 5골 이상 득점한 선수”를 찾을 수 없어요.

그래서 정보 (1)과 (2)에 있는 정보들을 세트로 묶어줘야 정보로 활용할 수 있어요.

그래서 선수기록이라는 틀을 하나 만들었어요. 이 틀은 {{선수기록|(1)리그|(2)소속팀|(3)연도|(4)출장|(5)교체|(6)실점|(7)득점|(8)경고|(9)퇴장}} 같은 형식으로 사용하고, 이 틀 안에는 시멘틱 미디어위키와 관련된 코드를 넣어 놓아요. {{#set_internal:player_record|played league={{{1}}}|played club={{{2}}}|played year={{{3}}}|played={{{4}}}|E={{{5}}}|F={{{6}}}|made goal={{{7}}}|got warning={{{8}}}|I={{{9}}}}}

 

#set_internal 이라는 것은 player_record라는 이름의 덩어리에 리그부터 퇴장까지의 정보를 덩어리로 묶어주는 거에요. 그러면 정보(1)에 있는 5골이라는 정보와 2003년이라는 것이 엮이게 되기 때문에 “2003년에 5골 이상 득점한 선수” 라는 조건으로 검색할 수 있게 되는거에요.

 

입력측면에서 한가지 더 볼까요?

리그 실적을 개별 선수의 문서에서만 입력한다면 문서가 만들어지지 않은 선수의 정보는 입력할 수가 없어요. 보통 년간 단위로 리그 실적이 공개되면 그것을 그대로 문서로 만들어 놓는 것이 좋겠지요.

그런 경우를 위해서 “리그기록”이라는 틀을 하나 만들었어요. 여기에는 선수기록과 달리 player라는 속성을 더 넣었어요. 그러면  선수이름과 정보들을 한 덩어리로 묶을 수 있겠죠.

이제 이것들을 조회하는 방법을 볼까요?

보통 시멘틱미디어위키에서는 ask를 이용해서 아래와 같이 조회하는데요, 어떤 페이지를 보여줄 것인가? 그 페이지가 가지고 있는 속성중 어느것을 보여줄까? 두가지가 키에요. 시멘틱미디어위키 도움말 중에 쓰인 것을 볼까요?

{{#ask:[[Category:City]]
|?Located in=Country
|?Average rainy days
|sort=Located in,Average rainy days
|order=asc,desc
}}

이것의 의미는 카테고리 City에 있는 문서들을 보여주는데, 거기에 붙은 Located in 속성은 Country라는 명칭으로 보여주고, Average rainy days를 보여주라.  보여주는 순서는 Located in은 오름차순으로, average rainy days는 내림차순으로 보여주라는 의미에요.

그러면  여기 에 있는 것처럼 데이타를 테이블로 보여줍니다. 이것은 처음에 설명한 것처럼 개별 도시에 Located in이라는 속성과 Average rainy days라는 속성을 추가해 놓은거죠. Sydney에는 [[Located in::Australia]]와 [[Average rainy days::143.7]]이라는 정보가 들어있을거에요.

이 쿼리를 좀 바꿔볼까요?

{{#ask:[[Category:City]][[Population::+]]
|?Located in=Country
|?Average rainy days
|sort=Located in,Average rainy days
|order=asc,desc
}}

이러면 City 카테고리에 있고, Population 속성을 가진 모든 문서 목록을 보여주고 그 문서들이 가지고 있는 Located in 속성과 Average rainy days 속성의 값들을 보여주게 될거에요.

이제 축구 얘기로 돌아와서요

{{#ask:[[player_record::+]]
|? played year
|? made goal
}}

같이 하면 player_record를 가지고 있는 문서(선수)를 나열하고 played year와 made goal을 보여주겠지요.

Advertisements
이 글은 기타등등 카테고리에 분류되었습니다. 고유주소 북마크.

SMW, #set_internal에 1개의 응답

  1. 핑백: SMW, SubObject | Memo 5

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중