XML 기본지식

2008. 1. 4. 14:09

XML(Extensible Markup Language)
 - 구조를 갖는 텍스트
 - 데이터 표준 포맷
 - 모든 컴퓨터와 사람이 동시에 이해할 수 있는 정보 표현 방법
 - 어플리케이션 간의 데이터 교환
 - HTML(표현 중심), XML(내용, 구조 중심)

 - 필요 환경
  - IE 6.0(MSXML 3.0 파서 내장
  - XML 지원 브라우저(IE 6.0)

1. XML
2. DTD
3. Schema
4. CSS
5. XSL(XPath)
6. DOM

WellFormed Document 규칙
 - 모든 요소가 XML 스펙을 준수 할때 그 문서를 WellFormed 하다고 간주한다.
 - http://www.w3c.org/xml
 - http://www.trio.co.kr

 - Element
 - Attribute
 - Data
 - Entity

 1. XML 선언문를 시작으로 한다.
  - <xml version="1.0" ?>

 2. 다른 모든 엘리먼트를 포함하고 있는 하나의 루트 엘리먼트를 가져야 한다.

 3. 데이터를 포함하고 있는 엘리먼트는 시작태그와 끝태그를 가지고 있어야 한다. 태그는 대소문자를 구분한다.

 4. 데이터를 포함하고 있지 않고 하나의 태그만 을 사용하는 엘리먼트는 /> 로 끝나야 한다.

 5. 엘리먼트가 다른 엘리먼트에 포함될 수는 있지만 중첩은 안된다.

 6. 속성값을 따옴표로 표현한다.

 7. <,&는 태그에만 사용가능하고 데이터로 사용 불가능 하다. 사용하려면 Enter를 이용한다.

 8. XML의 주석은 <!-- -->를 사용한다.

 9. 태그명은 공백 사용이 불가능하다.

 10. 태그명은 문자, 숫자, 언더바, 하이퍼만 가능하고 첫문자는 문자 or 언더바


DTD
 - XML 설계도
 - XML 문서에서 사용될 태그, 속성의 종류나 제한 조건등을 기술
 - 일종의 프로토콜 개념, 저장 구조 개념
 - 구성 요소의 종류, 갯수, 순서 등을 명시
 - DTD 조건에 일치하는 문서 -> Valid XML Document

DTD 선언 형태
 1. DTD 구성요소
  - 요소 선언(<!ELEMENT ..>)
  - 속성리스트 선언(<!ATTLIST..>)
  - 엔티티선언(<!ENTITY..>)
 2. DTD 타입
  - 내부 DTD(XML 문서 내에 기술)
   : xml과 dtd를 따로 보관할 필요X, 한장으로 가능, 이동이 자유롭다, 처리시간이 빠르다
  - 외부 DTD(별도의 DTD 문서 *.dtd)
   : 재사용, 외부 지역에 있어도 통신이 가능하면 활용 가능
  - 겹치면 내부 우선
 3. 공개 DTD
  - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  - <!DOCTYPE 루트엘리먼트 공개유무(PUBLIC|SYSTEM) "조직명//데이터종류//언어코드">


ELEMENT 선언
 - XML 문서의 요소(태그)의 이름, 출현 횟수, 순서등을 정의

선언 형태
 - <!ELEMENT 요소명(요소형)>
 - 요소명 : 태그명
 - 요소형
  : 태그의 형태(요소내용 | 혼합 내용 | 빈요소(Empty) | 텍스트데이터)
 - ex) <!ELEMENT 이름 (#PCDATA)>

 1. 요소 내용
  - 자식의 대상이 요소로만 구성되는 경우. 텍스트X
  - 자식요소의 출현 횟수와 순서등을 결정

 2. 혼합 내용
  - 자식의 대상으로 요소와 텍스트가 둘다 나오는 경우

 3. 빈요소
  - 자식이 되는 구성 요소가 없는 경우
  - EMPTY
  - 단독태그
 
 4. 텍스트 데이터
  - 더 이상 자식 요소가 없고 텍스트 데이터만 가질 경우
  - #PCDATA
  - 말단 노드, 터미널 노드, 최하위 노드

<!-- dtdEX04.xml -->
<!-- dtdEX05.xml -->
순서 지정
 1. () : 같은 출현횟수를 가지는 요소를 묶을때...
 2. , : 나열된 요소들이 명시된 순서대로 나올때...
 3. | : 대체 가능한 요소들을 구분

<!-- dtdEX06~09.xml -->
출현횟수
 4. 표시없음 : 출현 횟수가 1, 생략불가, 중복불가
 5. ? : 출현횟수가 0 또는 1, 생략가능, 중복불가
 6. + : 출현횟수가 1이상, 생략불가, 중복가능
 7. * : 출현횟수가 0 또는 1 이상, 생략가능, 중복가능

DTD에서의 속성 선언[속성리스트 선언]
 - 엘리먼트를 설명하는 속성에 대한 정의
 - <!ATTLIST 태그명 속성명 타입  값>

속성타입
 - CDATA : 속성값으로 문자열사용
 - ENTITY : DTD에서 선언한 엔티티 참조
 - ID : 유일값
 - IDREF : ID 값 참조
 - 열거형 : 열거값

값표시방법
 - #REQUIRED : 필수
 - #IMPLIED : 생략가능
 - #FIXED : 고정값 사용
 - 기본값 : 생략하면 기본값 사용 auto (Y|N) "Y"

Entity
 -DTD와 XML Document에서 대치 가능한 컨텐츠 생성

1. General Entity
 - 모든 XML Document에서 사용 가능, Parsed Entity와 Unparsed Entity 로 나뉨
2. Parameter Entity
 - 외부 DTD에서 사용

General Entity
 - <!ENTITY 엔티티명 "대치할 내용"> : 선언시(DTD내에서..)
 - &엔티티명;:사용시(XML Document내에서..)

Built-in Entity(미리약속된)
 - &lt; &gt; &quot; &apos; &amp;
 - &#문자코드; ex) &#38; &#x26;

외부 Entity
 - 엔티티 내용만 독립파일로 생성해서 호출 가능
 - !<ENTITY 이름 SYSTEM "파일명">

Parameter Entity
 - 엔티티 선언시에만 사용 가능하고, 외부 DTD에서만 사용 가능하다.
 - !<ENTITY % 엔티티명 "대치할 내용"> : 선언시(외부 DTD내에서..)
 - %엔티티명;:사용시(엔티티 선언시..)

Schema
 - DTD의 단점을 보완, 기능 강화
 - 유효한 데이터 검증
 - DTD에서 표현하지 못하는 데이터 표시 가능
 - 사용자 정의 데이터 타입 생성 가능
 - 기존의 엘리먼트, 어트리뷰트를 상속받아 확장, 제한이 가능
 - 대체 엘리먼트 가능, 상황에 따른 구조 변경 가능
 - 데이터 모델 (XML 문서 구조) & 데이터 타입(데이터 형식 정의)

Schema 선언
 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <!-- 스키마 내용 -->
 <!-- xmlns = XML NameSpace -->
  <xsd:element>
 </xsd:schema>

Schema 호출
 <루트엘리먼트 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="스키마파일.xsd">
  <!-- XML 내용 -->
 </루트엘리먼트>


CSS & XML
 - XML 데이터를 브라우저 환경에 시각적으로 표시
 - <?xml-stylesheet href="CSS파일명" type="text/css"?>


XSL(eXtensible Stylesheet Language)
 - XSLT(XSL Transformation) : XML문서를 또다른 XML문서나 비XML문서로 변환

XSL 선언문
 - <xsl:stylesheet version="1.0" xmlns:xsl="http://ww.w3.org/1999/XSL/Transform" xmlsn:fo="http://www.w3.org/1999/XSL/Format"> (표준선언문)
 - <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> (비표준선언문)

XSL 기본형(*.xsl)
 <?xml version="1.0" encoding="euc-kr"?>
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
  <xsl:template match="/">
   XSL 처리내용 기술
  </xsl:template>
 </xsl:stylesheet>

적용 XML 문서(*.xml)
 <?xml version="1.0" encoding="euc-kr"?>
 <?xml-stylesheet href="XSL파일" type="text/xsl"?>
 <root>
 </root>

XPath
 - XML문서의 노드 접근 표현식
 - XPath 표현식에선 가상의 최상위 엘리먼트 존재 -> "/"

 ex) match="표현식"
 1. /
  - 가상의 루트 노드
 2. *
  - 노드 전체
 3. .
  - 노드 자기 자신
 4. /a/b/c
  - 루트노드에서 출발해서.. a자식, b자식, c노드
 5. a
  - a노드자신(상대경로), 이전 표현식에서 /로 시작하는 표현식이 1회이상 출현
  - /a 와는 다른 표현
 6. //a
  - 전체 노드 중 a를 이름으로 갖는 노드
  - 처음 a노드를 만나면 탐색 중단
 7. a[b]
  - [] 조건
  - b노드를 자식으로 갖는 a노드
  - a/b
 8. a[b='c']
  - c텍스트데이터를 갖는 b노드를 자식으로 갖는 a노드
 9. a[b='c']/d
  - c텍스트데이터를 갖는 b노드를 자식으로 갖는 a노드의
    자식 노드인 d노드
 10. a/@b
  - a노드의 속성중 b라는 속성
 11. a[@b]
  - b라는 속성을 갖는 a노드 ex) <a b="">data</a>
 12. a[@b='c']
  - b속성값이 c인 a노드 ex) <a b="c">data</a>
 13. a[@b='c']/d
  -b속성값이 c인 a노드의 자식 노드d
 14. a/@*
  - a의 모든 속성
 15. a/*
  - a의 모든 자식엘리먼트
 16. a[@b &gt;= c and @b &lt;= d]
  - a[@b >= c and @b <= d]

XPath 함수
 - name() - 노드명 반환
 - text() - PCDATA 반환(단, 순수 자신의 PCDATA만)
 - position() - 노드의 위치를 지정 ex) //회원[position()=2]
 - last() - 노드집합의 마지막 노드 위치 반환
 - count() - 노드집합의 갯수 반환
 - sum() - 노드집합의 모든 합 반환
 - contains() - 문자열 안에 특정 문자열 포함 유무 확인
 - starts-width() - 문자열이 특정 문자열로 시작하는지 유무

Axis 표현
 1. self::*  - 자기 자신
 2. attribute::* - 속성
 3. parent::* - 부모 노드(단일)
 4. child::* - 자식 노드(집합O)
 5. ancestor::* - 직계 조상 노드(집합O)
 6. ancestor-or-self::* - 자신을 포함한 직계 조상 노드
 7. descendant::* - 자손 노드
 8. descendant-or-self::* - 자신을 포함한 자손 노드
 9. following::* - 자손을 제외하고 자신보다 하위에 표기된 노드 전체
 10. following-sibling::* - 자신보다 하위에 표기된 형제 노드
 11. preceding::* - 직계 조상을 제외하고 자신보다 상위에 표기된 노드 전체
 12. preceding-sibling::* - 자신보다 상위에 표기된 형제 노드

XSL 표현
 1. <xsl:template match="XPath표현"></xsl:template>
  - XML 문서 내용을 템플릿 지정 형태로 변환
  - 템플릿의 기본 형식은 HTML
  - 템플릿은 패턴부와 액션부 나뉜다

 2. <xsl:apply-template select="XPath표현"</xsl:template>
  - 특정 템플릿을 이 위치에서 적용하겠다..

 3. <xsl:value-of select="XPath표현"/>
  - 특정 노드의 값 출력(텍스트)

 4. <xsl:for-each select="XPath표현">
   반복 실행 구문
  </xsl:for-each>
  - 같은 태그가 반복될 경우 반복 실행

 5. <xsl:sort select="XPath표현" data-type="number|text" order="ascending|descending"/>
  - 노드값에 의한 정렬
 
 6. <xsl:if test="조건식">실행문</xsl:if>
  - 조건식
  - 조건식 부정 -> not()함수
 
 7. <xsl:choose>
   <xsl:when test="조건식1"></xsl:when>
   <xsl:when test="조건식2"></xsl:when>
   <xsl:when test="조건식3"></xsl:when>
   <xsl:otherwise></xsl:otherwise>
  </xsl:choose>
  - 다중 조건문
 
 8. <xsl:element name="요소명">요소값</xsl:element>
  - 엘리먼트 동적 생성
 
 9. <xsl:attribute name="속성명">속성값</xsl:attribute>
  - 속성 동적 생성

 10. <xsl:comment></xsl:comment>
  - 주석 동적 생성
 
 11. <xsl:text></xsl:text>
  - 텍스트 노드 동적 생성

DOM(Document Object Model)
 -객체지향 프로그래밍 언어에서 XML 문서의 내용을 쉽게 다룰 수 있도록 제작한  API의 표준 스펙
 -플랫품과 언어에 독립적
 -XML 문서와 문서의 일부를 생성하고, 문서를 탐색하고, 문서의 부분을 이동, 복사, 제거하거나 속성을 추가, 수정, 제거할 수 있다.

DOM 인터페이스
 - 기초 인터페이스
  1. Node
  2. Document
  3. Nodelist
  4. Element
  5. Attr
  6. Text
  7. Comment
 - 확장 인터페이스
  1. CDATASection
  2. ProcessingInstruction
  3. Entity

XML 접근방식
 1. DOM(Object)
 2. SAX(Stream)

XML 닷넷 지원 클래스
 - System.XML
 - DOM : XmlDataDocument
 - SAX : XmlReader, XmlWriter
 - System.Xml.XPath
 - System.Xml.Xsl

XMLTextReader/XmlTextWriter
 - 처리 속도가 빠르다
 - 메모리 효율이 높다(버퍼 사용X)
 - 커서 이동이 단순 전진
 - 수정, 삭제가 어렵다
 - 유효성 검사를 추가로 해야 한다.

XmlDocument(DOM)
 - 문서 구조를 유연하게 접근 가능(트리구조)
 - 다른 언어의 접근 방식과 유사(DOM)
 - 수정, 삭제가 용이
 - XPath 표현에서의 접근 속도가 느리고, 오버헤드가 크다
 - 메모리 효율이 낮다(버퍼 사용O)

XmlDocument
 - Document 객체
XmlNode
 - 노드(엘리먼트, 속성, PCDATA...)
XmlNodeList
 - 노드 집합(검색)
XmlElement
 - 엘리먼트
XmlAttribute
 - 속성
 
XPath 클래스
 - XPath 표현식을 이용한 노드 접근 방식 제공
 - DOM 접근방법보다 빠른 검색 속도
 - 단순 검색, 편집 기능X

Posted by 나비:D
:
BLOG main image
by 나비:D

공지사항

카테고리

분류 전체보기 (278)
Programming? (0)
---------------------------.. (0)
나비의삽질 (5)
Application (177)
SQL (51)
Web (27)
etc. (14)
Omnia (0)
---------------------------.. (0)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

달력

«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Total :
Today : Yesterday :