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

kwon37xi의 이미지

XML 페이지를 설계하다보면 도무지 갈피를 잡을 수 없는 경우가 있는데, 그건 속성(Attribute)를 써야 하느냐 요소(Element)를 써야하느냐를 경정할 때입니다.

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

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

속성 중심은 다음과 같겠습니다.
<서가>
<책 이름="책 이름" 글쓴이="저자" 출판사="출판사이름" ISBN="ISBN 번호">
<요약>내용 요약..</요약>
</책>
</서가>

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

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

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

ageldama의 이미지

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

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

----
The future is here. It's just not widely distributed yet.
- William Gibson

ddt의 이미지

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

McKabi의 이미지

(무엇을 써도 상관 없는 상황이라면)

정해진 기본값이 있을경우 속성,
없으면 요소로 만듭니다.

ㄲ ㅏ ㅂ ㅣ / M c K a b i / 7 7 r b i / T o D y

차리서의 이미지

요소와 속성은 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</전화>
        </주소>
        <파트>베이스</파트>
    </단원>
</단원신상정보>

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

--
자본주의, 자유민주주의 사회에서는 결국 자유마저 돈으로 사야하나보다.
사줄테니 제발 팔기나 해다오. 아직 내가 "사겠다"고 말하는 동안에 말이다!

bluemoon의 이미지

kwon37xi wrote:

속성 중심은 다음과 같겠습니다.
<서가>
<책 이름="책 이름" 글쓴이="저자" 출판사="출판사이름" ISBN="ISBN 번호">
<요약>내용 요약..</요약>
</책>
</서가>

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

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

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

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