[XML] DTD의 정의와 Elements 속성
DTD (Document Type Definition) ?
XML 문서의 구조 및 해당 문서에서 사용할 수 있는 적법한 요소와 속성을 정의합니다.
✓ well-formed - DTD에 맞지 않아도 실행이 잘 되는 form (DTD X, syntax O, 실행 O)
✓ vaild - well-formed 이면서 DTD에 잘 맞는 form (DTD O, syntax O, 실행 O)
① 새로운 문서 타입 정의
② 새로운 문서 타입을 이용한 데이터의 교환
③ XML 문서의 구문 및 구조에 대한 유효성을 검사
Element define
<!ELEMENT element-name category>
<!ELEMENT element-name (element-content)>
위의 코드와 같이 DTD의 element를 정의할 수 있습니다.
(둘 중 하나를 사용하면 됩니다.)
① Children element
<!ELEMENT element-name (child1)>
<!ELEMENT element-name (child1,child2,...)>
element-content에 child가 하나 또는 여러 개 들어갈 수 있습니다.
② PCDATA
<!ELEMENT element-name (#PCDATA)>
child를 넣을 땐 괄호 안에 데이터의 type을 넣으시면 됩니다.
③ Empty element
<!ELEMENT element-name EMPTY>
Category keyword로 사용하시면 됩니다.
empty element는 attribute만을 갖습니다.
Ex) <link rel = "naver" href = "naver.com" />
④ Any element
<!ELEMENT element-name ANY>
Category keyword로 사용하시면 됩니다.
Any element를 사용하면 parsable data의 어떤 조합도 담을 수 있게 되고,
데이터 컨텐츠를 제한하지 않게 됩니다.
(다만, attribute는 안됩니다.)
⑤ Element - Non type
<!ELEMENT element-name (child-name)>
✓ Element를 단 하나만 발생
⑥ Element - ' + ' type
<!ELEMENT element-name (child-name+)>
✓ Element를 하나 이상으로 발생
⑦ Element - ' * ' type
<!ELEMENT element-name (child-name*)>
✓ Element를 0개 또는 더 많이 발생
⑧ Element - ' ? ' type
<!ELEMENT element-name (child-name?)>
✓ Element를 0개 또는 1개 발생
⑨ Element - ' , ' type
<!ELEMENT note (to,from, header, message, body)>
✓ AND
✓ Child elements를 순자적으로 나열
⑨ Element - ' | ' type
<!ELEMENT note (to,from,header,(message|body))>
✓ Exclusive OR
✓ Child elements를 선택적으로 나열
⑩ EXAMPLE
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type = "text/css" href = "h.css"?>
<!DOCTYPE note[
<!ELEMENT note (to, from, heading, body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body ANY>
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>
<to>Tove</to>
</body>
</note>
↑↑↑ Valid code ↑↑↑
◡̈