Well-formed XML DocumentWell-formed XML Document

Posted at 2009. 1. 23. 22:36 | Posted in 프로그래밍 언어/XML
> Well-formed XML

Well-formed XML이란 xml 문법을 지킨 xml 문서를 의미한다.
비슷한 것으로 Valid XML Document가 있다. 이는 Well-Formed XML이면서, 즉 XML 문서의 문법을 전부 지킨 문서이면서 DTD, XML Schema등으로 정의된 문서의 구조까지 지킨 문서이다.
만약 XML 문서를 지키지 않았다면(Well-Formed하지 않다면) XML Parser는 Fatal Error를 발생시키고 파싱을 중단한다. 그리고 만약 문법은 지켰으나 DTD, XML Schema등으로 정의된 문서의 구조를 지키지 않았다면 ERROR를 발생시킨다. 이 경우 Parser는 끝까지 문서를 파싱한다.

그러면 XML 문법 몇 가지를 이 XML 문서 예제를 기반으로 설명을 하겠다

<?xml version="1.0" encoding="utf-8"?>

<!-- XML MULTIPLE LINE COMMENTS -->
<bookstore>
    <book category="CHILDREN">
        <title>Harry Potter</title>
        <author>J K. Rowling</author>
        <year>2005</year>
        <price>29.99</price>
    </book>
    <book category="WEB">
        <title>Learning XML</title>
        <author>Erik T. Ray</author>
        <year>2003</year>
        <price>39.95</price>
    </book>
</bookstore>


> XML Declaration - XML 문서 정의

<?xml version="1.0" encoding="utf-8" standalone="[yes|no]"?>
현재 text파일이 XML 문서임을 나타내는 문장이다. 문서의 가장 처음에 작성해야 하는 문장으로 세 가지 속성을 순서대로 표기해야 한다.
version 속성은 반드시 들어가 있어야 하는데 이는 XML 문법이 ver.마다 달라서 XML Parser가 이 문서를 파싱할 때 참조해야 하기 때문이다.
standalone="yes"는 이 문서가 외부파일을 참조하지 않고 있다는 것을 의미한다.


> XML Element
    <book category="CHILDREN">
            <title>Harry Potter</title>
    </book>

Element(<book>)는 또 다른 element (<title>)나, Text(Harry Potter), attribute(category="CHILDREN")를 여러 개 가질 수 있다. element의 이름은 ID값이 아닌 단지 이름이기 때문에 중복이 되어도 상관 없다. 파일 타입이 utf-8일 경우 한글이름도 지원한다.(위의 xml encoding 말고 파일 저장 타입)
XML 문서는 최상위 element가 반드시 단 한 개 존재해야 한다. 그리고 시작태그(<title>)와 끝 태그(</title>의 이름이 일치해야 한다. 차이점은 끝 태그에는 element의 이름 앞에 /가 들어간다는 것 뿐이다. 또한 <A><B>text</A></B> 처럼 중첩된 구조는 가질 수 없다. Empty Element라는 것이 있다. 이는 Element가 element나 text를 가지지 않은 경우를 말한다.(속성은 가지고 있어도 되..나?) 이 경우 표현이 <empty></empty> 가 되겠고 줄여서 <empty/>로 표현한다.끝 태그와 다르게 /가 뒤에 붙어있음에 주의.


> XML Element - Naming

문자 숫자 _ . : - 가 사용 가능하다. 대소문자를 구별하므로 <upper>와 <Upper>는 다른 이름의 element이다. element의 이름에 공백이 들어가선 안 되고 첫 글자로 숫자 . - 가 와선 안 되며 xml이란 글자가 대소문자 형태 막론하고 와선 안 된다. :, -, .는 element 이름의 중간에 선언 가능하나 다른 연산자와 헷갈리므로 되도록 사용하지 않도록 해야 한다.


> XML Text - PCDATA, CDATA

PCDATA는 XML 파서가 parsing을 시도하는 데이터로 <element></element>로 둘러쌓인 Text contents라 생각하면 되겠다.

<element>PCDATA!!</element>

따라서 <& 는 PCDATA에 올 수 없다. 이는 XML 문서에서 사용되는 keyword이기 때문이다. 이와 같은 값을 표시하기 위해선 두 가지 방법이 있다.
1. < 는 &lt;, & 는 &amp;, > 는 &gt;
    >는 써도 파싱에러는 나지 않지만 < 가 &lt;밖에 안 되므로 통일성 있게 사용해 주면 좋다
    예: <element>(7 &lt; 8) &amp;&amp; (9 &lt; 10)</element>
2. <![CDATA[ contents ]]>
    xml parser가 파싱을 시도하지 않는다. 따라서 다음과 같이 쓸 수 있다.
    <element><![CDATA[ (7 < 8) && (9 < 10)]]></element>
    단, CDATA 구간 내에 ]]>가 오면 안 된다. <![CDATA[CDATA 구간]]> PCDATA 구간]]> 이 아니다. 그냥 parsing error 뜬다.


