4. XML Elements

출처(Original Post) : http://www.w3schools.com/xml/xml_elements.asp

XML Elements는 확장성이 있고, 그들은 관계를 맺고 있다. (XML Elements are extensible and they have relationships.)

XML Elements 는 간단한 이름 짓는 규칙을 가지고 있다. (XML Elements have simple naming rules.)

XML Elements는 확장성이 있다

XML 문서는 더 많은 정보를 나르기 위해 확장되어질 수 있다.

아래의 XML Note 예를 보시기 바랍니다.


<note>
<to>Tove</to>
<from>Jani</from>
<body>Don't forget me this weekend!</body>
</note>

우리가 위의 XML 문서로부터 아래와 같은 예를 만들기 위한 <to>, <from>, <body> elements를 추출해내는 응용 프로그램을 만들었다고 상상해 보시기 바랍니다.

MESSAGE

To: Tove
From: Jani

Don’t forget me this weekend!

그리고, XML 문서의 제작자가 아래와 같이 약간의 추가의 정보를 더하려고 한다고 상상해 보시기 바랍니다.


<note>
<date>2002-08-01</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

이 응용 프로그램이 멈추거나 충돌을 일으킬까요?

그렇지 않습니다. 응용 프로그램은 여전히 XML 문서에서 <to>, <from>,<body> elements를 찾아내서 똑같은 결과물을 만들 것입니다.

XML Elements는 확장성이 있다

XML Elements 는 관계를 맺고 있다. (XML Elements have Relationships)

Elements는 부모와 자식간의 관계로 묶여 있다. (Elements are related as parents and children.)

XML 용어를 이해하려면, 당신은 XML elements의 이름 사이의 관계와, element content가 어떻게 묘사되어지는지에 대해서 알아야 한다.

아래의 예를 책에 관한 서술이라고 상상해 보시기 바랍니다.

My First XML

Introduction to XML

  • What is HTML
  • What is XML

XML Syntax

  • Elements must have a closing tag
  • Elements must be properly nested

아래의 XML 문서가 책을 서술한 것이라고 상상해 보시기 바랍니다.


<book>
<title>My First XML</title>
<prod id="33-657" media="paper"></prod><chapter>Introduction to XML
<para>What is HTML</para>
<para>What is XML</para>
</chapter>

<chapter>XML Syntax
<para>Elements must have a closing tag</para>
<para>Elements must be properly nested</para>
</chapter>

</book>

Book 은 root element이다. Title, prod, chapter는 book의 자식 elements이다. Book은 title, prod, chapter의 부모 element이다. title,prod,chapter은 똑같은 부모를 가졌기 때문에 형제자매이다.

Elements는 Content를 가지고 있다 (Elements have Content)

Elements는 다른 본문 형태를 가진다. (Elements can have different content types.)

XML element는 element의 시작 태그부터 닫는 태그까지가 전부이다. (An XML element is everything from (including) the element’s start tag to (including) the element’s end tag.)

element는 element content, 섞인 content, 간단한 content, 혹은 빈 content를 가진다. element는 또한 속성(attributes)를 가진다.

위의 예제에서, book은 element content를 가지고 있는데, 왜냐하면 다른 elements를 포함하고 있기 때문이다. Chapter는 섞인 content를 가지고 있는데, 왜냐하면 text와 다른 elements를 가지고 있기 때문이다. Para는 간단한 content(혹은 text content)를 가지고 있는데, 왜냐하면 단지 text만 가지고 있기 때문이다. Prod 는 빈 content를 가지고 있는데, 왜냐하면 아무 정보도 전송하지 않기 때문이다.

위의 예제에서 prod element 하나만이 속성(attributes)을 가지고 있다. id라고 표현되는 속성은 “33-657” 이라는 값을 가지고 있다. media라고 표현되는 속성은 “paper”라는 값을 가지공 ㅣㅆ다.

Element 이름짓기 (Element Naming)

XML elements는 다음과 같은 이름짓는 규칙을 따라야만 한다.

  • 이름은 문자, 숫자, 그리고 다른 문자를 포함할 수 있다.
  • 이름은 숫자나 구분기호로 시작되어서는 안된다.
  • 이름은 xml(혹은 XML, 혹은 Xml, 등등) 과 같은 xml이라는 글자로 시작되어서는 안된다.
  • 이름은 공백을 포함할 수 없다.

당신이 element 이름을 지을 때는 아래의 간단한 법칙을 지켜야 한다.

어떠한 이름도 사용되어질 수 있고, 어떤 이름도 예약어로 지정되지 않았다. 이름을 지을 때, 잘 묘사될 수 있게끔 지으면 좋다. _(underscore)를 사용해서 이름 사이의 구분을 짓는 것도 좋다.

