[XML응용]XML 구조와 문법 정리

류명운

·

2015. 10. 3. 16:07

반응형

02_XML_AZ1.ppt + 교재

 

XML 문서 구조

XML 문서는 크게 두 개의 주요한 부분으로 구성 됨 -> 프롤로그(prolog), 문서 앨리멘트(document element)

prolog: XML 문서에 대한 선언과 문서의 실질적인 내용이 어떠한 구조로 구성되었는지 나타내는 헤더 정보

document element: 마크업으로 구성되는 문서의 실질적인 내용을 나타냄

 

EBNF(Extended Backus-Naur Form) 표기법 : XML 1.0(최신버전)의 권고안의 문법, 문서 안에서 문법을 표현하는 방법

 EBNF 표기법

 기호 ::= 표현식

 * 표현식은 다음과 같은 패턴과 결합하여 좀 더 복잡한 형태를 가질 수 있다. A와 B는 표현식이다.

 패턴

 설명 

 A

 A 표현은 반드시 한번은 기술되어야 한다.

 A?

 A 표현은 기술될 수도 있고 되지 않아도 된다.

 A B

 A 표현이 먼저 기술되고 B 표현이 나중에 기술된다. 

 A|B 

 A와 B표현 중 하나만 기술되어야 한다.

 A-B

 A 표현이 기술될 때 B 표현과는 일치되지 않아야 한다.

 A+

 A 표현이 최소한 한 개 이상이 기술되어야 한다.

 A*

 A 표현은 기술하지 않아도 되고, 한 개 이상이 기술되어도 된다.

 PatternNum ::\ [a-zA-Z0-9]

 기호 PatternNum이 영소문자, 영대문자, 0~9까지의 문자 중 한 문자를 갖는 표현식

 Document ::= prolog element Misc*

 prolog 1개

 element 1개

 Misc 0개 또는 1개 이상 

 

XML 선언

 선언에 기술하여야할 것

 1. XML 권고안의 버전

 2. 문서의 인코딩 방식

 3. 스탠드얼론(standalone) 문서 여부

 <?xml version="버전번호" encoding="EUC-KR" standalone="yes|no"?>

 <?xml version="1.0" encoding="EUC-KR" standalone="yes"?>

* 주의할 점 1: XML 선언 이전에는 아무 내용도 기술해서는 안 된다.

* 주의할 점 2: XML 선언의 시작은 '<?xml' 문자열로 시작하며 공백을 두어서는 안 된다.

* 주의할 점 3: XML 선언의 사용은 선택 사항이지만 선언하였다면 버전 속성은 반드시 기술하여야 한다(나머지생략가능).

 

XML Element

XML 문서에서 Element는 문서의 논리적 구조를 나타내며, 문서의 내용을 표현함

Element는 시작 태그(start-tag), 끝 태그(end-tag), Element 내용으로 구성된다(시작 태그와 끝 태그명은 동일해야 한다.)

 <?xml version="1.0" encoding="EUC-KR"?>

 <개인정보> ---------------------> start-tag(root element)

     <이름>류명운</이름> ---------> element 내용

     <성별>남자</성별>     --------> element 내용

     <나이>25</남자>        --------> element 내용

 </개인정보> --------------------> end-tag(root element)

* 내용이 없는 Element(비어있는 Element)도 가능하며 표기법은 <element/> or <element></element>

 

Well-Formed Document(잘 구성된 문서) 

잘 구성된 문서: XML 문서를 구성하기 위한 최소의 필수적 문법 요건을 충족시키는 문서

* 문법적 오류를 일으키는 예

 잘못된 표기법

올바른 표기법 

 1. 루트 앨리멘트에 대한 잘못 사용한 예(XML 문서 내에 루트 앨리멘트가 반드시 포함되어야 한다)

<?xml version="1.0" encoding="EUC-KR"?>

<이름>류명운</이름>

<성별>남자</남자>

<나이>25</나이>

 

 

<?xml version="1.0" encoding="EUC-KR"?>

<개인정보>

<이름>류명운</이름>

<성별>남자</남자>

<나이>25</나이>

