저자: 앤소니 커츠(Anthony Coates) 재렐라 렌돈(Zarella Rendon) 역 김대곤
서론
이미 HTML에서는 수많은 특수문자를 제공하고 있다. 예를 들어 공백 입력에는 " ", copyright 기호에는 "©", 유럽의 새로운 통화인 유로의 기호 입력에는 "€"를 사용한다. 그러나 XML에서는 이와 같은 대부분의 기호들이 자동적으로 정의되지 않는다. 다시 말해 XML은 이를 제공하지 않는다는 이야기이다. 이러한 기호들을 사용하기 위해서는 기호들을 정의한 DTD를 사용하거나 문서 내에 있는 내부 DTD 섹션에서 이 기호들을 따로 정의해서 사용해야 한다. 둘 중 어떤 방식을 선택하든지 XML문서 안에 DOCTYPE 선언하는 것을 피할 수는 없다. DOCTYPE의 사용은 well-formed만을 필요로 하는 XML문서에서는 적합하지 않다. 이러한 경우 DTD는 효과없는 작업만 늘일 뿐이다.
특히 XML 유효성을 검사하는 몇몇 도구들은 자주 DOCTYPE 선언이 있다는 사실을 DTD를 이용하여 유효성을 검사해야 한다는 의미로 해석한다. 만약 유효성 검사를 위해 W3C의 XML 스키마를 사용하고 오직 특수문자를 사용하기 위해 DOCTYPE을 필요로 하는 경우에 문제가 발생하게 된다. 즉, 유효성 검사에서 예상치 못한 결과를 얻게 된다. 이러한 문제는 XML초보자에게 많은 시간적 낭비를 초래할 수 있는 문제 중에 하나다.
Xml-dev 메일링 리스트
최신판에서 W3C의 Core Working Group은 "XML은 특수문자를 제공하기 위한 새로운 매커니즘을 필요로 하지 않는다"는 의견을 표시했다. 그들은 "특수문자를 사용하기 바란다면, DTD에 정의하거나 내부 DTD섹션에서 정의하면 된다"고 말했다. 그러나 이에 대해 팀 브레이(Tim Bray)는 새로운 대안을 제시했다. "특수문자에 사람이 읽기 쉬운 이름을 부여하는 올바른 방법은 특수문자을 위한 요소(Element)를 만드는 것이다." 이러한 방법은 특수문자를 정의한 요소를 마지막에 처리해서 적합한 기호로 치환할 수 있도록 한다. 이러한 접근방식의 단점은 속성(Attribute)이 아닌 요소 (Element)의 내용(Content)으로 처리해야 한다는 것이다. 어쨌든 간에 이러한 방식은 DTD나 DOCTYPE이 필요없는 순수한 well-formed XML로 작업할 수 있도록 해준다.
Xmlchar XSLT library
앞에서 언급한 팀 브레이에 따르면
xmlchar는
HTML 4.0에 정의된 모든 특수문자에 대해 각각 XML 요소(Element)를 제공하는 XSLT 라이브러리이다. 예를 들어 아래의 파일은 영국 화폐 단위인 파운드 기호(£)와 유럽의 통화인 유로 기호(€)를 위한
xmlchar 요소를 포함하고 있다. 또 문장과 문장 사이에 두 칸의 공백을 입력하기 위해 공백문자를 사용했다.
My sandwich cost <ch:pound/>2.
Really?<ch:nbsp/> You were cheated.<ch:nbsp/>
My sandwich only cost <ch:euro/>2.