XML은 주석으로서 하나의 문법만 제공한다.
<!-- 내용 -->
주의할 점은 주석의 내용 중에 '--' 가 있어서는 안된다는 점이다.
스페이스 #x20, 탭 #x9, 캐리지 리턴 #xd, 라인 피드 #xa 등은 공백문자로서 이들 문자들은 공백문자 하나로 취급된다. 즉 여러 번의 탭과, 공백이라도 결국은 한번 뛰어쓴 것 처럼 출력된다는 의미이다.
CDATA(Character Data)와 비교되는 것으로는 PCDATA(Parsed Character Data)가 있는데, PCDATA는 해석된 문자 데이터라는 의미 그대로 XML 해석기에 의해 문자열 내부에 해석가능한 데이터들이 모두 처리되어 출력되어진다. CDATA는 해석기를 통하지 않고 바로 출력되기 때문에, 기술한 그대로 출력된다. 예를 들어 PCDATA에서 여러번 중복된 공백문자열은 하나의 공백으로 대체되는데, CDATA로 출력하게 될 경우, 모든 공백과 태그, 엔티티 등의 참조 값들이 그대로 출력된다.
<!-- CDATA 작성하기 -->
<![CDATA[ 내용 ]]>
XML에서 새로운 마크업 언어를 DTD를 이용하여 작성하게되는데, 이 DTD를 XML문서 내부 또는 별도의 파일로 둘 수 있게 된다. 보통 DTD는 별도의 파일로 작성되며 다수의 xml문서가 하나의 DTD를 참조하는 형태를 띠게된다.
다음은 외부 DTD의 예제이다. 보통 xml을 이용하여 마크업언어를 작성할 때는, 외부 DTD를 이용하게 된다.
<?xml version="1.0"?>
<!-- DTD 선언 -->
<!DOCTYPE booklist SYSTEM "booklist.dtd">
<!-- 루트엘리먼트 시작 -->
<booklist>
<book>
내용
</book>
</booklist>
DOCTYPE라는 엘리먼트를 이용하여 DTD를 선언하게 되는데, DOCTYPE 사용 문법은 다음과 같다.
- PUBLIC DOCTYPE 식별자
<!DOCTYPE 최상위엘리먼트명 PUBLIC
"(비공인||공인 기관)//DTD 개발 기관 이름//DTD명 및 버전//사용된 언어"
"DTD문서의 경로">
- SYSTEM DOCTYPE 식별자
<!DOCTYPE 최상위엘리먼트명 SYSTEM
"DTD문서의 경로">
실제로 DOCTYPE선언 예제는 다음과 같다.
<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<!DOCTYPE booklist SYSTEM "booklist.dtd">
내부 DTD를 사용하는 경우는 대부분 몇몇 규칙을 새로이 또는 다시 정의 하기 위해서 사용된다. 재정의할 내용은 위에서 설명한 DOCTYPE엘리먼트에서 닫기태그 전에 대괄호('[', ']')안에다 재정의 내용을 기술 하면 된다. 다음은 내부 DTD의 예제이다.
<?xml version="1.0"?>
<!-- 내부 DTD 시작 -->
<!DOCTYPE booklist [
<!--DTD내용 기술 (보통 재정의할 내용 기술)-->
<!ELEMENT booklist (book)+>
<!ELEMENT book (#PCDATA)>
]>
<!-- 내부 DTD 끝 -->
<?xml version="1.0"?>
<!-- 내부 DTD 시작 -->
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml" [
<!--DTD내용 기술 (보통 재정의할 내용 기술)-->
......................
]>
<!-- 내부 DTD 끝 -->