XML 투토리얼 W3C

공간정보 2017.12.24 12:06 Posted by 드론쟁이 푸른하늘이

이 글은 W3C 의 XML 투토리얼에 있는 내용을 간략히 정리한 것입니다. 

저는 현재 공간정보 표준들을 정리하는 중입니다. 지형지물목록이나 메타데이터 등의 많은 표준들이 XML 을 표준으로 사용하고 있기 때문에 어쩔 수 없이 이 글을 찾아보게 된겁니다. 

그런데... XML이 정보를 담기위한 목적이라는 것은 어렴풋이 알고 있었지만, 이렇게 광범위하게 사용될 수 있을지는 몰랐네요. 아주 간략하게 어떤 기능이 있는지 어떻게 활용할 수 있는지에 대해서만 수박 겉핥기 식으로 훝어봤습니다만, 많이 도움이 될 것 같습니다. 이 글을 방문하신 분들도 저처럼 도움이 되시길 바랍니다.

XML 이란

  • eXtensible Markup Language
  • HTML과 비슷한 마크업 언어
    • HTML은 표현. XML은 데이터 그 자체
    • XML에서는 tag가 미리 정의되어 있지 않음
  • 데이터를 저장하거나 전송하는 목적
    • 표현과는 관련이 없다.
  • self-descriptive (하나의 문서만으로 모든 것을 설명할 수 있게) 설계됨
  • W3C에서 추천함
    • 데이터 공유가 쉽다. 
    • 전송이 쉽다
    • 플랫폼에 독립적이다.
    • 데이터 사용을 쉽게 한다.

XML은 어떻게 사용하는가

  • 데이터와 표현을 분리한다. (XML에는 표현하기 위한 어떤 정보도 없다)
  • HTML에 보조하여 사용하기도 한다.
  • 별도의 XML 파일로 저장하고, JavaScript로 HTML에 읽어들일 수 있다.
  • 산업분야별로 정해진 XML 포맷이 있다. 이것을 사용하여 데이터를 전송한다.
    • 예를 들어 XML News 는 뉴스를 교환하기 위한 사양이다.
    • NOAA의 날씨 서비스는 XML Weather Service를 이용한다.

XML의 트리구조

  • root 엘리먼트 밑에 child 엘리먼트가 있다. 
  • parent - child - sibling
  • 모든 엘리먼트는 내용(text content)와 속성(attribute 예: category="cooking") 을 가질 수 있다.

XML의 구조 규칙 ("Well Formed")

  • 반드시 Root 엘리먼트(모든 엘리먼트의 parent)가 있어야 한다. 
  • prolog는 첫줄에 있어야 한다. (선택)
    • <?xml version="1.0" encoding="UTF-8"?>
    • UTF-8이 기존 문자인코딩이다. (HTML5, CSS, JavaScript, PHP, SQL 등에서도 UTF-8이 기본)
  • 모든 XML 엘리먼트는 끝 태그(closing tag)가 있어야 한다.
    • prolog의 경우엔 xml 문서요소가 아니므로 끝 태그가 없다.
  • XML 태그는 대소문자를 구분한다. 시작태그와 끝태그는 동일해야 한다.
  • 중첩순서가 맞아야 한다. - First in Last out
  • XML 속성값은 반드시 "따옴표" 로 묶어야 함.
    • <note date="12/11/2007">
  • 특수문자는... 
    • &lt;    &gt;    &amp;   &apos;   &quot;
  • 코멘트는 
    • <!-- 이렇게 하면 코멘트 -->
  • XML에서는 blank를 여러개 사용해도 무방하다.

