DTD의 구성 요소
DTD는 Document Type Definition의 약자로, XML 문서의 구조를 정의하는 거다.
XML 문서가 어떤 요소(Element)와 속성(Attribute)을 가질 수 있는지, 그리고 그들이 어떤 순서나 형식으로 나타나야 하는지를 규칙으로 정해 주는 거다.
쉽게 말해서, XML 문서의 설계도 같은 거다.
이걸 통해 XML 문서가 '유효한(valid)'지 아닌지를 검증할 수 있다.
이제 구성 요소에 대해 설명하겠다.
1. 요소 정의 (Element Declaration)
어떤 태그가 문서에 들어갈 수 있는지, 그리고 그 태그 안에 뭐가 들어갈 수 있는지를 정의한다.
예시 <!ELEMENT message (#PCDATA)>
여기서 message라는 태그가 텍스트 데이터를 담을 수 있다는 뜻이다.
#PCDATA는 Parsed Character Data의 줄임말로 텍스트 데이터를 허용하되, XML 파서(parser)가 그 데이터를 해석(파싱)할 수 있게 한다는 뜻이다.
즉, 그냥 message 요소 안에 텍스트를 쓸 수 있다는거다.
이 구성 요소는 필수이다.
2. 속성 정의 (Attribute Declaration)
각 요소가 가질 수 있는 속성들을 정의한다.
예시 <!ATTLIST message id ID #REQUIRED>
여기서는 message라는 요소가 id라는 속성을 가지고, 그 값은 고유한 ID여야 한다는 뜻이다.
3. 요소의 순서와 중첩
요소들이 어떤 순서로 들어가야 하는지도 DTD로 정의할 수 있다.
예를 들어, 부모-자식 관계나 반복 여부 같은 걸 정하는 거다.
예시 <!ELEMENT myMessage (message+)>
이건 myMessage 안에 하나 이상의 message 요소가 들어가야 한다는 의미다.
4. 기타 데이터 타입
DTD에서는 ID, NMTOKEN, CDATA 같은 데이터 타입도 정할 수 있다.
예시 <!ATTLIST message id ID #IMPLIED>
ID는 고유해야 하고, NMTOKEN은 공백 없이 한 덩어리의 문자열을 뜻한다.