</개인정보>

 2. 앨리멘트를 중첩하여 사용한 잘못된 예('전화번호' 앨리멘트 내에서 시작된' FAX' 앨리멘트가 중첩되어 있다)

 <전화번호>

 <근무처>1234-4567</근무처>

 <휴대폰>010-1234-4567</휴대폰>

 <FAX>4504-9876

 </전화번호>

 </FAX>

 <전화번호>

 <휴대폰>010-1234-4567</휴대폰>

 <FAX>4504-9876</FAX>

 </전화번호>

 <FAX>4504-9876</FAX>

 3. 태그(Tag)를 잘못 사용한 예('수량'에 대한 종료 태그를 사용하지 않았다)

 <물품정보>

 <항목번호>1</항목번호>

 <수량>2

 <생산지>대한민국</생산지>

 </물품정보>

 <물품정보>

 <항목번호>1</항목번호>

 <수량>2</수량>

 <생산지>대한민국</생산지>

 </물품정보>

 4. 속성(Attribute)을 잘못 사용한 예(시작 앨리먼트 안에 들어가야 하며 한 앨리멘트 내에서 두 개의 동일한 속성을 사용하면 안된다)

 <document status="myeonguni" status="myeonguni">

 <author>Ryu Myeongun</author>

 <date>010-1234-5678</date>

 </document>

 <document status="myeonguni">

 <author>Ryu Myeongun</author>

 <date>010-1234-5678</date>

 </document>

 5. 이 밖에도 속성, 주석, 프로세싱 명령문, CDATA 섹션, '<', '&'와 같은 미리 정의된 문자의 사용에 조심해야 한다

 

Valid Document(유효한 문서)

유효한 문서: 잘 구성된 문서보다는 더 엄격한 검증 절차를 거치는 문서로 DTD(Document Type Definition)선언을 포함하고 있어야 하며, 이 DTD에 정의된 마크업 규칙에 따라 문서를 구성해야 한다.

  XML 문서의 유효성 검사(검증 절차)

 DTD -> XML 문서 : 마크업 규칙 정용

 DTD -> XML 파서 : 마크업 규칙 참조

 XML 문서 -> XML 파서 : 유효성 검증

* 다소 복잡해 보이지만, 많은 장점을 제공 함

-> 유효한 문서의 DTD는 문서 클래스를 만들기 위한 문법으로 유용하게 사용되어질 수 있다

문서 클래스(document class) : 비슷한 종류의 문서를 만들기 위한 공통적 특징을 담고 있는 구조적 정보를 뜻함

ex) 교과서, 참고서, 전문서적과 같은 같은 유형(type)의 문서들은 책이라는 하나의 문서 클래스로 묶을 수 있다. 즉, 여러 종류의 책을 만들기 위한 공통의 Book DTD를 만드는 것을 말한다.

 

기본적인 XML 문서의 작성 규칙

XML 문서는 규칙(Well formed Document)에 맞게 작성

 0)반드시 확장자가 xml로 지정된 텍스트 문서로 작성

 1)모든 XML 문서는 XML 버전을 나타내는 선언부에서 시작해야 하며, 한글을 나타내려면 'encoding="euc-kr"'이라는 명령을 명시해야 한다.

 2)사용자가 작성한 태그 이름을 사용할 수 있으며, 태그의 이름을 지정할 경우 첫 글자는 A ~ Z와 a~z 또는 _로만 시작해야 한다(단, 태그 이름 안에 xml 문자가 절대 들어가서는 안 된다)

 3)반드시 한 개의 루트 앨리멘트가 존재해야 한다

 4)태그안의 모든 속성값은 큰따옴표 ("") 또는 작은따옴표('')로 감싸서 나타내어야 한다

 5)앨리멘트와 앨리멘트가 겹칠 때는 확실하게 중첩되어 있어야 하며, 시작과 종료 태그는 이미 선언된 태그 안에 완전히 포함되어 있어야 한다

 6)태그의 이름은 대소문자를 정확히 구분되어야 하며 이름이 같고 대소문자가 다른 경우 별도의 태그이름으로 간주함

 7)xml 문서의 시작문에 encoding을 선언하는데 속성을 euc-kr로 선언하면, 태그이름이나 데이터를 한글로 사용할 수 있지만, 선언하지 않고 한글을 사용하면 뷰어에 아무런 내용이 나타나지 않는다

 8)주석문의 처리: <!-- --> * xml 문서의 첫 문장위에 주석을 입력하면 뷰어에 아무런 내용이 나타나지 않음

 9)중첩 규칙 준수: 중첩되어 있는 태그의 이름은 같아도 상관없다

 10)대소 문자의 구분: xml 문서의 앨리멘트는 대/소문자를 구분하여 사용한다

 

