XML 3 - XML 요소, 속성, 네임스페이스
Web/Frontend

XML 3 - XML 요소, 속성, 네임스페이스

XML 요소


XML 문서 구조

XML 문서는 크게 XML 프롤로그 부분 XML 요소 부분으로 나눌 수 있습니다.

XML 요소 부분은 하나 이상의 XML 요소로 구성됩니다.


XML 요소

XML 요소란 XML 문서를 구성하는 하나의 구성 요소로 정의할 수 있습니다.

각각의 XML 요소는 하나 이상의 다른 요소를 포함할 수 있습니다.

또한, 텍스트, 속성, 미디어 객체나 경우에 따라 이들 전부를 포함할 수도 있습니다.

<?xml version="1.0" encoding="UTF-8"?>
<school>
    <lecture category="application">
        <java>Java</java>
        <cpp>Cpp</cpp>
    </lecture>
    <lecture category="web">
        <php>PHP</php>
        <asp>ASP</asp>
    </lecture>
</school>

위의 예제에서 <java>, <cpp>, <php>, <asp>요소는 각각 자신만의 텍스트를 가집니다.

<school>요소와 <lecture>요소는 다른 요소들을 포함합니다.

또한, <lecture>요소는 category라는 속성을 가집니다.


XML 요소 문법

XML 요소란 시작 태그부터 종료 태그까지의 모든 것을 가리킵니다.

XML 요소는 다음과 같은 문법을 사용하여 정의할 수 있습니다.

<요소이름 속성1="속성값" 속성2="속성값"... > 내용 </요소이름>

또한, 어떠한 내용도 가지지 않는 빈 요소(empty element)는 다음과 같이 정의할 수 있습니다.

<요소이름 속성1="속성값" 속성2="속성값"... />

빈 요소는 자신만의 내용을 가지지는 않지만, 요소에 대한 데이터를 저장할 수 있는 속성을 가질 수는 있습니다.


XML 요소 이름의 작성 규칙

1. XML 요소의 이름은 영문자, 숫자, 하이픈(-), 언더스코어(_, underscore)와 점(.)만을 사용하여 작성해야 합니다.

2. XML 요소의 이름은 영문자의 대소문자를 구분합니다.

3. 반드시 영문자나 언더스코어(_)로 시작해야 하며, 공백을 포함할 수 없습니다.

4. 예약어인 xml, XML, Xml 등은 요소의 이름으로 사용할 수 없습니다.

5. 시작 태그의 이름과 종료 태그의 이름은 반드시 대소문자까지 동일해야 합니다.

 


 

XML 속성


XML 속성

XML 속성은 XML 요소에 대한 추가적인 정보를 제공해주며, 해당 요소의 특징을 정의합니다.

XML 속성은 다음과 같은 문법을 사용하여 정의할 수 있습니다.

<요소이름 속성1="속성값" 속성2="속성값"... >

XML 요소의 속성은 속성 명="속성값"의 형태로 정의됩니다.

여기에서 속성값은 반드시 따옴표로 둘러싸여야 합니다.


요소와 속성의 차이점

<student>
    <name>홍길동</name>
    <year>3</year>
    <major>컴퓨터공학</major>
</student>
<student name="홍길동">
    <year>3</year>
    <major>컴퓨터공학</major>
</student>

위의 두 예제에서 이름(name)이라는 데이터를 하나는 XML 요소로, 하나는 XML 속성으로 표현하고 있습니다.

결과적으로 이 두 예제는 완전히 같은 정보를 제공합니다.

정보의 전달이라는 측면에서 보면 XML 요소로 표현하는 방법과 XML 속성으로 표현하는 방법에 큰 차이는 없습니다.

 

하지만 속성은 여러 개의 값을 가질 수 없으며, 요소처럼 손쉽게 확장할 수 없다는 단점을 가집니다.

또한, 속성은 XML 트리에 포함되지 않기 때문에 다양한 용도로 활용할 수가 없습니다.


XML 속성 이름의 작성 규칙

