XML에서 CDATA란 무엇인가?
★프로그래밍/HTML, CSS, JS, XML :: 2016. 8. 19. 17:41XML 문서를 보면 가끔 <![CDATA[ ... ]]> 이런 처리가 되어 있는 것을 볼 수 있습니다.
그럼 이 CDATA라는 게 과연 무엇인가 하는 궁금증이 드실 분도 계실 텐데요...
일단 CDATA가 무슨 뜻이냐 하면, 그것은 바로 'Character Data'. 즉, '문자 데이터'를 말하는 것입니다. 그런데 이 용어를 좀 더 정확하게 말하면 '(Unparsed) Character Data'. 즉, '파싱하지 않는 문자 데이터'라는 뜻입니다. 반대로, 파싱하는 문자 데이터는 'PCDATA'라고 부릅니다.
이게 왜 있는지 궁금하다면, 일단 다음 XML 문서를 봅시다.
<?xml version="1.0" encoding="UTF-8"?> <dictionary> <term> <entry>볼드</entry> <description>글씨를 굵은 글씨로 강조한다. <b>...</b> 태그를 사용한다. <b> 대신 <strong>을 사용해도 된다.</description> </term> </dictionary>
이 XML 파일에 무슨 문제가 있는 것일까요? 그래서 XML 파싱 프로그램을 써서 이 XML 파일대로 텍스트를 출력하게 해 보면,
볼드 글씨를 굵은 글씨로 강조한다. ... 태그를 사용한다. 대신 을 사용해도 된다.
이렇게 출력될 것입니다. 그런데 뭔가 이상합니다. 마땅히 들어가야 할 부분이 몇 군데 빠져 있습니다.
<b>, </b>, <strong> 이 세 개가 온데간데없습니다. 왜 그런 것일까요?
이유는 간단합니다. XML 파서가 <description>...</description> 내용도 어김없이 파싱할 대상으로 인식하기 때문입니다. 즉, 안에 있는 <b>와 <string>도 태그로 인식해 버려서 제대로 출력이 되지 않습니다.
그러면, 이를 막으려면 어떻게 하면 될까요? HTML 태그라면 < 대신 <, > 대신 >를 쓰면 되겠지만 XML에서는 더 좋은 방법이 있습니다. 당연히 <description> 안의 내용은 파싱할 수 없게 만들면 됩니다.
<?xml version="1.0" encoding="UTF-8"?> <dictionary> <term> <entry>볼드</entry> <description><![CDATA[글씨를 굵은 글씨로 강조한다. <b>...</b> 태그를 사용한다. <b> 대신 <strong>을 사용해도 된다.]]></description> </term> </dictionary>
이렇게 고치고 다시 한 번 파싱해 봅시다.
볼드 글씨를 굵은 글씨로 강조한다. <b>...</b> 태그를 사용한다. <b> 대신 <strong>을 사용해도 된다.
이제서야 제대로 나오네요.
이렇듯 <![CDATA[ ... ]]>는 안에 들어가는 텍스트가 파싱되지 않게 하는 기능을 합니다. 이는 파서가 잘못 파싱할 수 있는 텍스트를 다룰 때, 파서의 잘못된 파싱을 방지할 수 있게 하는 것입니다. 예를 들자면 HTML 태그를 텍스트 데이터로 쓴다거나 할 때 등을 들 수 있겠습니다.
많은 도움 되셨나요?
유용한 정보로 활용하시기 바랍니다.