기본적인 XML 문서의 구성 요소

 속성(Attribute) : 같은 유형의 앨리멘트를 쉽게 구분하기 위해 색인의 개념으로 식별자를 지정하거나, 새로운 정보를 추가하기 위해 사용

 * 속성은 시작 앨리멘트에 지정해야 하고, 여러 개의 속성을 지정할 수 있다

 * 속성값은 큰 따옴표나 작은따옴표로 지정해서 표현해야 한다

 

 엔티티(Entity) 선언 : 문서 내에서 참조할 수 있는 문자 집합의 단위로 다음과 같은 기능을 나타낸다

개체

10진수

개체표현 

&gt;

&#62; 

&lt;

&#60; 

<

&apos;

&#39;

'

&quot;

&#34; 

"

&amp; 

&#38;

 

 * 엔티티는 임의의 문자열을 저장하고 있는 변수처럼 사용된다

 * 엔티티 레퍼런스(Entity references)는 엔티티에 대한 참조를 의미한다

 * 일반 엔티티와 외부 엔티티로 구분할 수 있다

 * 엔티티는 내부적으로 선언될 수 있다

 * 엔티티는 외부적으로도 선언될 수 있다

 * 일반 엔티티는 문서 자체에서 사용하기 위한 텍스트 엔티티로 참조하는 구분자는 &와 ;를 사용한다

 

 처리 명령 : 문서가 응용 프로그램의 명령을 포함하도록 허용한다

 PI ::= '<?' PITarget (S (Char* - (Char* '?>' Char *)))?'?>'

 PITarget ::= Name - (('X' | 'x') ('M'|'m') ('L'|'l'))

처리 명령은 문자 데이터의 일부가 아니며 응용 프로그램에 반드시 전달되어야 한다. PI는 명령이 전달되어야 할 응용 프로그램을 인식하기 위해 사용되는 목표(PITarget)로 시작한다

 

 CDATA : 문자 데이터가 발생하는 어느 곳에든 올 수 있다. 이는 문자를 포함하고 있는 텍스트 블록을 회피하기 위해 사용되는데 만약 그렇지 않으면 텍스트는 마크업으로 인식된다

 * '<![CDATA[' 로 시작해서 ']]>' 로 종료한다

 * CDATA 부분은 중첩할 수 없다.

 ex) '<greeting>'와 '</greeting>'가 마크업이 아닌 문자 데이터로 인식되는 CDATA의 한 예를 살펴보자

 -> <![CDATA[<greeting>Hello, world!</greeting>]]>

 

프로세싱 명령문

 1. 프로세싱 명령문(processing instruction): XML 응용에게 정보를 전달하기 위해 사용됨. XML 파서는 XML 문서 내에 들어있는 프로세싱 명령문을 응용 프로그램 또는 모듈에게 그대로 전달한다

 2. 프로세싱 명령문의 형식: <?Target Instruction?>

   1) Taget: 명령문을 처리할 응용 프로그램 또는 모듈의 이름으로 XML 이름 규칙에 따라 다음과 같이 작성되어야 한다

     * 문자나 언더스코어(_)로 시작되어야 하며, 그 뒤에는 문자, 숫자, 하이픈(-), 언더스코어(_), 마침표(.) 문자들이 가능하다

     * "xml"이라는 문자열은 이미 예약되어 있으므로 사용되어서는 안 된다

   2) Instruction: 응용에게 전달할 명령문이며 형식에 제약이 없다. 단, 종료 구분자로 사용되는 '?>' 문자열은 불가능하다 

 3. 프로세싱 명령문의 사용: 가장 흔한 프로세싱 명령문의 사용 예는 스타일처리를 위한 'xml-stylesheet' 명령문이다

 <?xml-stylesheet type="text/css" href="book.css"?>

 CSS 형식의 'book.css' 스타일시트 파일을 XML 문서에 적용하여 화면에 출력하라는 프로세싱 명령문이다

 * XML 파서는 이러한 명령문을 응용 프로그램(Target)에게 전달하게 된다

 4. 프로세싱 명령문의 위치: 마크업의 내부가 아니면 어디에서든 사용할 수 있다. 즉, 프롤로그 내부, 앨리멘트 내용, 도큐먼트 앨리멘트에서 모두 가능하다

 

