상세 컨텐츠

본문 제목

XML 기초 2

Web Development/Others

by thankee 2008. 9. 10. 21:50

본문

엘리먼트

  • XML문서의 엘리먼트영역을 구성하는 요소들을 Element라고 하며, 모든 XML문서는 반드시 단 하나의 루트 엘리먼트를 필요로 한다.
  • 엘리먼트는 자식엘리먼트를 가질 수 있고, 엘리먼트 스스로 부가적인 정보를 나타내기 위해 속성(attribute)를 가질 수 있다.
  • 엘리먼트는 시작태그와 끝태그로 구성이 되며, 시작과 끝태그 사이에 내용(Content)가 오게 된다. 문자열 또는 다른 엘리먼트가 자식으로서 사용될 수 있다.
  • 엘리먼트는 반드시 내용을 가지지 않아도 되며, 이를 빈 엘리먼트라고 한다. 시작태그와 끝태그 사이에 아무 내용을 넣지 않아도 되지만, <엘리먼트명 />로 간단하게 표현할 수 도 있다.
  • 태그 작명 규칙
    • 첫글자는 문자(숫자 제외)나 '_' 문자로만 시작할 수 있다.
    • 특수 문자로는 두번째 글자 부터 '_', '-', '.', ':' 등을 사용할 수 있다.
    • 공백은 허용되지 않는다.
    • 대소문자를 구분한다.
    • 태그명은 xml로 시작할 수 없다.

주석

XML은 주석으로서 하나의 문법만 제공한다.

<!-- 내용 -->

주의할 점은 주석의 내용 중에 '--' 가 있어서는 안된다는 점이다.

공백 문자열과 CDATA섹션

스페이스 #x20, 탭 #x9, 캐리지 리턴 #xd, 라인 피드 #xa 등은 공백문자로서 이들 문자들은 공백문자 하나로 취급된다. 즉 여러 번의 탭과, 공백이라도 결국은 한번 뛰어쓴 것 처럼 출력된다는 의미이다.

CDATA(Character Data)와 비교되는 것으로는 PCDATA(Parsed Character Data)가 있는데, PCDATA는 해석된 문자 데이터라는 의미 그대로 XML 해석기에 의해 문자열 내부에 해석가능한 데이터들이 모두 처리되어 출력되어진다. CDATA는 해석기를 통하지 않고 바로 출력되기 때문에, 기술한 그대로 출력된다. 예를 들어 PCDATA에서 여러번 중복된 공백문자열은 하나의 공백으로 대체되는데, CDATA로 출력하게 될 경우, 모든 공백과 태그, 엔티티 등의 참조 값들이 그대로 출력된다.

<!-- CDATA 작성하기 -->
<![CDATA[  내용  ]]>

내부DTD Subset와 외부 DTD Subset

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문서의 경로"
>

  • 'PUBLIC' 또는 'SYSTEM' 식별자의 차이점 : 공개되에 누구나 사용되는 DTD문서일 경우 PUBLIC를 사용하고, 내부적으로, 제한적으로 사용되는 DTD의 경우 SYSTEM 키워드를 사용하면된다.
    '최상위엘리먼트명'
    의 경우 굳이 최상위 명과 일치하지 않더라도 에러를 야기하지 않으나, 일치시키는 것이 권장된다.
  • '(비공인||공인 기관)'의 위치에는 DTD문서를 개발하고 관리하는 기관이 국제적으로 공인되었는지 아닌지에 따라, '+'혹은 '-'기호를 사용하면된다. 공인된 단체에서 작성된 DTD일 경우 '+', 비공인기관의 DTD일 경우 '-'이다.
  • '문서작성에 사용된 언어'의 경우 DTD문서가 작성된 언어의 국가 명을 기술하는 것으로서, 예를들어 영어로 작성된 경우 EN(대부분의 경우 해당)이 된다.
  • 'DTD주소'는 실제 DTD 문서의 경로가 위치하는 곳이다. PUBLIC DOCTYPE 식별자에서는 'DTD문서의 경로'가 생략될 수 도 있지만, 애플리케이션이나 브라우져에서 PUBLIC 식별자를 제대로 인식하지 못하는 경우를 대비하여 '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 끝 -->

관련글 더보기