XML의 문서 구조를 표현하는 방법에는 DTD와 XML 스키마가 있습니다.
DTD는 시스템 내부에서 자신의 시스템에 맞게 작성한 XML 문서 구조인지 판단하기 위한 목적으로 사용합니다. XML 스키마는 서로 다른 시스템 사이에 데이터 표준화를 위해 문서 구조를 나타내기 위한 목적으로 사용합니다.
DTD는 Documents Type Definition의 약자로 XML 문서를 표준 문서 포멧으로 추상화하는 것을 말합니다. 그리고 DTD 정의에 맞게 작성한 XML 문서를 유효화 문서(Valid Document)라 부릅니다.
DTD 문서는 <!DOCTYPE DTD 명 [내부 요소들]> 형태로 표시합니다.
그리고 내부 요소는 <!ELEMENT 요소명(내부요소, 내부요소, …)> 형태로 표시합니다. 만약 내부 요소의 값이 문자형일 때는 #PCDATA 를 명시합니다.
다음은 XML 문서 내부에 DTD를 작성한 예입니다.
<?xml version="1.0" encoding="euc-kr" ?> <!-- DTD 정의 --> <!DOCTYPE 회원 [ <!ELEMENT 회원리스트 (회원)> <!ELEMENT 회원 (아이디,이름,이메일)> <!ELEMENT 아이디 (#PCDATA)> <!ELEMENT 이름 (#PCDATA)> <!ELEMENT 이메일 (#PCDATA)> ]> <!-- DATA 정의 --> <회원리스트> <회원> <아이디>ehclub</아이디> <이름>장문석</이름> <이메일>jejutour@daum.net</이메일> </회원> <회원> <아이디>jejutour</아이디> <이름>송정수</이름> <이메일>jejutour@empal.com</이메일> </회원> </회원리스트> 다음은 XML문서와 DTD문서를 분리한 예입니다. ▷회원.dtd <?xml version="1.0" encoding="euc-kr" ?> <!ELEMENT 회원리스트 (회원)> <!ELEMENT 회원 (아이디,이름,이메일)> <!ELEMENT 아이디 (#PCDATA)> <!ELEMENT 이름 (#PCDATA)> <!ELEMENT 이메일 (#PCDATA)> ▷회원.xml <?xml version="1.0" encoding="euc-kr" ?> <!DOCTYPE 회원 SYSTEM "회원.dtd"> <회원리스트> <회원> <아이디>ehclub</아이디> <이름>장문석</이름> <이메일>jejutour@daum.net</이메일> </회원> <회원> <아이디>jejutour</아이디> <이름>송정수</이름> <이메일>jejutour@empal.com</이메일> </회원> </회원리스트>
DTD 문서 타입 선언은 다음과 같습니다.
<!DOCTYPE root_element source location1 location2 ... locationN [internal DTD]>
요소 선언은 다음과 같습니다.
<!ELEMENT element_name contents> element_name 요소 이름 contents 자식 목록들
다음은 위 그림을 간단하게 DTD로 요소를 선언한 것입니다.
<!ELEMENT 회원 (필수정보,선택정보)> <!ELEMENT 필수정보(아이디,이름)> <!ELEMENT 아이디 (#PCDATA)> <!ELEMENT 선택정보(이메일,성별,나이)> <!ELEMENT 이메일 (#PCDATA)> <!ELEMENT 성별 (#PCDATA)> <!ELEMENT 나이 (#PCDATA)>
요소를 선언할 때는 반복 횟수 및 그룹화는 다음처럼 표시합니다.
<!ELEMENT element_name ANY> : 어떠한 데이터 표현도 가능 <!ELEMENT element_name EMPTY> : 데이터를 갖지 않음
특성 선언은 다음과 같이 표현합니다.
<!ATTLIST ele_name, att_name, att_type, att_defvalue>
att_type은 열거형, 문자열, 토큰 타입이 올 수 있고 토큰 타입은 예약어를 사용합니다.