XML – 속성이 좋을까요 요소가 좋을까요?

건물열성능해석을 위한 프로그램을 작성하는 과정에서 관련정보를 xml로 저장하기로 하였다. 이때 재료/부재의 정보들을 xml의 속성(attribute)으로 처리할까 요소(element)로 처리할까 고민하다가 다음과 같은 정보를 얻었다. 정보를 제공한 사이트에 대하여 트랙백을 시도하였으나, 실패하여 아래와 같이 원문을 옮겨 적었다.

출처 : http://kldp.org/node/31924

kwon37xi 씀 (목, 2004/03/11 – 5:55pm) XML 페이지를 설계하다보면 도무지 갈피를 잡을 수 없는 경우가 있는데, 그건 속성(Attribute)를 써야 하느냐 요소(Element)를 써야하느냐를 경정할 때입니다.

예를 들어 책에 관한 XML이 있다고 할 때 요소 중심은 다음과 같겠죠.

<서가>
<책>
<책이름>책 이름</책이름>
<글쓴이>저자</글쓴이>
<출판사>출판사 이름</출판사>
<ISBN>ISBN번호</ISBN>
<요약>책 내용 요약..</요약>
</책>
</서가>

속성 중심은 다음과 같겠습니다.

<서가>
<책 이름="책 이름" 글쓴이="저자" 출판사="출판사이름" ISBN="ISBN 번호">
<요약>내용 요약..</요약>
</책>
</서가>

위와 같은 방식 중 어떤것이 더 효율적일까요(파서의 입장에서)?
그리고 어떤것이 사용하기 편할까요(XML을 다루는 프로그래머의 입장에서)?

저는 속성 기반을 선호하는 편입니다만, 딱히 이렇다할 장점이나 효율성을 집어내지는 못하겠습니다.

요즘 XML 프로그램짤일이 급속히 늘어나는 추세라, 이런 사항을 확실히 인식하고 넘어갔으면 해서요.

저도 약간 비슷한 문제가 있습니다;

제 경우에는 다른 요소를 포함할 경우가 아니라면 속성으로 합니다.
(어차피 지금 하는 것들 대부분이 한 줄이 row이고 한 속성이 딱 column;;; )

http://www.zvon.org/xxl/XPathTutorial/General/examples.html
이 문서를 보고나서 속성을 주로 씁니다.

(무엇을 써도 상관 없는 상황이라면)
정해진 기본값이 있을 경우 속성,
없으면 요소로 만듭니다.

요소와 속성은 DTD 논리 체계 상 의미가 전혀 다를 것 같습니다. 다음은 주소록의 예입니다:

<단원신상정보>
    <단원 고유인식번호="701" 성별="남" 기수="7">
        <이름 문자="ko">차리서</이름>
        <이름 문자="zh">車里西</이름>
        <이름 문자="en">CHA Reeseo</이름>
        <전자우편 메일링리스트="가입">reeseo@kldp.org</전자우편>
        <전자우편>reeseo@aaa.bbb</전자우편>
        <홈페이지 링크="공개">http://www.cantabile.or.kr/~reeseo/</홈페이지>
        <홈페이지>http://formal.korea.ac.kr/~reeseo/</홈페이지>
        <주소 형태="집">
            서울특별시 어쩌구 저쩌구
            <우편번호>150-xxx</우편번호>
            <전화 위치="거실">02-xxx-xxxx</전화>
            <전화 위치="방">02-xxx-xxxx</전화>
        </주소>
        <주소 형태="직장">
            서울특별시 어쩌구 저쩌구
            <우편번호>135-xxx</우편번호>
            <전화>02-xxx-xxxx</전화>
            <팩스>02-xxx-xxxx</팩스>
        </주소>
        <파트 기간="~19931102">베이스</파트>
        <파트 기간="~">테너</파트>
    </단원>
    <단원 고유인식번호="702" 성별="남" 기수="7">
        <이름 문자="ko">홍길동</이름>
        <이름 문자="en">HONG Gildong</이름>
        <전자우편>gildong@hong.pe.kr</전자우편>
        <주소 형태="집">
            서울특별시 어쩌구 저쩌구
            <우편번호>171-xxx</우편번호>
            <전화>02-xxx-xxxx</전화>
        </주소>
        <파트>베이스</파트>
    </단원>
</단원신상정보>

어떤 요소의 속성이어야 더 말이 되는 것도 있고, 반대로 어떤 요소의 하위 요소여야 더 바람직한 것도 있겠습니다. 하나만 있어야하는 요소, 없어도 되는 요소, 여러개 있을 수 있는 요소가 있는가 하면, 꼭 있어야하는 속성, 반드시 몇 가지 중 하나여야하는속성 값, 없으면 디폴트로 무엇으로 간주하는 속성 등등이 있겠죠. 모두 “의미 체계”에 따라 적절히 선택해야할 문제라고 봅니다.

질문안에 답이 나오는군요.
만약 글쓴이가 한명 이상이라면? 또는 후에 추가되어야 한다면?

…그렇기때문에 요소를 써야만 일이 수월 할 수 있습니다.
또한 요소의 사용은 쉽고 표현은 직관적이어야 한다는 XML의 취지에 맞고요.

데이터를 요구하는 클라이언트의 입장에서볼때
값 하나만을 요구되는 경우는 드물껍니다. 주로 요소로 이루어진 문서를
요구하게 될겁니다.

그리고.. 개인적으론 클라이언트가 요구하는 데이터는 요소로 만들고
프로그램 내부에서 사용되는 값의 경우엔 속성으로 만듭니다.

[교훈]

중복이 허용되는 경우(예를 들어, 저자의 수가 2인 이상)는 요소로 처리하는 것이 유리하다.

사용자에게 노출할 필요가 없는 정보는 속성으로 처리하는 것이 유리하다.

Print Friendly, PDF & Email