주석(comment)

주석은 문서를 읽는 사람에게 내용의 설명을 덧붙여 가독성을 높이기 위하여 사용된다

 1. 주석의 형식: <!-- 주석내용 -->

 2. 주석을 사용할 수 있는 위치: 마크업의 내부가 아니면 어디에서든 사용할 수 있다. 프로세싱 명령문과 같다

 


 

ch02_XML 구조와 문법.ppt

 

XML 요소 정의와 사용법

 1. 시작 태그 다음에는 반드시 종료 태그가 있어야 한다(반드시 한 쌍[pair]으로 존재해야 한다]

 2. 모든 요소명은 대소문자를 구별한다

 3. 요소와 텍스트 데이터를 함께(mixed) 나타낼 수 있다

 4. 요소 내용이 없으면 빈 요소로 둘 수 있다

 5. 태그를 겹쳐(overlap) 쓰는 것을 허용하지 않는다

 6. 최상위 요소(root element)는 하나만 가져야 한다

 7. 요소명이 XML 이름 부여 규칙에 적합해야 한다

 8. 요소 내용 여러개를 나타낼 수 있다(요소 내용에 같은 or 다른 구조의 요소를 포함하는 계층 구조)

 

XML 이름 부여 규칙

 1. 문자열을 'xml'로 시작할 수 없다(단, 대문자나 대문자를 포함하면 사용할 수 있다)

 2. 요소명의 첫 문자는 문자나 '_'기호로 시작해야 한다

 3. 요소명 처음과 중간에는 공백을 사용할 수 없다(단, 공백 문자로 끝날 수는 있다)

 4. 예약어를 사용할 수 없다(ex:xml)

 

XML 속성

 요소 내에 정보나 데이터를 표현하기 위한 방법이며 한 요소에 여러 속성을 표현할 수 있다

 형식: 시작 태그 일부로 표현 -> <test attribute_name="attribute_value"></test>

 * 주의 사항

  1. 속성은 반드시 속성값을 가져야 한다

  2. 속성값은 큰 따옴표(")나 작은 따옴표(')로 감싸야 한다

  3. 속성명 부여 방법은 요소명 부여 방법과 같다

  4. 한 요소에 같은 이름의 속성을 두 개 이상 선언할 수 없다 

 

요소와 속성 표현의 차이점

 1. 요소는 데이터 자체의 표현에 유용함

 2. 속성은 데이터의 부가적인 정보, 단위 표현에 유용함

 요소

속성 

<student height="170">황규정</student>

<student>

  <height unit="cm">170</height>

</student>

 ↓ inch로 표현 어려움

 ↓ inch로도 확장 표현

<student height="170cm">황규정</student>

<student height="66.9inch">황규정</student>

<student>

  <height unit="cm">170</height>

  <height unit="inch">66.9</height>

</student>

 

XML 문서에서 특수문자를 표현하는 방법(개체 참조, 문자 참조)

 

개체 참조: 미리 정해진 코드나 이름을 사용해서 표현할 때 쓰는 개념(&와 ;를 사용해서 나타냄)

 표현 문자

 10진 문자 코드

 개체 참조명

 어 원

 <

 &#60

 &lt;

 less then

 >

 &#62

 &gt;

 greater then

 '

 &#39

 &apos;

 apostrophe

 "

 &#34

 &quot;

 quotation marks

 &

 &#38

 &amp;

 ampersand

 

문자 참조: '&' 혹은'<' '>' 이외에도 여러가지 특수기호나 특수문자를 사용해야 할 때 유용하게 사용(회사마크,문자표심볼 등)

사용 예: &#10진수문자코드;(&#10;) or &#x16진수문자코드;(&#x260F;)

 

CDATA

CDATA 섹션 내의 문자나 기호는 태그 형식이나 코드로 인식하지 않고 그대로 문자 형식으로 취급(특수기호가 많은 경우 CDATA 섹션을 사용하면 유용함) 

<! [CDATA[

     ......

     ]]> 

 * 주의사항

  1) 시작 태그 '<![CDATA[' 혹은 끝 태그 ']]>' 사이에 공백을 쓸 수 없다

  2) CDATA 섹션 안에 CDATA 섹션을 포함하지 않아야 한다

  3) 키워드 CDATA는 반드시 대문자로 쓴다

  4) CDATA 구역은 요소 콘텐츠 내의 문자 데이터 어디에나 삽입할 수 있다

  5) XML 마크업 내에서는 사용할 수 없다

 

