참고 : http://www.cafeconleche.org/books/effectivexml/chapters/03.html , http://en.wikipedia.org/wiki/C0_and_C1_control_codes
XML을 쓰다보면 1.1버전이 존재하는데 왜 1.0만을 쓰는걸까 라는 의문이 들었던게 생각나서 정리해 봅니다.
XML 1.1에 대해 알아야 할 모든것은 다음 두가지로 요약될 수 있다.
- 사용하지 마시오.
- (전문가 한정)혹시 몽고어, 일본 메이지 시대에 사용되다 없어진 Yi음절, 캄보디아어, 암하라어, 몰디브어, 버마어 또는 일부 다른 소수언어로 이야기 하고 있거나 이런 언어를 이용해서 마크업(일반 텍스트가 아닌 마크업임)을 표기하길 원한다면 XML 버전 선언부 속성을 1.1로 설정할 수 있다. 만약 그게 아니라면 첫번째 규칙으로 돌아가시오.
XML 1.1은 다음에 나오는 여러가지를 행하며 이들 중 극히 제한적으로 몇몇 개발자들에게 유용한 것도 있겠지만 대부분의 경우 사용하는것에 있어 유익하지 않다.
- 네임 문자열(예를 들면 엘리먼트명, 어트리뷰트명, 엔티티명 등등)에 대해 문자열 셋을 확장할 수 있게 한다. 이는 잠재적으로 문서를 이해하기 힘들게 한다.
<?xml version="1.0" encoding="UTF-8"?>
<book>
<title>የማቴዎሰ ወንጌል</title>
<chapter number="፩">
<title>የኢየሱሰ የትው ልድ ሐረግ</title>
<verse number="፩">
የዳዊት ልጅ፣ የአከርሃም ልጅ የሁ ነው የኢየሱሰ ከርሰቶሰ የትው ልድ ሐረግ የሚከተለው ነው፤
</verse>
<verse number="፪">
አከርሃም ይሰሐቅነ ወለደ፤
ይሰሐቅ ያዕቆብነ ወለደ፤
ያዕቆብ ይሁዳነና ወነድሞቹነ ወለደ፤
</verse>
</chapter>
</book>
이랬던 것이
<?xml version="1.1" encoding="UTF-8"?>
<መጽሐፋ>
<አርእስት>የማቴዎሰ ወንጌል</አርእስት>
<ምዕራፋ ዌጥር="፩">
<አርእስት>የኢየሱሰ የትው ልድ ሐረግ</አርእስት>
<ቤት ዌጥር="፩">
የዳዊት ልጅ፣ የአከርሃም ልጅ የሁ ነው የኢየሱሰ ከርሰቶሰ የትው ልድ ሐረግ የሚከተለው ነው፤
</ቤት>
<ቤት ዌጥር="፪">
አከርሃም ይሰሐቅነ ወለደ፤
ይሰሐቅ ያዕቆብነ ወለደ፤
ያዕቆብ ይሁዳነና ወነድሞቹነ ወለደ፤
</ቤት>
</ምዕራፋ>
</መጽሐፋ>
이렇게도 쓸 수 있게됨 -_-;
- 폼피드, 수직탭, BEL 그리고 DC1에서 DC4의 C0 제어 문자들(NUL 제외)들이 XML 문서 상에서 일반 문자 처럼 이스케이프 되어 인식된다. 하지만 정말 의미 없는 기능중 하나다.
- C1 제어 문자들(NEL 제외)은 반드시 이스케이프 된 문자이어야 한다. XML 1.1이 상위셋이 아닌데다가 XML 1.0과 상호 호환성 또한 유지되지 않는 문제가 있음 (원문의 예시 참고)
- NEL(2바이트의 CR LF를 단일바이트로 대체하는 문자)을 XML 문서에서 사용할 수 있지만 LF로 파싱됨. IBM의 메인프레임에서나 사용하던 문자로 일반적인 다른 시스템의 에디터에서 열 경우 엉망진창인 문서를 볼 수 있게된다. (원문의 예시 참고)
- 파서는 아마도(꼭 그럴 필요가 있는건 아니지만) 유니코드 데이터가 정규화 되지 않았다고 클라이언트 어플리케이션에 알릴것이다. 유니코드에서는 동일한 문자가 다른코드 에서도 제공되는 케이스가 있는데 이럴 경우 XML1.1에선 더블케릭터가 아닌 싱글케릭터를 사용해야만 한다.
- 네임스페이스 접두어가 불명확 할 수 있다. 실제로 사용할 일이 거의 없을 뿐더러 XML1.1과의 호환성을 유지하기 위한 부대비용이 많이 들게된다. (원문의 예시 참고)
Author Details
Linus Lee aka y1sh former ATiMania.com sysop during 2001-2012.
DevSecOps Engineer who likes tech, science, programming and solving problems 🙂