XML Note #2 XML 기본 문법
1. DTD 선언
1) XML 문서에 포함된 DTD
- 예제:
<!DOCTYPE MAIL [
<!ELEMENT HEADER (...)>
<!ELEMENT RECEIVED (...)>
<!ELEMENT SENDED (...)>
<!ELEMENT TITLE (...)>
<!ELEMENT BODY (...)>
]>
2) 외부 독립 파일로 분리된 DTD
- 예제:
<!DOCTYPE MAIL SYSTEM "mail.dtd">
2. ELEMENT (요소 유형) 선언
elementdecl ::= '<!ELEMENT' S Name S contentspec S? '>'
contentspec ::= 'EMPTY' | 'ANY' | Mixed | children
- 예제:
<!ELEMENT BR EMPTY>
<!ELEMENT tutorial (#PCDATA)>
<!ELEMENT XXX (AAA, BBB)>
<!ELEMENT AAA (#PCDATA)>
<!ELEMENT BBB (#PCDATA)>
-------------------------------------------------------------------------------------------------------
기호...기호 타입...설명.......................예제.......예제 설명
-------------------------------------------------------------------------------------------------------
|......세로 막대...or 조건....................A|B........A와 B중 하나만 반드시 나타남
,......쉼표........명시된 순서대로............A,B........A가 나타난 다음에 뒤에 B가 나타남
?......물음표......한번 나타날 수 있음........A?.........A가 나타나지 않거나 나타날 수 있음
.......기호 없음...반드시 한번 나타남.........A..........A가 반드시 나타남
*......별표........여러 번 나타날 수도 있음...A*.........A가 없을 수도 있고 여러번 나타날 수도 있음
+......덧셈........최소 1번 이상 나타남.......A+.........A가 반드시 있어야 하고 여러번 나타날 수 있음
( )....괄호........그룹 요소..................(A|B), C...A나 B 중 하나가 반드시 나타나야하고 그 뒤에 C가 나온다
--------------------------------------------------------------------------------------------------------
- 주의사항:
(1) ELEMENT의 name과 데이터 유형 사이에는 반드시 공백이 있어야 한다. (예: <!ELEMENT AAA (#PCDATA)> )
(2) 데이터 유형 뒤에 붙을 수 있는 ?, *, + 기호는 반드시 붙여서 써야 한다. (예: <!ELEMENT XXX (AAA+)> )
- 참조1:
<![CDATA[ '텍스트 문자열' ]]> : 파싱하지 않고 그대로 표시한다. (< 및 > 그리고 & 문자도 그대로 표시한다.)
#PCDATA : 파싱하여 표시한다. (< 및 > 그리고 & 문자들은 표시할 수 없다.)
- 참조2:
PCDATA에서 &#[code];를 표시하려면 & => &, # => #, [ => [ 이므로 &#[code[ 로 써야 함.
3. ATTLIST(속성 유형) 선언
AttType ::= StringType | TokenizedType | EnumeratedType
StringType ::= 'CDATA'
TokenizedType ::= 'ID' | 'IDREF' | 'IDREFS' | 'ENTITY' | 'ENTITIES' | 'NMTOKEN' | 'NMTOKENS'
EnumeratedType ::= NotationType | Enumeration
NotationType ::= 'NOTATION' S ' (' S? Name (S? '|' S? Name)* S? ')'
Enumeration ::= ' (' S? Nmtoken (S? '|' S? Nmtoken)* S? ')'
1) ATTLIST의 기본값
DefaultDecl ::= '#REQUIRED' |?#IMPLIED' | ( ('#FIXED' S)? AttValue)
- 예제:
<!ATTLIST termdef
id ID #REQUIRED
name CDATA #IMPLIED>
4. ENTITY (개체) 선언
EntityDecl ::= GEDecl | PEDecl
GEDecl ::= '<!ENTITY' S Name S EntityDef S? '>'
EntityDef ::= EntityValue | (ExternalID NDataDecl?)
- 외부 개체 선언
ExternalID ::= 'SYSTEM' S SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral
NDataDecl ::= S 'NDATA' S Name
- 파라미터 개체 선언
PEDecl ::= '<!ENTITY' S '%' S Name S PEDef S? '>'
PEDef ::= EntityValue | ExternalID
- 예제:
+ 문자 선언:
<!ENTITY lt "<">
<!ENTITY gt ">">
<!ENTITY amp "&">
<!ENTITY apos "'">
<!ENTITY quot """>
+ 내부 개체 선언:
<!ENTITY author "Lee Keum-mo">
+ 외부 개체 선언:
<!ENTITY ex SYSTEM "ex1.jpg" NDATA jpg>
<!ENTITY tutorial1 SYSTEM "tutorial1.xml">
<!ENTITY HTML.Version PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+ 파라미터 개체 선언:
<!ENTITY % content "#PCDATA|body">
<!ENTITY % basic SYSTEM "basic.dtd">
5. 개체 참조
Reference ::= EntityRef | CharRef
EntityRef ::= '&' Name ';'
CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'
PEReference ::= '%' Name ';'
1) 사용
- 예제:
<div> 저자: &author; ... </div>
2) 파라미터 개체 참조
참조: %content; %basic; 처럼 %를 붙여서 사용한다.
- 예제:
<!ELEMENT distribution (reply-to, from, to, cc subject, date, organization)>
를 파라미터 개체를 이용하여 다시 쓰면,
<!ENTITY % addr "reply-to, from, to, cc">
<!ENTITY % auth "subject, date, organization">
<!ELEMENT distribution (%addrl;, %auth;)>
'Tech: > XML·XSL' 카테고리의 다른 글
XMLHTTP 사용시 주의사항 (0) | 2008.06.26 |
---|---|
DOM(2) (0) | 2008.06.26 |
DOM(1) (0) | 2008.06.26 |
XSL 기본문법(1) (0) | 2008.06.26 |
XML 기본개념 (0) | 2008.06.26 |