11. 엘리먼트 컨텐트 모델 General Web2008/12/22 22:18
이전 블로그(http://blog.naver.com/nashira7)에서 옮겨왔습니다.
작성일 : 2005년 7월 17일
옮긴일 : 2008년 12월 22일
컨텐트 모델 2가지
1. 시퀀스 모델(Sequence)
- 엘리먼트는 지정된 순서대로 자식 엘리먼트를 가져야만 한다는 것
- 콤마로서 자식 엘리먼트를 구분
- 아주 엄격한 선언 타입
유효한 예
<!DOCUMENT MOUNTAIN
[
<!ELEMENT MOUNTAIN (NAME, HEIGHT, STATE)>
<!ELEMENT NAME (#PCDATA)>
<!ELEMENT HEIGHT (#PCDATA)>
<!ELEMENT STATE (#PCDATA)>
]>
<MOUNTAIN>
<NAME>Wheeler</NAME>
<HEIGHT>13161</HEIGHT>
<STATE>New Mexico</STATE>
</MOUNTAIN>
유효하지 않은 예
<MOUNTAIN>
<NAME>Wheeler</NAME>
<HEIGHT>13161</HEIGHT>
<STATE>New Mexico</STATE>
</MOUNTAIN>
2. 초이스(choice)모델
<!DOCUMENT FILM
[
<!ELEMENT FILM (STAR | NARRATOR | INSTRUCTOR)>
<!ELEMENT STAT (#PCDATA)>
<!ELEMENT NARRTOR (#PCDATA)>
<!ELEMENT INSTRUCTOR (#PCDATA)>
]
>
유효(O)
<FILM>
<STAR>Robert Redford</STAR>
</FILM>
유효(O)
<FILM>
<NARRATOR>Robert Redford</NARRATOR>
</FILM>
유효(O)
<FILM>
<INSTRUCTOR>Robert Redford</INSTRUCTOR>
</FILM>
유효(X) - 2개가 같이 올 수 없다.
<FILM>
<STAR>Robert Redford</STAR>
<NARRATOR>Robert Redford</NARRATOR>
</FILM>
3. 컨텐트 모델의 변형
? - 0개 혹은 하나 이상의 아이템
+ - 1개 혹은 그 이상의 아이템
* - 0개 혹은 그 이상의 아이템
예1)
<!ELEMENT MOUNTAIN (NAME+, HEIGHT?, STATE)>
: NAME 엘리먼트가 한개 혹은 그 이상, HEIGHT 엘리먼트가 0개 혹은 하나인 경우
<MOUNTAIN>
<NAME>Ryu</NAME>
<NAME>Park</NAME>
<STATE>Seoul</STATE>
</MOUNTAIN>
예2)
<!ELEMENT FILM (STAR* | NARRATOR | INSTRUCTOR)>
: STAR 엘리먼트가 0개 혹은 그 이상인 경우
<FILM>
<STAR>Ryu</STAR>
<STAR>Park</STAR>
</FILM>
<FILM>
<NARRATOR>Gregory</NARRATOR>
</FILM>
예3)
<!ELEMENT FILM (STAR | NARRATOR | INSTRUCTOR)+>
: () 뒤에 + 기호가 오는 경우에는 전체 컨트롤 모델을 조작
<FILM>
<NARRATOR></NARRATOR>
<STAR></STAR>
<NARRATOR></NARRATOR>
</FILM>
<FILM>
<STAR>Bertram Wooster</STAR>
<STAR>Sean Connery</STAR>
</FILM>
<FILM>
<INSTRUCTOR>Stinker Pike</INSTRUCTOR>
</FILM>
예4) 시퀀스 모델안에 초이스 컨텐트 모델을 넣거나 초이스 모델안에 시퀀스 모델을 넣는 경우
<!DOCTYPE FILM
[
<!ELEMENT FILM (TITLE, CLASS, (STAR | NARRATOR | INSTRUCTOR))>
<!ELEMENT TITLE (#PCDATA)>
<!ELEMENT CLASS (#PCDATA)>
<!ELEMENT STAR (#PCDATA)>
<!ELEMENT NARRATOR (#PCDATA)>
<!ELEMENT INSTRUCTOR (#PCDATA)>
]
>
유효한 도큐먼트
<FILM>
<TITLE>The Net</TITLE>
<CLASS>fictional</CLASS>
<STAR>Sandra Bullock</STAR>
</FILM>
<FILM>
<TITLE>How to XML</TITLE>
<CLASS>instructional</CLASS>
<INSTRUCTOR>Penny Donaldson</INSTRUCTOR>
</FILM>
4. 혼합된 컨텐트 지정
엘리먼트 타입을 혼합된 컨텐트로 선언하기 위해 다음의 두 가지 형태의 컨텐트 모델을 사용한다.
1) 문자데이터 - (#PCDATA)를 사용
<!ELEMENT SUBTITLE (#PCDATA)>
<SUBTITLE>A New Approach</SUBTITLE>
<SUBTITLE></SUBTITLE>
2) 문자 데이터와 자식 엘리먼트
<!ELEMENT TITLE (#PCDATA | SUBTITLE)*>
: TITLE이라는 엘리먼트는 파싱된 문자 데이터를 가지고 있으며, SUBTITLE은 0개 또는 그 이상의
엘리먼트를 가질수 있다는 의미.
아래는 모두 유효한 문서이다.
<TITLE>
Moby-Dick
<SUBTITLE>Or, the Whale</SUBTITLE>
</TITLE>
<TITLE>
<SUBTITLE>Or, the Whale</SUBTITLE>
Moby-Dick
</TITLE>
<TITLE>
Moby-Dick
</TITLE>
<TITLE>
<SUBTITLE>Or, Whale</SUBTITLE>
<SUBTITLE>Another Subtitle</SUBTITLE>
</TITLE>
<TITLE></TITLE>
'General Web' 카테고리의 다른 글
| 13. 외부 DTD 만들기 (0) | 2008/12/22 |
|---|---|
| 12. 속성 선언하기 (0) | 2008/12/22 |
| 11. 엘리먼트 컨텐트 모델 (0) | 2008/12/22 |
| 10. 엘리먼트 타입 선언하기 (0) | 2008/12/22 |
| 9. DTD만들기 (0) | 2008/12/22 |
| 8. DTD 추가하기 (0) | 2008/12/22 |
