본문 바로가기

XML

XML - 1# 유효한 문서 DTD 만들기


유효한 XML 문서

XML 문법을 성공적으로 확인한 유효한 문서를 "유효한(Valid) 문서"라고 합니다.
특히, 문서가 DTD(Document Type Definition) 또는 XML 스키마를 갖고 있다면, DTD 또는 스키마와 일치해야만 그 문서가 유효하다고 할 수 있습니다.



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE THESIS [
 <!ELEMENT THESIS (P*)>
 <!ELEMENT P (#PCDATA)>
]>
<THESIS>
 <P>
 This is my book
 </P>
 <P>
 Pretty good!!
 </P>
 <P>
 So, give me!!
 </P>
</THESIS>


여기서는 <!DOCTYPE> 구성요소를 볼 수 있습니다.
기본 문법은 <!DOCTYPE 루트-이름[DTD]>이고 여기서 DTD는 사용하고자 하는 문서의 형식 정의를 의미합니다.
<!ELEMETN>를 통해 각 구성요소에 대한 문법을 지정하고 있습니다.
<THESIS>요소의 내부에 <p>요소만이 존재하고 있다. P옆에 붙어있는 *는 <P>요소는 아예 없거나 여러개를 포함할 수도 있게 하려고 할 때 쓴다.
#PCDATA는 문자 데이터로 순수한 텍스트만 입력할 수 있음을 의미합니다. 





문서 형식 선언 만들기

<!DOCTYPE 루트-이름[DTD]> 말고도
<!DOCTYPE 루트-이름 SYSTEM URL>
<!DOCTYPE 루트-이름 SYSTEM URL [DTD]>
<!DOCTYPE 루트-이름 PUBLIC identifier URL>
<!DOCTYPE 루트-이름 PUBLIC identifier URL [DTD]>
등의 형식이 있습니다.

구성요소 선언

DTD에서 구성요소에 대한 문법을 선언하려면 <!ELEMENT>를 <!ELEMENT 이름 내용-모델>의 형식으로 사용합니다.
여기서 "이름"은 선언하고자 하는 구성요소의 이름이며, "내용-모델"은 EMPTY,ANY 등을 저장할 수 있도록 지정합니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE DOCUMENT [
 <!ELEMENT DOCUMENT ANY>
]>
<DOCUMETN>


</DOCUMETN>


여기서는 구성요소를 ANY라는 내용 모델로 선언이 되어있네요.
ANY는 선언한 구성요소가 모든 종류의 내용을 저장할 수 있게 할 때 선언해 줍니다.
ANY로 지정하게 되면 XML 검증기는 그 내용을 확인하지 않으므로 좋은 방법이 아니라고 할 수 있습니다.

자식 구성요소 목록

내용모델에 ANY대신, 내부에 포함되는 다른 구성요소의 이름을 괄호에 지정하여 선언할 수 있습니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE DOCUMENT [
 <!ELEMENT DOCUMENT (CUSTOMER)*>
]>
<DOCUMENT>
           .
           .
           .
</DOCUMENT>

앞에서 말했듯이 괄호 옆에 *를 붙이면 <DOCUMENT> 구성요소는 아무것도 적지 않거나 여러개의 <CUSTOMER> 구성요소를 포함할 수 있게 됩니다. 그러므로

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE DOCUMENT [
<!ELEMENT DOCUMENT (CUSTOMER)*>
]>
<DOCUMENT>
     <CUSTOMER>
              .
              .
              .
      </CUSTOMER>
</DOCUMENT>

<DOCUMENT>구성요소는 임의의 <CUSTOMER>구성요소를 포함할 수 있으므로 위 처럼 <CUSTOMER>요소를 추가할 수 있습니다. 그러나 아직 <CUSTOMER>구성요소를 선언하지 않았으므로 이 문서는 유효한 문서가 아닙니다.


 

'XML' 카테고리의 다른 글

XML - JavaScript 이해하기  (0) 2012.01.17
XML - 3# 유효한 문서 DTD 만들기  (0) 2012.01.17
XML - 4# 유효한 문서 DTD 만들기  (0) 2012.01.17
XML - 2# 유효한 문서 DTD 만들기  (0) 2012.01.17
XML - XML의 기본  (0) 2012.01.17