엘리먼트

XML 2018. 6. 18. 18:11

 - 엘리먼트(Element)란?
다른 이름으로 원소 선언이라고도 한다.

 

XML 문서의 가장 기초를 구성하는 틀.
[정보와 구조적 정의를 포함한다.]

엘리먼트들을 사용하여 문서의 논리적인 구조를 정의하는 것으로 가장 중요하다.

 

 책을 예로 들자면 한 권의 책은 장들로 구성되고 장들은 절로, 절 안에는 마찬가지로 논리적인 구조를 가지게 되는데
엘리먼트는 XML 문서 안에서의 논리적인 계층을 형성하게 만들어 주는 도구이다.

 

<책>  
  <장>  
    <절> 
      ......
    </절>
  </장>
</책> 

 

각 엘리먼트들은 부모 엘리먼트의 밑에 각각 부모 - 자식의 관계를 형성하고 있다.
<책> 이라는 루트 엘리먼트는 그 아래 <장> 이라는 엘리먼트가 있고
여기서 <책> 엘리먼트를 부모 엘리먼트, <장> 엘리먼트를 자식 엘리먼트가 되는 것이다.


XML에는 문서 객체가 있어서, 그것으로부터 마크업 트리 구조가 시작할 수 있는 뿌리를 제공하기도 한다.
만일 Book이 문서의 루트 엘리먼트라면 이것이 문서 객체의 자식이 된다.

 

 


 - 엘리먼트 선언 방법
<!ELEMENT  엘리먼트 이름  내용모델>

<!ELEMENT 다음에 엘리먼트의 이름을 쓰고 다음에는 내용 모델이 나온다.

 

항상 <!ELEment 로 시작하며 대소문자를 구별한다.

 

 

 (옳은 예시)

<ADDRESS> 110 main street </ADDRESS>

<address> 110 main street </address>

 

 (틀린 예시)

<ADDRESS> 110 main street </address>

 

 

태그 

의미 

 <fist_tag> 

 시작 태그로 적합함. 

 </first_tag> 

 끝 태그로 적합함.

 <fist tag>

 엘리먼트 이름은 공백이 있어서는 안됨.

 <1st_tag>

 엘리먼트 이름의 시작은 숫자여서는 안됨.

 </ fist_tag>

 끝 태그를 의미하는 / 다음에 공백은 허용하지 않음.

 


 - 내용 모델이란?
한 엘리먼트의 자식으로써 나타날 수 있는 엘리먼트 및 텍스트 데이터에 대한 묘사
즉, 한 엘리먼트의 밑에 어떤 엘리먼트나 텍스트가 올 수 있는지 기술하는 것.

 

 

 - 내용 모델의 종류
>> 엘리먼트들의 목록
>> #PCDATA
>> ANY 키워드
>> EMPTY 키워드
>> 혼합내용(mixed-content)

 

 

 - 엘리먼트들의 목록이란?
엘리먼트의 자식으로서 다른 엘리먼트들을 선언하는 것.
괄호 안에 자식 엘리먼트들의 목록을 쓰면 된다.

 

 

 - 자식 노드만을 가질 때 - children
children은 별도의 키워드를 사용하는 것이 아니라,

엘리먼트들이 나타날 위치와 나타날 횟수를 그 규칙에 명시한 것으로
목록에 있는 모든 엘리먼트는 자체적인 선언을 가져야 한다.


 

기호 

 설명

예제 

 기호없음

 반드시 한번 나타남

 tag

 ,

 순서대로 나타남

 tag1, tag2

 ?

 한번 나타날 수도 있고 안 나타날 수도 있음

 tag?

 |

 선택(하나만 사용할 수 있다)

 tag1 | tag2

 *

 0번 이상 나타남

 tag*

 +

 1번 이상 나타남

 tag+

 ()

 그룹

 (tag1 | tag2), tag3

 

 

 

선언 예시)

 1. <!ELEMENT Homepage (......)>

 Homepage 라는 이름의 루트 엘리먼트를 선언.

괄호 안에는 내용 모델을 집어넣어 루트 엘리먼트의 자식으로서 어떤 엘리먼트들이 있는지 선언한다.

 

 2. <!EMEMENT Homepage (Title, Greeting?, News, Menu)>

 

제목을 위한 엘리먼트 Title

방문객을 위한 인사말 엘리먼트 Greeting [인사말은 꼭 필요한 것이 아니라 생각하여 선택적인 것(기호 ?로 선언)]