1. XML 속성의 이름은 하나의 요소 내에서 중복되어서는 안 됩니다.

2. 속성값은 반드시 따옴표로 둘러싸여야 하며, 작은따옴표와 큰따옴표의 차이는 없습니다.


 

XML 네임스페이스


XML 네임스페이스(namespace)

XML 네임스페이스는 XML 요소 간의 이름에 대한 충돌을 방지해 주는 방법을 제공합니다.

XML 네임스페이스는 요소의 이름과 속성의 이름을 하나의 그룹으로 묶어주어 이름에 대한 충돌을 해결합니다.

 

이러한 XML 네임스페이스는 URI(Uniform Resource Identifiers)로 식별됩니다.


XML 요소 간의 이름 충돌

XML에서는 사용자가 XML 요소의 이름을 직접 정의합니다.

따라서 서로 다른 XML 문서를 통합하려고 할 때 같은 이름을 가진 요소로 인해 충돌이 발생할 수 있습니다.

<body>
    <h1>html에서의 제목</h1>
    <p>html에서의 단락</p>
</body>
<body>
    <arm>70</arm>
    <leg>110</leg>
</body>

위의 두 예제에서 <body>요소는 서로 완전히 다른 의미로 사용됩니다.

예제 1에서는 HTML 문서의 <body>태그로 사용되었습니다.

예제 2에서는 실제 몸을 의미하여, 각 신체 부위의 치수를 기록하기 위해 사용되었습니다.

하지만 사용자나 XML 응용 프로그램은 두 <body>요소의 이러한 차이점을 어떻게 다뤄야 하는지 알지 못합니다.


 

XML 네임스페이스의 선언

XML에서는 접두사(prefix)를 이용하여 위와 같은 이름의 충돌을 방지하고 있습니다.

서로 같은 이름에 요소마다 서로 다른 접두사를 붙이면 이름의 충돌을 방지할 수 있게 됩니다.

 

XML에서 이러한 접두사를 사용하려면, 반드시 먼저 접두사에 대한 네임스페이스를 선언해야 합니다.

XML에서 네임스페이스를 선언하는 문법은 다음과 같습니다.

<요소이름 xmlns:prefix="URI">

XML 네임스페이스의 선언은 xmlns xmlns: 로 시작합니다.

prefix 속성값에는 이름 앞에 붙게 되는 네임스페이스 접두사(namespace prefix)를 명시합니다.

접두사로 사용되는 URI는 네임스페이스 식별자를 의미합니다.

<root>
    <a:body xmlns:a="https://www.w3.org/TR/html5/">
        <a:h1>html에서의 제목</a:h1>
        <a:p>html에서의 단락</a:p>
    </a:body>
    <b:body xmlns:b="http://codingsam.com/xml/physical/">
        <b:arm>70</b:arm>
        <b:leg>110</b:leg>
    </b:body>
</root>

위의 예제에서 첫 번째 <body>요소의 xmlns 속성은 a:라는 접두사를 선언합니다.

두 번째 <body>요소의 xmlns 속성은 b:라는 접두사를 선언합니다.

이렇게 XML 요소에 네임스페이스가 선언되면, 해당 요소의 모든 자식(child) 요소에도 같은 네임스페이스가 선언됩니다.

이러한 네임스페이스 선언은 XML 루트(root) 요소에서도 선언할 수 있습니다.

<root
    xmlns:a="https://www.w3.org/TR/html5/"
    xmlns:b="http://codingsam.com/xml/physical/">
    <a:body>
        <a:h1>html에서의 제목</a:h1>
        <a:p>html에서의 단락</a:p>
    </a:body>
    <b:body>
        <b:arm>70</b:arm>
        <b:leg>110</b:leg>
    </b:body>
</root>

 


 

URI(Uniform Resource Identifiers)

 

URI통합 자원 식별자를 의미하며, 인터넷에 있는 자원을 나타내는 유일한 주소를 의미합니다.

URI의 존재는 인터넷에서 요구되는 기본조건으로서 인터넷 프로토콜에도 항상 명시됩니다.

