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(미리약속된)
- < > " ' &
- &#문자코드; ex) & &
외부 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 >= c and @b <= 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