처리 명령어: 정보를 문서 데이터 부분이 아닌 응용프로그램으로 전달

처리 데이터 형식: <?name_processor instruction?> -><?xml-stylesheet type="text/css" href="xml_style.css"?>

 

네임스페이스 개념과 사용

 네임스페이스 등장 배경

 중복 태그를 막기 위해 등장

 요소명과 속성명을 정확하게 인식하는 개념

 네임스페이스 선언

 XML에서 미리 정의된 속성을 이용해서 선언

 속성 이름은 기본 네임스페이스 선언 방식과 접두사를 사용하는 방식이 있음

 네임스페이스 이름은 유일하고, 지속적인 특징을 가짐

 

기본 네임스페이스 선언 방법

 요소에 xmlns 속성을 사용해서 네임스페이스를 선언

 하위 요소에는 자동으로 상위 요소에서 선언한 네임스페이스가 적용

 XML 문서 중 기본 네임스페이스로 선언되면 네임스페이스 접두어를 붙이지 않음

 선언 형식 

 <element_name xmlns="URI_Reference">

 취소선언 형식

 <element_name xmlns=" ">

 

접두사를 사용한 네임스페이스 선언

네임스페이스 접두사는 XML 문서 중에서 사용하는 요소명이나 속성명과 xmlns: 속성값으로 지정하는 URI 참조를 관련시키기 위해 사용 

 선언 형식

 <element_name xmlns:prefix_name="URI_Reference">

 <st:students xmlns:st="http://myeonguni.tistory.co.kr">

 접두사 사용 규칙

 1. 접두사 첫 문자는 문자 또는 언더라인(_)으로 시작

 2. URI_Reference는 xmlns: 속성값을 URI로 지정

 3. URI 경로가 다르게 지정되어 있다면, 서로 다른 URI 참조를 사용

 * 속성에도 사용 가능

 

객체지향과 XML 설계

객체지향: 모든 실세계를 객체로 보고 모델링해서 표현하는 것

객체 개념과 XML: 실세계 개념을 XML로 표현한 예

 

추상화

어떤 객체 집합의 특성이나 성질 등을 선택하고 적절하지 않은 다른 특성들을 제거 할 때 사용하는 정신적 과정

 분류 추상화(classification)

 IS_MEMBER_OF 관계

 공통 성질로 특성화되어 있는 객체들을 클래스 하나로 정의

 집단 추상화(aggregation)

 IS_PART_OF 관계

 각각의 구성 요소를 표현하는 클래스들의 집합으로부터 새로운 클래스를 정의

 일반 추상화(generalization)

 IS_A 관계 

 두 개 혹은 둘 이상의 클래스 요소 사이의 부분집합 관계를 정의

  

XML 설계 5단계

 [1단계]

 표현하려는 객체를 선택한다

 [2단계]

 객체 분석과 모델링을 통해 요소(element)를 추출해서 정의/분석한다

 [3단계]

 분석된 객체 정보로 트리를 만들고 요소에 대한 정형화된 데이터를 작성한다

 [4단계]

 분석된 정보를 나타내는 요소명과 속성명을 구분해서 정의한다

 [5단계]

 앞에서 설계한 트리를 보고 XML 문법에 맞게 작성한다

 


 

 

연습문제

 

Q1. XML 문서를 구성하는 두 개의 주요 구성앨리멘트에 대해서 설명하시오.

 

Q2. 잘 구성된 문서와 유효한 문서의 필수 구성요건에 대해서 설명하시오.

 