홈페이지의 새로운 소식을 알리는 News 엘리먼트

홈페이지 메뉴 목록을 위한 Menu 엘리먼트

 

라고 정의했을 때 3번부터 5번처럼 선언하게 된다.

 

 3. <!EMEMENT News (Date, Title, Text)>

 날짜, 제목, 글을 나타내는 Date, Title, Text 엘리먼트가 차례대로 나타난다고 선언함.

 

 4. <!EMEMENT Menu (Item*)>

각각의 메뉴 항목을 나타내는 Item 엘리먼트가 있는데, 메뉴 항목이 하나도 없는 경우 무한대까지 고려한다면 4번과 같이 선언한다.

 

 5. <!EMEMENT Menu (Item+)>

만약 메뉴 항목이 적어도 하나라도 있어야 하는 것으로 선언하고 싶다면 5번과 같이 선언한다.

 

 

 

 - 엘리먼트의 종류 및 선언 방식

 

1. #PCDATA

엘리먼트의 시작 태그와 종료 태그 사이에 파싱되는 문자 데이터가 들어가는 것을 말함.

이 선언은 최하위 엘리먼트에 사용됨.

 

  예)

<!ELEMENT taxt (#PCDATA)>

taxt라는 이름의 엘리먼트 시작 태그와 종료 태그 사이에 문자 데이터가 들어가게 하고 싶을 때 예와 같이 선언한다.

 

 

 

 

2. ANY 키워드

 시작 태그와 끝 태그 사이에 문자 데이터와 임의의 원소들이 올 수 있다는 것을 의미함.

 

 즉, 엘리먼트의 내용으로써 모든 종류의 데이터와 마크업을 포함할 수 있음을 선언하며

 어떠한 엘리먼트나 텍스트 순서나 횟수에도 상관없이 나타날 수 있다는 것을 의미함.

 

 예)

<ELEMENT anyTag ANY>

ANY는 정확한 문서를 정의하기 위해서는 바람직하지 않지만,

새로운 DTD 개발을 하는 경우에는 자주 사용될 수 있다.

 

 

 

 3. EMPTY 키워드

 엘리먼트가 내용을 갖지 않는 공백 태그를 선언할 때 사용되는 키워드.

EMPTY로 정의된 엘리먼트는 속성을 가질 수는 있지만, 시작 태그와 종료 태그 사이에 아무런 내용도 있을 수 없다.

 

 예)

<!ELEMENT HT EMPTY>

 HT라는 공백 태그를 위한 원소를 선언한 예

 

 

 4. 혼합내용(mixed-content)

반드시 나와야 한다거나 순서대로 나와야한다는 조건 없이, 여러 개의 엘리먼트가 자식 엘리먼틀 나타나는 것을 허용함.

 

 예)