> XML Attribute

<book category="CHILDREN">

element에 대한 설명, metadata of metadata라 할 수 있다. 형태는 attr_name = "attr_value(쌍따움표)" 혹은 'attr_value(따움표)'을 사용하고 그 값으로 <&를 가질 수 없다. 속성은 element처럼 여러개가 가능하나 같은 이름의 속성을 가질 수 없다. <book category="children" category="IT"> 가 불가능하단 의미이다. 하지만 xml 문서는 대소문자를 구분하기 때문에 <book category="children" Category="IT"> 식으로 쓸 수는 있지만 좋지 않다.

속성에서 따움표 "를 표현하는 방법으로는 &quot;를 사용하거나 속성값을 작은따움표 ' 로 묶는 방법이 있다..
<book category=" &quot;WEB&quot; app. ">
<book category=' "WEB" app. '>
그러나 html에서 사용하던 방법인 <book category="\"WEB\" app.">는 허용되지 않는다.


> XML 주석

html에서 사용하던 주석과 같다.
<!-- 주석내용 -->
주석내용으론 < & 등 어떤 것도 올 수 있으나 -- 는 올 수 없다.


> Processing Instructions
<?PI_name PI_data?>
예를 들면 <?Query SELECT * FROM table_name?>로 app.에게 어떤 일을 하도록 명령하기 위한 용도. 많이 쓰이지는 않는다.
   

//

XML이 뭐임?XML이 뭐임?

Posted at 2009. 1. 23. 21:03 | Posted in 프로그래밍 언어/XML
XML은 Extensible Markup Language의 약자로 데이터를 저장하고 전송하는 데 목적을 갖고 있다.

<letter>
    <to>to name</to>
    <from>from name</from>
</letter>


HTML vs. XML

HTML하고 비슷한 모양이지만 HTML과 XML은 목적이 다르다. HTML데이터를 어떻게 보여줄 것인가에 중점을 두고 있다. HTML 태그들 마다 브라우저가 브라우징하는 모습이 다른 것을 보면 알 수 있다. 그에 반해 브라우저로 암만 여러 형태의 XML 문서를 열어 봤자 그 형태는 똑같다. 이는 XML은 문서에 기술된 데이터가 무엇인가에 중점을 두고 있기 때문이다.


특징

XML 문서에 쓰이는 태그들은 작성자가 직접 정의할 수 있다. 어떤 이름을 써도 상관 없지만 XML 문법에서 정의한 naming 규칙을 따라야 한다. 또한 XML문서는 TEXT 파일이다. Text 파일은 ASCII로 구성되어 HW, SW에 독립적이기 때문에 여러 app.에서 부담 없이 처리 가능하다. 즉 보편성이 특징이다. 이와는 다르게 Binary 파일은 파일의 구조 정의가 사용되는 app.마다 다르지만 해당 app.가 빠르게 이해할 수 있다는 효율성이 장점이다.

이와 같은 특징 때문에 다음과 같은 일이 가능하다
<letter>
    <to>to name</to>
    <from>from name</from>
</letter>

이 문서에
<letter>
    <date>2009/01/21</date>
    <to>to name</to>
    <from>from name</from>
</letter>

이럴 경우 binary 파일이라면 해당 파일이 사용되는 app.라 하더라도 구조가 달라졌기 때문에 파싱 과정에서 에러가 날 가능성이 매우 높다. 하지만 XML 문서는 text 파일이기 때문에 보편적인 XML Parser를 사용하더라도 에러가 발생하지 않는다.
//