Q3. 다음의 XML 용어에 대하여 설명하시오

 (a) 루트 앨리멘트

 (b) 공백문자(white space)

 (c) 문자 데이터(character data)

 (d) 마크업(markup)

 (e) 문자 인코딩

 (f) 태그(tag)

 (e) 앨리멘트 타입

 

Q4. 다음은 앨리멘트 타입이름들을 나타낸다. 잘못 사용한 앨리멘트 이름들이 있다면 찾아내고 틀린 이유에 대해서 설명하시오.

  (a) 1Para - 제목

 (b) Section - value

  (c) Book&CD - 장-번호

 (d) xml-REPORT - Game:Item

 (e) P1 - 韓文.明雲

 

 

Q5. 다음의 속성 사용 예에서 틀린 부분을 찾아내고 올바르게 수정하시오. 

 <person id="p1234" id="p4352" country="korea" />

 <screen_position x:coord="382" y:coord="714" z:coord="-15" />

 <Quotation text="He said "to be or not to be"" />

 <PERSON name='kim&lee' />

 <EXPRESSION condition='5>3' />

 

Q6. 다음은 간단한 XML 문서를 나타낸다. 이 문서에서 잘못된 부분들을 찾아내고 틀린 이유에 대해서 설명하시오.

 <!--XML Sample Document -->

 <?xml version='1.0' encoding="UTF-16"?>

 <Report>

  <subject>C#언어를 이용한 보드게임개발<subject>

  < author >이영철< / author >

  <code>

  if(a > b)

    move_item();  <!--게임 아이템 이동-->

  else

    a = a & 0x3742;

  </code>

 </report>

 

Q7. (실습)도서목록을 관리하기 위한 정보를 XML로 표현하고자 한다. 다음의 각 질문에 대해 답하시오.

 (1) 모든 도서는 제목, 저자, 출판사, 발행일, 가격, ISBN 번호와 같은 정보를 가진다고 하자. XML 문서를 위한 앨리멘트 정보를 추출하시오.

 (2) 도서목록 관리를 위한 루트 앨리멘트를 만들고, 각 앨리멘트들 간의 계층관계를 트리로 표현하시오.

 (3) 위의 문서구조에 대한 실질적인 XML 문서를 작성해보라.

 (4) 위에서 작성한 XML 문서의 결과를 웹브라우저를 통해 확인해보라.

 (5) 도서의 각 목록들을 구분할 수 있도록 도서 정보를 포함하는 상위 앨리멘트를 만들라. 즉, <book><제목>...</제목><저자>...</저자><가격>...</가격></book>처럼 하위 앨리멘트를 포함할 수 있는 부모 앨리멘트 book을 만들라.

 (6) 위에서 만들어진 book 앨리멘트에 id라는 속성을 추가하라. 이 id 속성 값은 각 도서목록을 유일하게 구별할 수 있는 식별 번호로 사용된다. 예를 들어, <book id="0001">, <book id="0002">, <book id="0003">와 같이 id의 속성 값은 문서 내에서 유일한(unique) 값을 가져야 한다. 이미 작성한 XML 문서에 이와 같은 속성을 추가한 후, (3), (4)의 과정을 반혹하여 실행해보라.

 

Q8. (실습)회원 관리를 위한 회원 가입 정보를 XML로 표현하고자 한다. 다음의 각 질문에 대해 답하시오.

 (1) 기존에 운영되고 있는 인터넷 웹 사이트를 방문해보고 분석하여 필요한 앨리멘트 정보들을 추출하시오.

 (2) 회원 관리를 위한 루트 앨리멘트를 만들고, 각 앨리멘트들 간의 계층관계를 트리로 표현하시오.

 (3) 위의 문서구조에 대한 실질적인 XML 문서를 작성해보라.

 (4) 위에서 작성한 XML 문서에 대해서 XML 문서의 논리적 구조에 초점을 두고 더 자세히 고찰해보라. 예를 들면, 앨리멘트들의 관계가 논리적으로 명확한지, 또는 앨리멘트를 속성으로 변경할 수 있는지, XML 문서에서 특정 정보를 쉽게 찾아 낼 수 있는지 등에 대해서 생각해보라.



반응형