CDATA 섹션[XML 표준]

tip 2013.04.27 12:43

[출처] 

http://msdn.microsoft.com/ko-kr/library/ms256076(v=vs.80).aspx

http://insidesearch.tistory.com/entry/XML-CDATA-Section-%EB%8B%A4%EB%A3%A8%EA%B8%B0

 

CDATA 섹션에서는 CDATA 섹션에 의해 포함된 문자에 태그가 없음을 파서에 알릴 수 있습니다. 그러면 태그 문자가 나타날 수 있지만 태그가 필요하지 않은 섹션을 포함하는 문서를 훨씬 쉽게 만들 수 있습니다. CDATA 섹션은 일반적으로 스크립트 언어 내용과 샘플 XML 및 HTML 내용에 사용됩니다.

문서 구조에서 CDATA 섹션은 다음 구문을 사용합니다.

<![CDATA[An in-depth look at creating applications with XML, using <, >,]]>

XML 파서에서 초기 <![CDATA[를 발견한 경우 이를 요소나 엔터티 태그로 해석하지 않고 문자로 뒤에 나오는 내용을 보고합니다. 문자 참조는 CDATA 섹션에서 사용할 수 없습니다. 끝에 ]]>가 있을 경우 파서는 보고를 중지하고 일반 구문 분석으로 돌아갑니다.

예를 들어, 다음 CDATA 섹션 중 하나를 XML 문서에 포함할 수 있습니다. 이때 파서에서는 오류를 보고하지 않습니다.

 
<![CDATA[</this is malformed!</malformed</malformed & worse>]]>
<![CDATA[if (c<10)]]>

 

참고

CDATA 섹션 내의 내용은 XML 내용에 허용되는 문자 범위 내에 있어야 합니다. 제어 문자 및 호환 문자는 이러한 방법으로 이스케이프할 수 없습니다. 또한 ]]> 시퀀스는 섹션의 끝을 알리기 때문에 CDATA 섹션 내에 이 시퀀스를 표시할 수 없습니다. 즉, CDATA 섹션은 중첩될 수 없습니다. 일부 스크립트에서는 이 시퀀스가 표시됩니다. 스크립트 내에서는 일반적으로 ] ]>]]>를 대체할 수 있습니다

 

파싱 오류를 해결하려면 CDATA 섹션안에 들어가면 안되는 unicode range를 print문으로 XML을 덤프할 때 제거해야 한다. 이 unicode range는 XML 스펙 1.0에 다음과 같이 명기되어 있다.

Character Range
[2]   Char    ::=   #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */


CDATA Sections
[18]   CDSect    ::=   CDStart CData CDEnd
[19]   CDStart    ::=   '<![CDATA['
[20]   CData    ::=   (Char* - (Char* ']]>' Char*))
[21]   CDEnd    ::=   ']]>'


위를 보면 CDATA 섹션안의 문자열에는 2가지 들어가지 말아야 하는 조건이 있다.

첫째. CDATA 종료열인 ']]>' 문자열이 들어가면 안된다.
둘째. 유니코드 문자만 포함되어야 한다. 특히, 제어문자들은 포함되지 말아야 한다. 

'tip' 카테고리의 다른 글

XML: CDATA Sanitize?  (0) 2013.04.27
http, https 혼용 Ajax 레이어팝업 로그인과 처리  (0) 2013.04.27
CDATA 섹션[XML 표준]  (0) 2013.04.27
svn merge  (0) 2013.04.27
윈도우 7에서 인터넷 연결이 안되다  (0) 2013.04.27
개발환경 설치  (0) 2013.04.27
Trackback 0 : Comment 0