상세 컨텐츠

본문 제목

[디지털도서관구축록] 3. XML & DTD(Schema)

수업노트

by ∫2tdt=t²+c 2013. 10. 21. 17:31

본문


XML

등장

읽기 쉽고, 모호하지 않으며, 확장가능하고, 플랫폼 독립적이며, 구조화된 데이터를 텍스트로 표현하는 방법이 필요했다!

그때 썬마이크로시스템의 Jon Bosak이 XML을 고안하고, 이는 1998년에 W3C에 의해 공인됨

관련 기술: XML, XLink, XPointer, XFragments CSS, XSL, XSLT, DOM, XML Namespaces, XML Schemas


특징 : HTML의 간결함 SGML의 확장가능함

* HTML의 확장불가능한 태그셋에서 탈피

* 강력하지만 너무 복잡한 SGML을 단순화

* 사람도 기계도 쉽게 읽을수 있는 마크업랭귀지!

* 내용과 서식을 철저하게 분리함

* 확장성: 엘리먼트와 어트리뷰트를 정의할 수 있게함


구성요소

* XML: 실제 문서

* DTD(혹은 Schema): 문서의 형식을 정의하는 문서

* XSL: 문서가 어떻게 보여줄지 표현하는 문서


문법

* 빈 요소를 포함하여 모든 요소는 여는 태그와 닫는 태그로 구성됨. 여는 태그와 닫는 태그 사이에 일반 텍스트 혹은 다른 요소들을 포함할 수 있음

여는 태그: <name>

사이에 있는 내용물들

닫는 태그: </name>


* 요소 이름 규칙

xml로 시작하는 이름은 예약되어 있으니 요소 이름은 xml로 시작하면 안됨.

이름은 대소문자를 구분한다.

ns:element와 같이 네임스페이스를 앞에 명시할 수 있음. 생략하면 기본 네임스페이스에 포함됨



* 빈 요소일 경우 여닫는 태그를 합쳐서 하나로 표현가능

합쳐진 태그: <name /> (<name></name> 를 축약한 표현)


* 모든 속성들은 ""로 둘러싸여있어야함. key="value" 의 형태로 나타나며 여는 태그에 위치한다.

<name attribute="value" />

속성 중 xml:lang, xml:space는 예약되어있으므로 사용하지 말것


* 열고 닫는 태그들은 계층적으로 위치해야함

이딴건 안됨: <a><b></a></b>

이렇게 되어야함: <a><b></b></a>


* 최상위 요소는 반드시 유일해야함

최상위 요소 2개 이상이면 에러


* < > & ]]> 와 같은 문자를 표현하려면 이스케이프 시켜야함 : &amp; &lt; &gt; &quot; &apos;

* DTD가 없으면 모든 속성들은 기본적으로 CDATA타입으로 처리됨


* XML 선언 <?xml ~~?> : 문서 제일 앞에 나타나며, 이 문서가 XML문서라는걸 알려준다

사용 가능한 속성

* version: XML 버전

* encoding: 문자 인코딩

* standalone: 외부 자원의 지원 없이 단독으로 사용가능한지


* DTD 선언 <!DOCTYPE root-element (SYSTEM "uri")| (PUBLIC "name" "uri") > : 이 문서가 어떤 DTD를 사용하는지 표기한다


* 주석 <!-- 내용 --> : XML 선언 앞에 올수 없음. 태그 중간에 올수 없음. 주석으로 처리된 부분은 파서가 신경쓰지 않고 쿨하게 패스한다.


* CDATA: <![CDATA[ 내용 ]]> 안의 내용을 일반 텍스트로 처리하도록 함



DTD

* 어떤 요소가 사용가능하고, 그 요소는 어떤 속성을 가지며, 그 속성의 값은 어떤 타입인지를 정의함

<!ELEMENT endangered_species (animal*)>

<!ELEMENT animal (name , threats, weight?, length?, source, picture, subspecies )>

<!ELEMENT name (#PCDATA)>

<!ATTLIST name language (English | Latin) #REQUIRED>

<!ELEMENT threats (threat*)>

<!ELEMENT threat (#PCDATA)>

<!ELEMENT weight (#PCDATA)>

<!ELEMENT length (#PCDATA)>

<!ELEMENT source EMPTY>

<!ATTLIST source sectionid CDATA #REQUIRED newspaperid CDATA #REQUIRED>

<!ELEMENT picture EMPTY>

<!ATTLIST picture filename CDATA #REQUIRED

x CDATA #REQUIRED

y CDATA #REQUIRED>

<!ELEMENT subspecies (name , region, population)>

<!ELEMENT region (#PCDATA)>

<!ELEMENT population (#PCDATA)>

<!ATTLIST population year CDATA #REQUIRED>

눈치 빠르면 걍 이해가능할듯

*, , ? 는 정규식의 그 것들과 의미가 같음



* XML 문법이 아님. 확장 불가능, 네임스페이스 지원이 미비. 지원도 잘 안됨. 구닥다리. 최신 기술인 Schema를 이용하세요


Schema

* DTD보다 강력한 기능, 다양한 데이터 타입 지원, XML 문법, 많은 XML도구들이 지원함

* 사람이 직접짜는건 좀 많이 삽질이고. XML Spy, XML Notepad 등의 도구를 이용해 생성하세요



 

 DTD

 XML Schema

 문서 형태

 XML 문법이 아님

 XML 문법을 따름

 데이터 타입 지원

 미비

 string, decimal, boolean, date, time ... 다양한 타입 지원

 네임스페이스 지원 미비 지원

 확장성

 없음

 있음

 지원 여부

 지원하는 도구가 적음 지원하는 도구가 많음(XML Spy, XML Notepad)


관련글 더보기

댓글 영역