예: <first_name>, <last_name>

“-“와 “.”를 피하라. 예를 들어 , “first-name” 이라고 이름 짓는다면, 당신의 소프트웨어는 first에서 이름을 추출하기 위해 혼돈스러울 것이다. 혹은 당신이 “first.name” 이라고 이름 짓는다면, 당신의 소프트웨어는 “name”이 “first” object의 property 라고 생각할지도 모른다.

element 이름은 당신이 쓰고 싶은 만큼 길어도 된다. 그러나, 지나치게 과장해서 길게 쓰지는 말자. 이름은 짧고 간결한게 좋다.
좋은 예) <book_title>
나쁜 예) <the_title_of_the_book>

XML 문서는 종종 데이터베이스와 유사하다. 이름을 짓는 좋은 습관은 당신의 데이터베이스의 이름 짓는 습관을 XML 문서의 elements에 이용하는 것이다.

영어 문자가 아닌 éòá 이런 문자들 또한 XML element 이름에 사용될 수 있다. 그러나, 소프트웨어 벤더가 지원하지 않을 수도 있다는 점에 주의하라.

“:” 문자는 element 이름에 쓰이지 않아야 하는데, 그 이유는 namespace라고 불리는 곳에 사용되어질 것이기 때문이다. (추후 강좌에 설명)

3. XML Syntax(구문)

출처(Original Post) : http://www.w3schools.com/xml/xml_syntax.asp

XML 구문을 사용하는 법칙은 굉장히 간단하고, 매우 엄격하다. 이러한 법칙은 배우기 아주 쉽고, 사용하기 아주 쉽다.

그렇기 때문에, XML을 읽고 다루는 소프트웨어를 만드는 건 아주 쉽다.

XML 문서의 예제

XML 문서는 스스로 묘사하며, 간단한 구문을 가진다.


<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

문서의 첫행은(XML 선언부)는 XML 버전과 문자 인코딩에 관하여 정의를 한다. 위의 예제에서 문서는 XML 1.0 스펙을 따르고 있고, ISO-8859-1(Latin-1/West European) character set을 사용하고 있다.

2번째 행은 root element를 나타낸다.(마치 이 문서는 note 에요 라고 외치는 것과 같다.)

<note>

그 다음 4행은 4개의 root의 child elements(to, from, heading, body)를 묘사한다.


<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>

마지막 줄은 root element의 끝을 나타낸다.

이 예제를 통해서 당신은 XML 문서가 Jani가 Tove에게 보내는 Note라는 내용을 포함하고 있다는 걸 알아챘는가? 당신은 XML이 스스로 묘사한다는 점에 동의하지 않는가?

모든 XML elements는 반드시 닫는 태그를 가져야만 한다.

XML을 사용할 때, 닫는 태그를 생략하는 건 문법에 맞지 않다.

HTML에서 몇몇 elements는 닫는 태그가 없다. 아래 코드는 HTML 문법 규칙에 맞는다.


<p>This is a paragraph
<p>This is another paragraph

XML에서는 모든 elements는 아래의 예처럼 반드시 닫는 태그를 가져야 한다.


<p>This is a paragraph</p>
<p>This is another paragraph</p>

Note : 당신은 아마도 이전 예제에서 XML 선언부가 닫는 태그가 없다는 걸 눈치 챘을 수도 있다. 이건 에러가 아니다. 선언부는 XML 문서 자체의 일부분이 아니다. 선언부는 XML의 element가 아니며, 닫는 태그를 가질 필요도 없다.

XML 태그는 대소문자를 구별한다.

HTML과는 다르게, XML 태그는 대소문자를 구별한다.

XML을 사용할 때 <Letter>태그는 <letter> 태그와 틀리다.
시작 태그와 닫는 태그는 그렇기 때문에 대소문자를 정확하게 맞춰서 사용해야 한다.


<Message>This is incorrect</message>

<message>This is correct</message>

xml 요소는 적합하게 중첩되어야 한다 (XML Elements Must be Properly Nested)

XML에서 태그의 부적합한 중첩사용은 동작하지 않는다.

HTML에서는 부적합하게 중첩되어도 되었다. 아래의 예처럼.


<b><i>This text is bold and italic</b></i>

XML 요소는 적합하게 중첩되어야 한다. 아래의 예처럼.


<b><i>This text is bold and italic</i></b>

XML 문서는 반드시 Root Element를 가져야 한다.

모든 XML 문서는 쌍으로 이루어지는 단 하나의 Root Element를 가져야 한다. (All XML documents must contain a single tag pair to define a root element.)

