xml 문서에서 사용할 ENTITY, ELEMENT, 규칙들을 정의한다.
HTML 의 참조 DTD의 경우 strict 와 loose 규칙이 있다. 이 때 loose DTD 를 사용하게 되면 HTML 에서 사용자의 편의를 고려하여 잘못된 문법들에 대해서 어느정도 해석을 해서 받아들인다. 하지만 strict 규칙을 사용하면 보다 정확한 문법을 사용자에게 요구하게 된다.
HTML 의 참조 DTD의 경우 strict 와 loose 규칙이 있다. 이 때 loose DTD 를 사용하게 되면 HTML 에서 사용자의 편의를 고려하여 잘못된 문법들에 대해서 어느정도 해석을 해서 받아들인다. 하지만 strict 규칙을 사용하면 보다 정확한 문법을 사용자에게 요구하게 된다.
* dtd 파일의 이름은 거의 root element 의 이름을 사용한다.
1) 엘리먼트 선언
<!ELEMENT 이름 (자식태그들)>
<!ELEMENT 이름 (자식태그, 자식태그, 자식태그)> : 태그는 순서대로 작성해야한다.
<!ELEMENT 이름 (#PCDATA)> : 엘리먼트의 콘텐츠가 문자열임을 선언
<!ELEMENT 이름 EMPTY> : 엘리먼트의 콘텐츠가 없음을 선언 (태그의 유무로 구분 가능)
PCDATA (Parsed Character data)
PCDATA (Parsed Character data)
예)
<!DOCTYPE students[
<!ELEMENT students (student)>
<!ELEMENT student (name, age, tel, email, intro, working)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT tel (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT intro (#PCDATA)>
<!ELEMENT working EMPTY>
]>
2) 사용 개수 지정
- student : 1개
- student? : 0 또는 1
- student* : 0개 이상
- student+ : 1개 이상
예)
<!DOCTYPE students[
<!ELEMENT students (student*)>
<!ELEMENT student (name, age?, tel, email, intro?, working?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT tel (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT intro (#PCDATA)>
<!ELEMENT working EMPTY>
]>
따로 표시되지 않은 자식태그에 대해서는 data를 가지고 있지 않더라도 명시해 주어야 한다. 다만 EMPTY 값을 갖는 엘리먼트는 태그의 유무로 구분을 할 수 있다.
3) ','와 '|'의 응용
<!ELEMENT student (name, age?, tel, email, intro?, working?, (man|woman)?)>
man 엘리먼트와 woman 엘리먼트 중에 하나를 선택하는 상황을 만들어준다.
멋진 사람이다. <tag>비트교육센터</tag>에 <strong>다닌다</strong>.</intro>
- MIXED 구조는 사용하지 않는 것이 바람직하다. xml 의 목적이 data를 구조화 하기 위함인데 MIXED 의 경우에는 체계적인 구조화가 어렵기 때문이다.
4) MIXED ELEMENT
콘텐츠로 자식태그와 문자열을 동시에 갖는 엘리먼트를 말한다.예)
<intro><strong>학생</strong>이다.멋진 사람이다. <tag>비트교육센터</tag>에 <strong>다닌다</strong>.</intro>
- MIXED 구조는 사용하지 않는 것이 바람직하다. xml 의 목적이 data를 구조화 하기 위함인데 MIXED 의 경우에는 체계적인 구조화가 어렵기 때문이다.
댓글 없음:
댓글 쓰기