[XML] 개념 및 기본 문법
< XML의 개념 >
XML(eXtensible Markup Language, 확장성 마크업 언어)
: HTML 같은 고정된 형식이 아닌 확장이 가능한 언어이다. HTML은 태그가 한정되어 있는 반면 XML은 문서의 내용에 관련된 태그를 사용자가 직접 정의할 수 있으며 그 태그를 다른 사람들이 사용하도록 할 수 있다. XML은 본질적으로 다른 언어를 기술하기 위한 언어, 즉 메타언어이다.
[1] document ::= prolog element Misc*
[22] prolog ::= XMLDecl? Misc* (doctypedecl Misc*)?
[23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'
[24] VersionInfo ::= S 'version' Eq (' VersionNum ' | " VersionNum ")
[3] S ::= (#x20 | #x9 | #xD | #xA)+
[25] Eq ::= S? '=' S?
[26] VersionNum ::= ([a-zA-Z0-9_.:] | '-')+
[27] Misc ::= Comment | PI | S
[15] Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'
<!-- comment --> (O)
<!-- com-me-nt --> (O)
<!-- com- -me-nt --> (O)
<!-- com--me-nt --> (X) 설명문내에 연속된 '--' 사용 불가!!
[39] element ::= EmptyElemTag | STag content ETag
[44] EmptyElemTag ::= '<' Name (S Attribute)* S? '/>'
<태그명 속성명1="속성값" 속성명2="속성값" />
===============================================================
< XML문법정리 > ---> well-formed(잘 구성된) XML문서!!
1. 최소 한개이상의 element를 가져야 함.
test.xml ===> <A/>
2. 문서 전체를 감싸는 한 개의 엘리먼트(Root Element)가 있어야 함.
test.xml ===> <A/>
<B/>
===> (X)
test.xml ===> <ROOT>
<A/>
<B/>
</ROOT>
===> (O)
3. 시작태그가 있다면 그것에 매핑되는 끝태그가 반드시 존재해야 함.
태그종류)
- 시작태그 <person>
- 끝태그 </person>
- 빈태그 <person/>
예)
<root>
<br>
</root>
===> (X)
<root>
<br></br>
</root>
===> (O)
<root>
<br/>
</root>
===> (OO)
4. XML은 대소문자를 구분
<person> </Person> (X) ---> 끝태그 없음 에러 발생!!
<person> </person> (O)
5. 엘리먼트는 꼬이면 안된다.
<a>
<b></b>
<c></c>
</a>
----> (O) b,c엘리먼트(자식)는 a엘리먼트(부모)에 포함됨.
<a>
<b></b>
<c>
</a>
</c>
----> (X) a,c엘리먼트 누가 부모이고 자식인지 알 수 없음 : 에러!!
6. xml선언은 전체 생략가능하나 선언하는 것을 권장
<?xml version='1.0' encoding='UTF-8' ?>
===> version은 생략 불가
===> version속성을 먼저, encoding속성은 나중에 기술.
===> '<?xml' 앞에 공백(whitespace)을 쓰면 안됨!!!
7. 태그의 내용(content)에 제한된 문자가 있다.
===> '&' '<' ']]>'
===> 사용하면 에러
===> 해결책)
- 제한된 문자를 replace()메소드로 변환
replace('<','<')
- CDATA섹션을 사용
속성값에 제한된 문자.
===> '&' '<'
8. 속성값은 반드시 인용부호(작은 따옴표, 큰 따옴표)를 사용.
9. 서로 다른 속성은 반드시 공백을 통해 구분
<table border=1 cellpadding="5"> (X) 인용부호 없음
<table border='1'cellpadding="5"> (X) 속성명앞에 공백없음
<table border='1' cellpadding="5"> (O)
<table border='1'
cellpadding="5"> (O)
10. 주석문(설명문,comment)에 제한된 문자
===> '--'
<!-- c-o-m-m-e-n- -t --> (O)
<!-- comm--ent --> (X)