가장 잘 알려진 URI로는 인터넷 도메인 주소를 나타내는 URL(Uniform Resource Locator)이 있습니다.

또 다른 URI로는 URN(Universal Resource Name)이 있습니다.

 


XML 문서의 종류


XML 문서의 종류

W3C의 XML 표준 권고안은 문법적인 측면에서 두 가지 종류의 XML 문서를 정의하고 있습니다.

1. 문법에 맞는(well-formed) XML 문서

2. 유효한(valid) XML 문서


문법에 맞는(well-formed) XML 문서

문법에 맞는(well-formed) XML 문서란 XML 문서로서 가져야 하는 최소한의 필수 요건을 충족한 문서를 의미합니다.

따라서 이 문서는 XML의 모든 구문을 허용하지만, DTD(document type definition)나 스키마를 사용하지는 않습니다.

 

문법에 맞는(well-formed) XML 문서가 되기 위한 필수 요건은 다음과 같습니다.

1. 루트(root) 요소를 하나만 가져야 합니다.

2. 모든 XML 요소는 종료 태그를 가져야 합니다.

3. 시작 태그와 종료 태그에 사용된 태그 이름이 대소문자까지 완벽하게 일치해야 합니다.

4. 모든 XML 요소의 여닫는 순서가 반드시 정확하게 지켜져야 합니다.

5. 모든 속성의 속성값이 따옴표로 둘러싸여 있어야 합니다.

 

위에서 언급한 필수 요건을 만족하지 못하는 XML 문서는 오류를 발생시킵니다.

HTML 문서와는 달리 XML 문서에서는 오류가 발생하면, 해당 응용 프로그램의 모든 동작을 중지시킵니다.

따라서 모든 XML 문서는 반드시 문법에 맞는(well-formed) XML 문서여야만 합니다.


유효한(valid) XML 문서

유효한(valid) XML 문서는 문법에 맞는(well-formed) XML 문서를 좀 더 엄격하게 검증한 문서입니다.

따라서 유효한(valid) XML 문서는 모두 문법에 맞는(well-formed) XML 문서입니다.

거기에 추가하여 DTD(document type definition)를 가지고 있으며, 그에 따라 제대로 검증된 문서를 의미합니다.

 

XML에서 사용하는 DTD에는 다음과 같이 두 가지 종류가 있습니다.

1. DTD : 일반적인 문서 타입 정의(document type definition)

2. XML 스키마(XSD)

 

이러한 DTD는 XML 문서의 구조 및 해당 문서에서 사용할 수 있는 적법한 요소와 속성을 정의합니다.

 


XML 파서(parser)

XML 파서(parser)란 응용 프로그램이 XML 문서를 읽을 수 있도록 인터페이스를 제공해주는 라이브러리(library)나 패키지(package)를 의미합니다.

XML 파서는 XML 문서가 적합한 형식을 갖추고 있는지와 문법상의 오류는 없는지를 검사합니다.

현재 대부분의 주요 웹 브라우저는 모두 XML 파서를 내장하고 있습니다.

 

위의 그림은 XML 파서가 어떤 방식으로 XML 문서와 동작하는지를 보여줍니다.

XML 파서의 최종 목적은 XML 문서를 응용 프로그램이 읽을 수 있는 코드로 변환하는 것입니다.

현재 많이 사용되고 있는 XML 파서의 종류는 다음과 같습니다.

 - MSXML(Microsoft Core XML Services)

 - System.Xml.XmlDocument

 - Java built-in parser

 - Saxon

 - Xerces

728x90

'Web > Frontend' 카테고리의 다른 글

Ajax 3 - 서버와의 통신(XMLHttpRequest, GET, POST)  (0) 2021.05.26
Ajax 2 - DOM과 노드  (0) 2021.05.26
Ajax 1 - Ajax 기초  (0) 2021.05.25
XML 2 - XML 문법 및 구성 요소  (0) 2021.05.25
XML 1 - XML 개요 및 구조  (0) 2021.05.25