<!EMEMENT mixed ( #PCDATA | otherTag )*>

 항상 #PCDATA가 먼저 나와야 한다는 것에 주의해야함.

 

 

 

 

 - 공백 태그(empty tag)란?

시작 태그와 끝 태그 사이에 어떠한 내용도 포함하지 않는 경우에 이러한 태그를 공백 태그라고 함.

 

 

 

참고 문헌 및 링크

 ADD-ON XML

 클릭하세요 XML

 자바 개발자를 위한 XML

 

'XML' 카테고리의 다른 글

엔티티  (0) 2018.06.19
애트리뷰트  (0) 2018.06.19
DTD 란?  (0) 2018.06.17
XML의 응용들  (0) 2018.06.16
HTML과 XML의 차이점  (0) 2018.06.15
Posted by Resian
,

DTD 란?

XML 2018. 6. 17. 16:31

 - DTD 란?

문서의 구조를 정의하는 규칙의 집합.

문서의 구조화 원소 및 원소의 속성 등을 정의함으로써 작성된 XML 문서가 유효한지 여부를 판단하는데 사용

 

XML 문서에 내장되는 DTD의 목적은 문서 타입 정의(DOcument Type Definition : DTD)의 위치와 존재를 알리는 것이다.

 

 

 HTML DTD를 만든 것 처럼 XML은 사용자가 문서의 DTD를 정의할 수 있는데
정의된 DTD에 의한 문서를 만들 때 문서 인스턴트를 만든다고 말한다.
또, DTD를 따르는 문서를 '유효하다(Valid)'고 말하고, valid 문서라고 하는데
DTD를 해석할 수 있어서 문서가 DTD의 구조에 맞는지 검사할 수 있는 파서를 '검증용 파서(validating parser)'라고 부른다.

 

 

 

 

 - HTML의 DTD 선언


첫 번째 줄에 HTML DTD 선언이 있다.

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
......
</HEAD>
<BODY>
......
</BODY>
</HTML> 

 

위 내용은 이 문서가 HTML 4.0 DTD에 의한 문서라는 것을 의미함.
즉, 모든 태그들은 DTD에 정의가 되어있고 HTML 문서 작성자는 DTD에 정의되어있는 태그들을 사용한다는 것을 의미.
[참고 : HTML의 DTD는 W3C에 의해 정의되어 있다]


 


 - DTD 문서 구조에 적용되는 제약 조건들
1. 어떤 엘리먼트가 나타날 수 있는 상황을 제한한다.
2. 구체적인 엘리먼트와 연계될 수 있는 속성들을 제한한다.
3. 속성에 대입될 수 있는 값들을 제한한다.
4. 속성값에 기본값 혹은 고정값을 제공한다.
5. 특수 문자들을 식별하는데 사용될 수 있는 XML의 기본 엔티티 이름 집합을 확장한다.
6. 미리 정의된 표기법과 매치되는 특정 엘리먼트와 엔티티의 데이터형을 제한한다.


 DTD는 선언들의 집합으로 구성된다.
(엘리먼트 선언, 속성 선언, 엔티티 선언, 표기법 선언 그리고
DTD와 그것의 구성요소들의 역활에 대한 설명을 하는 주석을 포함할 수 있음)

 

 

 

 - DTD 종류
DTD는 XML 문서 내에 함께 있을 수도 있고, 다른 파일로 외부에 존재할 수도 있다.

즉, 내부 DTD와 외부 DTD가 각각의 파일로 정의되거나, 두 방법이 모두 사용될 수도 있다는 것이다.

 

 하나의 DTD에서 다른 DTD의 내용을 호출하여 사용할 수 있고, XML 문서에서

내부 DTD와 외부 DTD를 함께 사용할 수 있는데 내부 DTD가 외부 DTD보다 항상 우선 순위가 높다.

 

 

 

  - 내부 DTD
내부 DTD를 사용하려면 XML 선언과 루트 엘리먼트 사이에 DTD를 정의해야 함.

 

 <?xml version="1.0" ?>
<!DOCTYPE example [
......
]>
<example>
......
</exapmple>

 

위 예시에서 DOCTYPE은 문서 타입을 정의한다는 뜻의 키워드이며 반드시 그대로 써주어야 한다.

<!DOCTYPE 다음에는 DTD의 이름을 써주며, DTD 이름은 루트 엘리먼트의 이름이 같아야 한다.

 

 

 

 내부 DTD 형태 정리

>>> DTD 선언

<!DOCTYPE  name  [ 마크업 선언* ]>

 

>>> 마크업 선언

원소 선언, 속성 선언, 엔티티 선언, 노테이션 선언, PI , 주석

 

 

 

 

  - 외부 DTD

 DTD는 XML 문서 내부에 직접 선언될 수도 있지만, 일반적으로 외부에 별도 DTD를 선언하는 방법을 사용함.

외부 DTD 사용시 여러 개의 XML 문서에서 매번 DTD를 기술하지 않고,

공통된 DTD만 공유해서 사용할 수 있다는 장점이 있음


 

<?xml version="1.0" ?>
<!DOCTYPE example SYSTEM "exam.dtd">
<example>
......
</example> 

 


위 예시에서 SYSTEM이라는 키워드는 DTD가 공개 표준이 아닌 자체적으로 개발해서 사용하는 DTD임을 의미하고
SYSTEM 다음에 나타나는 것은 DTD가 존재하는 곳의 위치를 나타내는 URL이 된다.
example DTD는 현재 XML 문서와 같은 디렉토리에 있는 exam.dtd 라는 파일에 정의되어 있다는 것을 알 수 있다.

 

 

 

 외부 DTD 형태 정리

>>> DTD 선언

<!DOCTYPE  name  외부ID>

 

>>> 외부ID

SYSTEM URl  / PUBLIC  PubidLiteral  SystemLiteral

 

 

 

 

   - 외부 DTD 중 공개 표준으로 되어있는 경우

공개 표준이 아닌 DTD에서 사용했던 SYSTEM 대신

아주 유명한 DTD이거나 표준으로 정의된 DTD인 경우 PUBLIC라는 키워드를 사용한다.


 

<?xml version="1.0" ?>
<!DOCTYPE example PUBLIC "-//myCompany//DTD example//EN"
 "http://mycompany/exam.dtd" >
<example>
......
</example> 

 

PUBLIC 다음  SystemLiteral  부분에 DTD의 이름과 공개 식별자 구조를 기술하고,

DTD 이름을 이용하여 문서의 구조를 파악할 수 없는 경우

SystemLiteral 부분에 DTD 파일이 있는 곳의 URL을 기술하게 된다.

 


 공개 식별자 구조는 어떻게 되는가?
DTD가 ISO 표준이라면 식별자는 ISO로 시작함.
표준이 표준 단체에 의해 공식적으로 승인된 것이라면 첫 문자가 +이고, 아니면 -가 나온다.

 

 

간단하게 정리하자면
"-//myCompany//DTD example//EN"
 "http://mycompany/exam.dtd" >


라는 예시에서

 

-     = 공개 식별자
myCompany = DTD 식별자
example   = DTD 이름
EN    = ISO 639에서 지정한 언어 식별자(EN은 영어)
http://mycompany/exam.dtd = DTD를 찾을 수 있는 URL


라는 것이다.

 

 

 

단어 설명


 - 엘리먼트(Element)
마크업 태그와 그 안에 포함된 내용

 

 - 루트 엘리먼트(Root Element)
문서 내 모든 엘리먼트와 내용을 포함하고 있는 XML문서의 엘리먼트

 

 - 주석(Comment)
XML 프로세서가 해석하지 않는 설명문

 

 - 파서(Parser)

주어진 종단 기호의 열(列)이 특정의 문법에서 생성되는지를 판정하고,

초기 기호로부터 그 열에 도달하는 생성 규칙의 열을 발견하는 프로그램

 

 

 

참고 문헌 및 링크

 ADD-ON XML

 자바 개발자를 위한 XML

 

파서 설명 링크

https://terms.naver.com/entry.nhn?docId=832189&cid=42344&categoryId=42344

'XML' 카테고리의 다른 글

애트리뷰트  (0) 2018.06.19
엘리먼트  (0) 2018.06.18
XML의 응용들  (0) 2018.06.16
HTML과 XML의 차이점  (0) 2018.06.15
Markup의 설명과 XML의 탄생 배경(역사)  (0) 2018.06.15
Posted by Resian
,

XML의 응용들

XML 2018. 6. 16. 22:38

 

- CDF(Channel Definition Format)
마이크로소프트 익스플로러에서 사용되는 채널을 묘사하기 위해 사용되는 포맷으로 XML의 한 응용


 - SMIL(Syncronized Multimedia Integration Language)
웹상에서 멀티미디어들을 동기화시키는 규칙들을 묘사하기 위한 XML의 응용
SMIL을 사용하면 여러 멀티미디어 자원들을 시간과 화면 배치 등 자유자재로 구사할 수 있음

리얼네트워크사의 리얼 플레이어, 마이크로소프트의 미디어 플레이어 등이 이 포맷을 지원함

WML(Wireless Markup Language)
휴대용 정보 기기에서 사용하는 마크업 언어


 - CML(Chemical Markup Language)
분자식 같은 화학식이나 그래프를 서술하기 위한 XML의 응용


- MathML(Mathematical Markup Language)
HTML로 복잡한 수학식 표현이 불가능하고 의미를 전달할 수 없는 점을 해결하기 위해 만들어진 XML 응용

RDF(Resource Description Framework)
웹상에서 자원들에 대해 묘사하는 메타 데이터 기법을 제공하는 XML 응용


 - XHTML
SGML의 한 응용인 HTML을 XML의 응용으로 재구성한 것.


 ? 그래서 XHTML은 왜 만들어 졌나?
THML이 XML이 가지는 장점을 활용할 수 있기 위해서는

XML의 문법에 의해 재구성될 필요가 있기에 만들어짐.

 

 

  참고 문헌 및 링크

 ADD-ON XML

 

'XML' 카테고리의 다른 글

엘리먼트  (0) 2018.06.18
DTD 란?  (0) 2018.06.17
HTML과 XML의 차이점  (0) 2018.06.15
Markup의 설명과 XML의 탄생 배경(역사)  (0) 2018.06.15
XML 개요  (0) 2018.06.13
Posted by Resian
,