XML 엘리먼트

  • 시작태그와 끝태그 사이에 있는 모든 것. (시작태그와 끝태그도 포함
  • 엘리먼트는 다음과 같은 것들을 가질 수 있다.
    • text
    • attribute
    • 다른 element
  • Empty Element도 존재할 수 있고, 속성을 가질 수 있다. 아래 두가지 형태 모두 허용
    • <element></element>
    • <element />
  • XML 명명 규칙
    • 대소문자 구분. 시작은 문자또는 underscore
    • xml,XML,Xml 등으로 시작할 수 없음
    • 문자, 숫자, 하이픈, underscore, 마침표(. period)를 포함해도 된다.
    • 공백은 포함할 수 없다.
  • 이름 지을때 주의할 점
    • 마이너스, 마침표, 콜론 등은 사용하지 않는 게 좋고, plain 알파벳을 사용하는 것이 좋다.
  • 명명 스타일은 정해진 게 없다
    • 전체소문자, 전체대문자,_로 연결, Pascal case, Camel case 모두 허용
    • 무엇을 사용하던 일관성있게 사용하라.
  • Element는 확장 가능하다.
    • 확장하여 추가하더라도, 어플쪽엔 아무런 문제도 없다.

XML 속성

  • 반드시 따옴표 사용. 홑따옴표, 곁따옴표 모두 OK
    • <person gender="female">
    • <person gender='female'>
  • 따옴표 내에 따옴표 있을 경우, 다른 것을 사용하던지 &quot;를 사용
  • 무엇을 속성으로 할지, 엘리먼트로 할지는 정해진 것이 없음. 편한대로. 정보도 동일함
  • 되도록이면 ATTRIBUTE 보다는 Element를 사용
    • 엘리먼트는 값을 여러개 가질 수도 있고, 트리구조를 가질 수 있고, 쉽게 확장할 수 있음.

XML 네임스페이스

  • 다른 응용에 속한 XML 문서를 찹치려고 하면 충돌이 발생할 수 있음
  • 이름접두어(name prefix)를 사용하면 해결가능 <h:table> <h:tr> ... </h:tr> </h:table>
  • 접두어를 사용하려면 네임스페이스를 반드시 정의해야 함.
    • <h:table xmlns="namespaceURI"> <h:tr> ... </h:tr> </h:table> 등으로 사용.
    • xmlns 는 속성. 이 속성이 이하에 있는 h: 접두어에 대해 적법한 네임스페이스를 지정함
    • 네임스페이스를 어떤 엘리먼트에 정의하면, 그 prefix를 사용하는 모든 자식 엘리먼트는 해당 네임스페이스에 속하게 됨.
  • 네임스페이스를 root 엘리먼트에 한꺼번에 정의할 수도 있음
    • 단, 여기에 있는 URI는 parser가 사용하지 않음. 고유한 이름을 지정하는 목적일 뿐.
    • 하지만, 네임스페이스 정보가 담긴 웹페이지를 가르키는 포인터로서 네임스페이스를 사용하는 경우가 많음.

<root xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="https://www.w3schools.com/furniture"
>

<h:table>
  <h:tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
  </h:tr>
</h:table>
<f:table>
  <f:name>African Coffee Table</f:name>
  <f:width>80</f:width>
  <f:length>120</f:length>
</f:table>
</root>

  • default 네임스페이스를 사용하면 각 엘리먼트마다 접두사를 붙일 필요없음
    • <table xmlns="namespaceURI"> <tr> ... </tr> </table>

XML 디스플레이

  • xml 파일을 그냥 브라우저에서 보면, 브라우저 별로 다르게 보인다. 
  • 소스보기를 하면 원래 파일의 내용을 볼 수 있다.
  • xml 파일에 오류가 있으면 오류를 표시하기도 하고, 아무것도 안보이기도 한다.
  • 이렇게 제각각으로 보이는 것은 XML에 표시에 관한 아무런 정보도 없기 때문이다.
  • CSS 를 이용해서 보이는 방법도 있지만, 추천되는 방법은 아니다.

XML HttpRequest

  • 대부분의 최신 브라우저는 서버로부터 데이터를 요청하는 XMLHttpRequest 오브젝트가 있다. 이를 사용하면 다음과 같은 장점이 있다.
    • 페이지를 새로 부르지 않고 페이지를 갱신할 수 있음
    • 페이지가 전송된 후 데이터를 전송하고 수신할 수 있다.
    • 백그라운드로 서버에 데이터를 송신할 수 있다.
  • 자세한 내용은 이 블로그의 글을 참조

XML 해석기

  • 대부분의 브라우저는 XML 해석기(parser)가 내장되어 있음. 아래와 같이 사용가능

<script>
var text, parser, xmlDoc;

text = "<bookstore><book>" +
"<title>Everyday Italian</title>" +
"<author>Giada De Laurentiis</author>" +
"<year>2005</year>" +
"</book></bookstore>";

parser = new DOMParser(); 
xmlDoc = parser.parseFromString(text,"text/xml");

document.getElementById("demo").innerHTML =
xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
</script>

  • XMLHttpRequest 객체는 XML 해석기가 내장되어 있음
    • responseText 프로퍼티는 string 형식의 응답이 들어있음
    • responseXML 프로퍼티에는 XML 형식의 응답이 들어 있음

XML DOM

  • DOM(Document Object Model)은 플랫폼/언어 중립적 인터페이스로서, 이를 통해 프로그램이나 스크립트에서 문서의 내용과 구조, 스타일을 동적으로 접근/갱신할 수 있다.
  • HTML이나 XML을 트리구조로 표현
    • getElementById() 등의 함수를 이용해 접근가능

XML 과 XPath

  • XPath는 XSLT 표준의 중요 요소이다.
  • XPath는 XML 문서에서 엘리먼트와 속성을 방문하는데 사용된다.


    • XPath는 XML 문서의 부분을 정의하는 문법이다.
    • XPath는 XML 문서를 방문하기 위한 경로표현식(path expression)을 사용한다.
    • XPath는 표준 함수의 라이브러리를 포함한다.
    • XPath는 W3C에서 추천한다.
 
  • XPath는 경로 표현식(Path Expression)을 사용하여 XML 문서의 노드를 선택한다. 이 경로표현식은 컴퓨터 파일시스템의 경로와 비슷한 형태이다.
  • XPath는 JavaScript, Java, XML Schema, PHP, Python, C, C++ 등 많은 언어에서 사용된다.
  • XSLT에서도 사용된다. XPath를 알면 XSL을 잘 활용할 수 있다.
  • 예제
    • /bookstore/book[1]    -> bookstore 엘리먼트의 자손들중 첫번째 book 엘리먼트 선택
    • /bookstore/book[last()-1)     -> ... 끝에서 두번째 엘리먼트 선택
    • /bookstore/book[postion()<3]     -> ... 처음 두개의 엘리먼트 선택
    • //title[@lang='en']            -> "lang" 속성이 "en"인 모든 title 엘리먼트 선택
    • //bookstore/book[price>35.00]/title          -> price 엘리먼트의 값이 35.00보다큰 모든 book 엘리먼트의 title 엘리먼트를 선택하라.
  • XPath 투토리얼

XML 과 XSLT

  • XSLT는 XML 문서를 HTML로 변환하는데 사용한다.
  • XSLT(eXtensible Stylesheet Language Transformations)는 XML을 위한 추천 스타일시트 언어
  • CSS 보다 훨씬 복잡함. XSLT를 사용하면 출력 파일로부터 엘리먼트나 속성을 추가/제거할 수 있음 재배열, 정렬도 가능하고, 테스트도 가능, 어떤 요소를 숨길지 표시할지 결정할 수 있음
  • XSLT는 XPath를 사용하여 XML 문서에서 정보를 찾아냄
  • XSLT 투토리얼

XML과 XQuery

  • XQuery는 SQL로 데이터베이스를 검색하는 것과 같은 역할을 한다.
  • XQuery는 XML데이터를 query할 수 있도록 설계되었다.
  • 예제 : SQL과 비슷하다.

for $x in doc("books.xml")/bookstore/book
where $x/price>30
order by $x/title
return $x/title

  • XQuery란
    • XML 데이터를 qurey 하기 위한 언어
    • SQL : 데이터베이스 = XQuery : XML
    • XQuery는 XPath 표현식을 기반으로 한다.
    • XQuery는 중요한 Database에서 지원한다.
    • XQuery는 W3C에서 추천한다. 
  • XQuery로 할 수 있는 일
    • Web서비스에서 정보추출에 사용
    • 요약 보고서 생성
    • XML 데이터를 XHTML로 변환
    • 웹 문서에서 관련 정보를 검색
  • W3C의 추천
    • XML, 네임스페이스, XSLT, XPath, XML Schema 등과 같은 W3C 표준과 호환된다.
    • XQuery 1.0은 2007년에 W3C의 추천으로 등록됨
  • XQuery Tutorial

XML 과 XLink. 그리고 XPointer

  • XLink는 XML 문서에서 하이퍼링크를 생성하는데 사용한다.
  • XML 문서중 모든 요소를 링크처럼 만들 수 있다.
  • XLink를 사용하면 링크가 문서 바깥에 존재한다.
  • WLink는 W3C에서 추천
  • XML 문서에 대한 XLink를 지원하는 브라우저는 없다.
    • 하지만, 중요 브라우저는 모두 SVG에서 XLink를 지원한다.
  • XLink 문법
    • HTML에서는 <a> 태그로 하이퍼링크를 만들지만, XML에서는 어떤 엘리먼트는 사용할 수 있으므로, 어떤 요소이름이 하이퍼링크가 될지 알 수 없다. 
    • 아래와 같은 방식으로 XLink를 만든다.
      • XLink기능을 사용하려면 XLink 네임스페이스를 선언해야 한다. 
        • xmlns:xlink="http://www.w3.org/1999/xlink"
        • xlink:type , xlink:href 속성은 XLink 네임스페이스에서 온 것이다.
        • xlink:type="symple" 을 사용하면 HTML 형식의 링크를 만들 수 있다.

<?xml version="1.0" encoding="UTF-8"?>
<homepages xmlns:xlink="http://www.w3.org/1999/xlink">
  <homepage xlink:type="simple" xlink:href="https://www.w3schools.com">Visit W3Schools</homepage>
  <homepage xlink:type="simple" xlink:href="http://www.w3.org">Visit W3C</homepage>
</homepages>

  • XPointer

    • XPointer를 사용하면 XML 문서 특정부분에 링크를 생성할 수 있다.
    • XPointer는 XPath 표현식을 사용하여 XML 문서를 방문한다.
    • XPointer는 W3C 추천.
  • XPointer의 브라우저 지원
    • XPointer를 지원하는 브라우저는 없다. 하지만, 다른 XML 언어에서는 사용된다.

XML Validator

  •  XML 문법 체크
    • root 요소가 반드시 존재해야 한다.
    • 모든 요소는 끝태그가 있어야 한다.
    • 모든 태그는 대소문자 구분
    • XML 요소들이 올바르게 중첩되어야 한다.
    • 속성 값은 반드시 "따옴표"로 묶어야 한다.
  • XML 의 경우 절대 오류가 있어서는 안된다!!!

XML DTD

  • 문법에 맞는 XML 문서는 "Well Formed"라고 함
  • DTD에 대해 검증받은 XML 문서는 "Well Formed" 하며 "Valid" 함 
    • 아래에서 !DOCTYPE 선언이 외부파일 Note.dtd를 참조하고 있음

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note SYSTEM "Note.dtd">
<note>
    <to>Tove</to>
    <from>Jani</from>
    <body>Don't forget this weekend!</body>
</note>

<!DOCTYPE note                        ->root 엘리먼트
[
<!ELEMENT note (to, from, body)> -> note 요소는 반드시 to, from, body 요소를 포함해야 함
<!ELEMENT to (#PCDATA)>          ->to 요소는 "#PCDATA" 유형이어야 함. 
<!ELEMENT from (#PCDATA)>      -> #PCDATA란 parse-able text data (파싱 가능한 텍스트)
<!ELEMENT body (#PCDATA)>
]>

  • DOCTYPE은 특수문자를 정의하는데 사용할 수도 있음
    • <!ENTITY writer "Writer: Donald Duck."> 이렇게 정의한 뒤
    • <body> &writer;</body> 라고 사용하면 이 부분이 위 정의로 대체된다.
  • DTD/schema를 사용하면
    • 여러 그룹들이 표준 DTD를 사용하여 자료교환 가능
    • 외부에서 받은 데이터가 유효한지 확인할 수 있음
    • DTD로 자신의 데이터도 확인할 수 있음
  • 다만, 아직 추천사항도 아니고, XML의 요구조건도 아니므로, 구지 사용할 필요 없음.
  • DTD Tutorial 참고

XML Schema

  • XML Schema는 XML 문서의 구조를 설명함
  • XML Schema는 XML 기반으로 DTD 대체.

<xs:element name="note">                    -> note라는 요소를 정의함
<xs:complexType>                                -> note는 complex 유형임
    <xs:sequence>                                 -> 이 complex 유형은 요소들이 나열된 형태임
        <xs:element name="to" type="xs:string">         ->"to" 요소는 string 유형임
        <xs:element name="from" type="xs:string">
        <xs:element name="body" type="xs:string">
    </xs:sequence>
</xs:complexType>
</xs:element>

  • XML Schema는 DTD보다 훨씬 강력하다.
    • XML Schema 자체가 XML로 작성됨
    • 쉽게 추가할 수 있음
    • datatype을 지원함
    • 네임스페이스를 지원함
  • XML Schema를 사용해야 하는 이유
    • 해당 XML 파일에 대한 설명을 제공
    • 여러 그룹에서 표준으로 자료교환 가능
    • 데이터 검증이 가능
  • XML이 데이터유형을 지원한다는 것은??
    • 문서 내용을 쉽게 설명할 수 있다.
    • 데이터의 정확성을 쉽게 검증할 수 있다.
    • 데이터 제한사항을 쉽게 정의할 수 있다.
    • 다른 유형으로 쉽게 변환할 수 있다.
  • XML Schema는 XML 문법을 사용한다. 따라서
    • 새로운 언어를 배울 필요 없고
    • XML 에디터로 스키마 파일을 편집할 수 있고
    • XML parser로 스키마 파일을 해석할 수 있고
    • XML DOM으로 처리할 수 있으며
    • XSLT로 자료를 변환할 수 있다. 아주 좋은 점이 많다는 말씀. DTD를 쓰는 건 말이 안됨.
  • XML Schema Tutorial 을 참고할 것

XML Server

  • XML 파일은 단순한 텍스트 파일. 웹서버로 저장/생성하기 쉽다.
  • PHP로 생성하는 것도 어렵지 않고. (다만 header("Content-type: text/xml")로... 지정해야 한다.
  • asp로 생성하는 것도 물론 가능하고
  • Database로부터 생성할 수도 있다.

XML 예제 파일들


댓글을 달아 주세요

BLOG main image
드론과 지도
드론이 세상을 바꾸고 있습니다.드론의 활용처가 계속 넓어지고 있고, 글로벌 기업들의 참여가 많아지고 있으며, 새로운 기술들이 속속 등장하고 있습니다. 하지만 우리나라의 드론 산업은 일부 기업을 제외하면 중국에서 생산된 드론을 가져다가 조립하는 수준이 대부분입니다. 드론은 하드웨어, 소프트웨어, 데이터처리가 복합된 기술입니다. 어떤 기술들을 어떻게 조합할지에 성패가 달렸죠. 5년뒤 10년뒤에 이 블로그엔 어떤 글이 적힐까요? 그것이 궁금합니다.
by 푸른하늘이
Profile for bluesky61

달력

«   2018/11   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  

카테고리

전체보기 (1586)
구글어스 (829)
공간정보 (236)
사진 (103)
드론/쿼드콥터 (239)
지오캐싱 (47)
기타 (131)
  • 4,535,251
  • 433565
TNM Media textcube get rss

드론과 지도

푸른하늘이's Blog is powered by Tistory. / Supported by TNM Media.
Copyright by 푸른하늘이 [ http://www.ringblog.com ]. All rights reserved.

Textcube TNM Media
푸른하늘이's Blog is powered by Tistory. Designed by Qwer999. Supported by TNM Media.