다른 모든 elements는 root element 안에 있어야 한다.

모든 elements는 sub elements(child elements)를 가질 수 있으며, Sub elements는 반드시 정확하게 중첩되어야만 한다.


<root>
<child>
<subchild>.....</subchild>
</child>
</root>

XML 속성값은 반드시 따옴표로 묶어야 한다 (XML Attribute Values Must be Quoted)

XML을 사용할 때, 따옴표를 생략하는건 문법에 맞지 않다.

XML 요소는 HTML 처럼 이름/값의 속성을 가진다. XML에서 속성은 반드시 따옴표를 사용해야 한다. 아래 2개의 예문을 보자. 첫번째는 틀렸고, 두번째 예는 옳은 예이다.


<?xml version="1.0" encoding="ISO-8859-1"?>
<note date=12/11/2002>
<to>Tove</to>
<from>Jani</from>
</note>

<?xml version="1.0" encoding="ISO-8859-1"?>
<note date="12/11/2002">
<to>Tove</to>
<from>Jani</from>
</note>

첫번째 예문에서 틀린점은 note 요소의 date 속성이 따옴표로 안 묶여 있다는 점이다.

맞는 예 : date=”12/11/2002″, 틀린 예: date=12/11/2002

XML 을 사용할 때 공백은 보존된다. (With XML, White Space is Preserved)

XML을 사용할 때, 공백은 짤려나가지 않는다. (With XML, the white space in your document is not truncated.)

이 점은 HTML과 틀린 점이다. HTML을 사용해서 아래와 같은 문장을 표현하면,

Hello                 my name is Tove.

는 실제로 아래와 같이 보여진다.

Hello my name is Tove,

왜냐하면 HTML은 연속되는 공백문자는 하나의 공백 문자로 줄이기 때문이다.

xml을 사용할 때 CR/LF는 LF로 변환된다. (With XML, CR/LF is Converted to LF)

xml을 사용할 때, 새로운 줄은 항상 LF로 저장된다. (With XML, a new line is always stored as LF)

당신은 타자기가 뭔지 아십니까? 타자기는 지난 세기에 인쇄된 문서를 만들기 위한 기계적인 장치였죠.

타자기를 사용하여 한 줄을 치고 나서, 당신은 프린팅 carriage를 왼쪽 가장자리로 옮기고, 종이를 한 줄 위로 올려야 했죠.

윈도우 응용 프로그램에서, 새 줄은 carriage return(CR)과 line feed(LF) 이 두개의 쌍으로 된 문자를 사용해서 저장되었지요. 이 두개의 쌍으로 된 문자는 타자기에서 새 줄을 셋팅하는 것과 유사하지요.

유닉스 응용 프로그램에서는 새 줄은 LF 문자 하나로 저장됩니다.

매킨토시 응용 프로그래멩서는 새 줄은 CR 문자 하나로 저장됩니다.

XML 주석 (Comments in XML)

HTML 주석과 비슷합니다.

<!– 이 부분이 주석입니다 –>

XML에는 특별한게 없습니다

XML에는 특별한게 없습니다. 그냥 평이한 텍스트에 몇몇의 XML 태그가 포함된 정도죠.
평이한 텍스트를 다룰 수 있는 소프트웨어라면 XML도 다룰 수 있죠. 간단한 텍스트 에디터에서, XML 태그는 보이며, 특별하게 다루어지지도 않습니다.

XML을 위한 프로그램에서는, XML 태그는 특별하게 다루어집니다. 그 응용 프로그램의 특성에 따라 태그는 보이거나, 보이지 않게 되거나, 혹은 특별한 기능적인 의미를 가지게 됩니다.

2. XML은 어디에 사용되어 지나요?

출처(Original Post) : http://www.w3schools.com/xml/xml_usedfor.asp

XML이 데이터를 저장하고, 운반하고(carry), 교환하기 위해서 디자인 되었다는 걸 아는게 매우 중요하다.
XML은 데이터를 display 하기 위해 디자인된게 아니다.

XML은 HTML에서 Data만 별도로 빼낼 수 있다.

XML을 사용하여, 당신의 데이터는 당신의 HTML 밖에 저장시킬 수 있다.

HTML이 데이터를 display 할때, 데이터는 HTML 안에 저장되어진다.
XML을 사용할때는 별개의 XML 파일로 저장할 수 있다. 이러한 방식으로 당신은 HTML은 데이터 layout과 display에만 집중해서 사용할 수 있다.

XML 데이터는 또한 HTML 페이지 안에 “Data Islands” 형태로 저장되어질 수 있다. 당신은 여전히 HTML을 오로지 formatting과 displaying에만 집중해서 사용할 수 있다.

