엘리먼트

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
,