XML 입문 | DTD를 사용하여 XML 구조의 정의 | DTD에서 요소와 문자 데이터의 조합

HTML에서는 아래와 같이 작성을 할 수 있다.

<p>
아버지는 <strong>자산가</strong>이다.
</p>

<p>요소의 문자 데이터에 인라인 요소인 <strong> 태그를 사용하여 작성하고 있다.

맞찬가지로 XML에도 문자 데이터에 요소를 (몇 번이라도) 작성 할 수 있다. 이러한 경우의 DTD 작성 방법이지만, 바로 이전에 설명했던 여러 요소 중에서 하나를 선택하는 방법을 사용하여 작성 할 수 있다.

먼저 아래와 같이 작성한다.

<!ELEMENT 요소명 (#PCDATA | 요소명)>

|을 사용하여 작성 방법은 요소뿐만 아니라, #PCDATA요소를 같이 작성할 수도 있다. 이대로라면 문자 데이터가 다른 요소가 어느 쪽이든 하나만 작성 할 수 밖에 없게 되지 겠지만, 아래와 같이 작성하면 이 문제는 해결할 수 있다.

<!ELEMENT 요소명 (#PCDATA | 요소명)*>

위와 같이 작성 가능 횟수로 0번 이상 지정하는 *를 마지막으로 작성한다. 이렇게 작성을 하게 되면 문자 데이터나 요소 중 하나가 각각 0회 이상 여러 번 작성 할 수 있게 된다. 예를 들어 방금 전의 HTML의 예제는 아래와 같은 의미이다.

아버지는   <strong>자선자</strong>  입니다.
------   ---------------------  -----
#PCDATA       'strong'요소      #PCDATA

이것은 #PCDATA<strong>요소가 반복하여 작성되고 있는 것이다.

그럼 이전 XML 문서 샘플에 추가하는 형태로 작성해 보자.

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE 고객정보[
  <!ELEMENT 고객정보 (고객+)>
  <!ELEMENT 고객 (이름, 성별, 취미*, (집 | 회사 | 핸드폰), 비고?)>
  <!ELEMENT 이름 (#PCDATA)>
  <!ELEMENT 성별 (#PCDATA)>
  <!ELEMENT 취미 (#PCDATA)>
  <!ELEMENT 집 (#PCDATA)>
  <!ELEMENT 회사 (#PCDATA)>
  <!ELEMENT 핸드폰 (#PCDATA)>
	<!ELEMENT 비고 (#PCDATA | 중요)*>
  <!ELEMENT 중요 (#PCDATA)>
]>

<고객정보>
    <고객>
        <이름>김혜진</이름>
        <성별>女</성별>
        <집>02-xxx-xxxx</집>
    </고객>

    <고객>
        <이름>박정혁</이름>
        <성별>남</성별>
        <취미>피아노</취미>
        <취미>수영</취미>
        <핸드폰>010-xxxx-xxxx</핸드폰>
        <비고>
            아버지는 <중요>자산가</중요>이며, 대기업 <중요>회장</중요>이다.
        </비고>
    </고객>
</고객정보>



최종 수정 : 2019-10-07