XML은 데이터를 교환할때 사용되어 진다.

XML을 사용하여, 호환되지 않는 시스템끼리 데이터가 교환되어질 수 있다.

현실세계에서, 컴퓨터 시스템과 데이터를 포함한 데이터베이스는 호환되지 않는 포맷이다. 개발자에게 가장 시간이 많이 소요되는 것 중의 하나는 이러한 시스템간에 인터넷을 통해서 데이터를 교환하는 것이다.

데이터를 XML로 바꾸는 일은 복잡함을 줄여주며, 여러 응용 프로그램에서 읽기 쉽게 된다.

XML 은 새로운 언어를 만들때 사용되어 진다.

XML은 WAP과 WML의 어머니다. (XML is the mother of WAP and WML.)

WML(Wireless Markup Language: 핸드폰 등의 휴대용 기기에 사용되어지는 인터넷 응용 프로그램용 markup language) 은 XML로 씌여 졌다.

1. xml 소개

출처(Original Post) : http://www.w3schools.com/xml/xml_whatis.asp

XML은 데이터를 묘사(describe)하고 데이터가 무엇인가에 초점을 맞춰서 디자인 되었다.

HTML은 데이터를 나타내고(display) 데이터가 어떻게 보여질 것인가에 맞춰서 디자인 되었다.

미리 알고 있어야 하는 지식

  • HTML / XHTML
  • JavaScript or VBScript

XML이란?

  • XML=EXtensible Markup Language
  • HTML과 비슷한 markup language
  • 데이터를 묘사(describe)하기 위해서 디자인 되어짐
  • XML 태그는 미리 정의되어진게 없다. 당신만의 태그를 정의해서 사용해야 한다.
  • XML은 Document Type Definition(DTD) 혹은 XML Schema 를 사용하여 데이터를 묘사(describe)한다.
  • DTD 혹은 XML Schema와 같이 사용되는 XML은 혼자 묘사되어진다. (self-descriptive)
  • XML 은 W3C 권고안이다.

XML은 W3C의 권고안이다.

XML은 1998년 2월 10일, W3C의 권고안이 되었다.

XML과 HTML의 가장 큰 차이점

XML은 데이터를 실어 나르기 위할 목적으로 디자인 되었다. (XML was designed to carry data.)

XML은 HTML의 대체제가 아닙니다. XML과 HTML은 다른 목적으로 디자인되었습니다.

XML은 데이터를 묘사(describe)하고 데이터가 무엇인가에 초점을 맞춰서 디자인 되었다.

HTML은 데이터를 나타내고(display) 데이터가 어떻게 보여질 것인가에 맞춰서 디자인 되었다.

XML 은 아무일도 하지 않는다 (XML Does not Do Anything)

XML은 아무일도 하지 않게끔 디자인 되어졌다.

이 부분이 조금 이해하기 어려울 수도 있다, 하지만 XML은 아무일도 하지 않는다. XML은 구조와 저장, 그리고 정보 전송을 위해서 탄생되어졌다.

아래의 예제는 XML형식으로 저장된 Jani가 Tove에게 보내는 메모이다.


<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

메모는 header부분과 메시지의 본문을 가지고 있다. 그리고 또한 보내는 이와 받는이의 정보도 가지고 있다. 그러나 여전히, 이 XML 문서는 아무일도 하지 않고 있다. 이것은 순전히 XML 태그로 감싸여진 순수한 정보에 불과하다. 누군가가 보내고, 받고, 나타내기 위한 소프트웨어를 사용해야 한다.

XML은 공짜고, 확장가능하다.

XML 태그는 미리 정의되어 있지 않다. 당신이 반드시 당신만의 태그를 “개발(invent)”해야 한다.

HTML 문서의 태그는 미리 정의되어 있다. HTML 문서에서는 HTML 표준에 맞는 태그만 사용할 수 있다. (예:<p><h1> 등등)

XML은 제작자가 자신만의 태그와 문서 구조를 가질 수 있게끔 한다.

위의 예제에 있는 태그(예:<to>, <from>) 의 경우, XML 표준에 정의되어 있지 않다. 이러한 태그들은 XML 문서를 만든 사람에 의해서 “개발된” 것이다.

XML은 HTML의 역할을 보충해 준다. (XML is a Complement to HTML)

XML 은 HTML의 대체제가 아니다.

XML이 HTML의 대체제가 아니라는 걸 이해하는 건 아주 중요하다.

XML은 정보를 전송하기 위한 cross-platform, software and hardware 독립적인 툴이다.

XML 농담

질문 : 언제 XML을 사용하나요?
답변 : 이력서에 뭔가 있어 보이게 쓸 때 사용합니다.