XML Programing

Download Report

Transcript XML Programing

XML PROGRAMMING
2부 3장
DataBase를 이용한 XML 문서작성
1
XML PROGRAMMING
XML 데이터의 저장과 검색 (1)
▶ 텍스트파일로 저장과 검색



확장자가 .xml인 파일 형태로 XML 데이터를 저장하여 검색 시스템 등으로
검색하는 방법
트랜잭션이나 베타 제어 등과 같은 비교적 소규모인 웹 프로그램에서 사용되는
방법
모든 문서의 검색
- 워드프로세서의 '찾기' 기능과 같이 모든 문서에 대하여 검색
- XML문서의 논리구조를 유지하고 있는 파일을 검색하면 그 구조를 고려하지 않고
내용에 관계없는 정보까지 나타나게 된다는 문제점을 가지고 있음

구조를 의식한 검색
- XML 문서에서 요소들 사이의 구조를 고려하여 검색
- XML구조는 그 정보의 의미를 반영하고 있는 것이 일반적이므로 구조를 사용한 검색은
비교적 검색결과가 정확
2
XML PROGRAMMING
XML 데이터의 저장과 검색 (2)
▶ 관계형 데이터베이스로의 저장과 검색



일반적으로 사용되는 데이터베이스는 관계형 데이터베이스
관계형 데이터베이스는 기본적으로 행과 열로 테이블을 구성하므로 트리 구조를
가진 XML을 그대로 저장하지 않음
XML의 구조나 내용을 복수의 테이블로 나누고 XML문서의 각요소를 매핑하는
기법을 사용
- XML문서의 논리구조를 유지하고 있는 파일을 검색하면 그 구조를 고려하지 않고 내용에
관계없는 정보까지 나타나게 된다는 문제점을 가지고 있음

XML 문서를 테이블로 표현
<학생테이블>
<학생>
<학번>2001103</학번>
<이름>홍길동</이름>
</학생>
.....................중략(반복)
<학생>
<학번>2003001</학번>
<이름>이은미</이름>
</학생>
</학생테이블>
학번
이름
2001103
홍길동
…
…
2003001
이은미
3
XML PROGRAMMING
XML 데이터의 저장과 검색 (3)
▶
관계형 데이터베이스의 검색
학생테이블

학과테이블
학번
이름
학년
학과코드
학과코드
학과명
2003001
이은미
1
0001
0001
컴퓨터공학과
2002002
박명수
2
0002
0002
정보통신공학과
2001103
홍길동
3
0003
0003
산업공학과
SQL에서는 테이블에서 정보를 추출할 때 SELECT 구문을 사용하는데 이때 SELECT 와
FROM 구 및 WHERE 절을 사용하여 특정 테이블을 검색
SELECT 컬럼이름 FROM 테이블 이름 WHERE 조건

학년이 2학년이상인 학생이름을 검색하고 싶을 경우, WHERE 조건절에 학년 > 2 라는
조건을 추가하여 검색
SELECT 이름 FROM 학생테이블 WHERE 학년 > 2
4
XML PROGRAMMING
XML 데이터의 저장과 검색 (4)

복수테이블에 대한 질의문은 학과명이 컴퓨터공학과인 학생의 이름을 검색하기
위해 컴퓨터공학과의 학과코드가 학생테이블의 학과 코드와 같은 조건을 사용
SELECT 학생테이블.이름
FROM 학생테이블, 학과테이블
WHERE 학생테이블.학과코드 = 학과테이블.학과코드
AND 학과테이블.학과명 = ‘컴퓨터공학과’
▶ 추출된 데이터의 XML로의 변환


데이터베이스에 저장된 데이터를 검색하여 XML문서를 작성하려면 SQL을 이용하여
추출한 정보를 XML로 변환
데이터베이스에서 검색한 데이터를 XML로 변환하고 다시 HTML 문서형태로 만들어
지기까지 작업순서는 다음과 같다.
단계
작업
1
SQL에서 정보를 추출
2
추출한 정보를 XML로 변환
3
XML을 XSLT, DOM, SAX 등을 이용하여 HTML로 변환
4
HTML을 클라이언트에 보냄
5
XML PROGRAMMING
Excel 2000/97 데이터의 XML 변환
▶
Excel 2000/97 데이터의 XML 변환


Excel 문서를 XML로 변환하는 Converter를 설치해야하는데 교재의 부록을 참고하여
DB2XML 프로그램을 설치
다음의 순서에 따라 작업
① 윈도우즈에 설치되어있는 Microsoft Excel 2000 프로그램을 실행시킨후, Sheet1에
그림과 같이 입력하고 ExcelExam.xls로 저장
6
XML PROGRAMMING
Excel 2000/97 데이터의 XML 변환 (2)
② 윈도우즈에서 설정(S)의 제어판(C)에 있는 관리도구에서 데이터 원본(ODBC)를 실행시키면
그림과 같은 대화상자가 나타나는데 이때 추가(D) 버튼을 클릭
7
XML PROGRAMMING
Excel 2000/97 데이터의 XML 변환 (3)
③ 새 데이터 원본 만들기 대화 상자에서 Microsoft Excel Driver(*.xsl)를 선택한 뒤 마침
버튼을 클릭
8
XML PROGRAMMING
Excel 2000/97 데이터의 XML 변환 (4)
④ 그림과 ODBC Microsoft Excel 설정 대화상자에서 데이터원본 이름(N) 항목에 ExcelOdbc
라고 입력하고 통합 문서 선택(S) 버튼을 클릭후, 통합 문서 선택 대화 상자에서 저장된
ExcelExam.xls 파일을 선택하고 확인버튼을 클릭
9
XML PROGRAMMING
Excel 2000/97 데이터의 XML 변환 (5)
⑤ DB2XML 프로그램을 실행시키면 DB2XML Application 대화상자가 나타나면, 그림과 같이
DTD를 클릭한다.
10
XML PROGRAMMING
Excel 2000/97 데이터의 XML 변환 (6)
⑥ Specification of Output 대화상자가 나타나는데 이때 그림과 같이 선택하고 ok버튼을
클릭
⑦ DB2XML Application 대화상자에서 Database를 선택하면 Specification of Database 대화상
대화상자가 나타나는데 그림과 같이 설정하고 ok 버튼을 클릭.
11
XML PROGRAMMING
Excel 2000/97 데이터의 XML 변환 (7)
⑧ DB2XML Application 대화상자에서 XML Attribute를 선택하면 Specification of XML
Attributes 화면이 나타나는데 그림과 같이 설정
12
XML PROGRAMMING
Excel 2000/97 데이터의 XML 변환 (8)
⑨ DB2XML Application 대화상자에서 XML Element를 선택한다. 그러면 Specification of
XML Elements 대화상자가 나타나는데 그림과 같이 설정
13
XML PROGRAMMING
Excel 2000/97 데이터의 XML 변환 (9)
⑩ Stylesheet 탭을 누른후 그림과 같이 공백으로 처리
14
XML PROGRAMMING
Excel 2000/97 데이터의 XML 변환 (10)
⑪ Database query 부분에 검색할 질의문을 작성후, File name 부분에 ExcelExam.xml 이
름을
입력하고 Generate XML 버튼을 클릭
15
XML PROGRAMMING
Excel 2000/97 데이터의 XML 변환 (11)
⑫ ①∼⑩ 번 과정을 마치고 나면 그림과 같이 ExcelExam.xml 파일이 생성
⑬ XML 문서를 실행한 결과
실행결과
16
XML PROGRAMMING
Access 2000/97 데이터의 XML 변환
▶ Access 2000/97 데이터의 XML변환

앞서 설명한 Excel 2000/97 데이터의 XML변환에서처럼 DB2XML을 사용하여 변환
실행결과

XML 문서를 실행한 결과
실행결과
17
XML PROGRAMMING
객체지향 데이터베이스로의 저장과 검색
▶ 객체지향 데이터베이스






XML 데이터를 객체지향 데이터베이스(Object Oriented DataBase:OODB)에 저장할
경우 XML의 트리 구조를 객체지향의 데이터모델에 맞추어 저장
객체지향 언어에서는 다양한 정보를 객체로서 관리
보통 객체는 메모리 상에 존재하고 컴퓨터전원을 끄면 소멸되므로 실제 프로그
램에서는 객체에 대한 정보를 파일 시스템이나 관계형 데이터베이스에 저장하고 프로
그램이 실행될 때마다 정보를 읽어내어 객체를 재구축 함
객체를 재구축 하는 코드는 복잡해지기 쉽고 보수성이 떨어지므로 객체간의 구조를 유
지한 채 디스크에 기록할 수 있는 데이터베이스가 고안됨
객체지향 데이터베이스에서는 문자와 숫자 데이터의 처리와 저장을 중심으로 하는
관계형 데이터베이스보다 다양한 데이터를 취급하는 것이 용이해 짐.
객체지향 데이터베이스는 복잡한 정보관리가 요구되는 분야를 중심으로 수요가 넓어지
고 있었는데, XML의 등장과 함께 XML 데이터구조를 무리 없이 저장할 수 있어서 각광
을 받게 됨.
18
XML PROGRAMMING
객체지향 데이터베이스로의 저장과 검색 (2)
▶ 객체지향 데이터베이스와 XML

DOM형 데이터모델
- DOM에서 사용되고 있는 객체를 그대로 객체지향 데이터베이스에 저장하는 형식
- 사용하는 클래스는 Node 클래스와 이것을 계승한 Document 클래스 등으로 구성
- 다양한 형태의 XML을 객체지향언어로 조작하고 싶거나 또는 객체지향 데이터
베이스에 저장할 때 매우 적합함

DTD형 데이터모델
- XML 문서의 구조는 DTD 정의에 의해 제약을 받을 수 있음.
- DTD 제약에 따라 XML 문서가 작성되었을 때 DTD와 XML 문서 내용은 객체지향의
클래스와 인스턴스 관계에 대응됨.
- 다만 DTD 전체를 하나의 클래스로 취급하는 것은 현실적이 아니므로 보통의 경우
요소형 선언마다 클래스를 작성
19
XML PROGRAMMING
XML 전용데이터베이스로의 저장과 검색
▶ XML 전용데이터베이스로의 저장과 검색

XML 전용 데이터베이스의 특징
- XML 전용 데이터베이스의 특징은 XML과 데이터베이스 데이터모델의 다른 점을
의식할 필요가 없음
- XML 전용 데이터베이스를 사용하는 장점
• 테이블이나 객체에서 XML을 재구축 할 필요가 없음
• 설계 변경 시 작업이 편리함
• 검색할 때는 XML의 다양한 질의어들을 이용하므로 융통성을 가짐

XML 검색
- 데이터베이스에 저장된 XML 데이터를 검색하는 경우에 관계형 데이터베이스에서는
주로 SQL을 사용
- XML 전용 데이터베이스 등에서는 XML 전용의 질의 언어가 많이 사용되고 있으며
XML의 계층구조로 검색하는 특징이 있음
20
XML PROGRAMMING
XML 전용데이터베이스로의 저장과 검색 (2)

XML-QL
- XML-QL은 DTD간의 XML 데이터변환이나 다수의 XML 데이터를 통합하기 위한
목적으로 설계된 XML 질의언어
- SQL과 비슷한 WHERE-IN-CONSTRUCT 구조로 중첩된 질의를 지원
- WHERE-IN-CONSTRUCT 구조

WHERE
검색할 XML 패턴을 기술
IN
검색할 정보를 지정
CONSTRUCT
얻고자 하는 XML 결과
XQL(XML Query Language)
- XQL은 XML문서나 프로그래밍 언어 안에 삽입하여 사용하는 간단한 질의언어
- XQL은 XQL식이라 하는 문법에 따라 기술되며 패턴이 XPath와 같고 노드가 기준
- XQL은 1998년 2월 문서계 XML 연구자 사이에서 처음 초안이 만들어지고 같은해
9 월 에 W3C 에 제 안 되 었 고 XquerY 라 고 도 불 리 며 사 용 시 스 템 으 로 는
Tamino(Software AG)와 eXcelon(excelon Corp.)이 있음
21
XML PROGRAMMING
XML 전용데이터베이스로의 저장과 검색 (3)
- XQL규격은「http://www.w3c.org/TR/xquery」에서 확인
- XML-QL과 XQL과의 일반적 특징을 비교하면 다음의 표와 같다.
구분
주요특징
XML-QL
XQL
질의어가 XML 형식과 유사
질의어가 디렉토리 표시방식과
유사
질의결과 포멧팅 가능
질의 결과 포맷팅 불가능
상용화
표준화동향
주로 학계에서 사용
1998년에 제안
주로 산업체에서 사용
아직 제안되지 않음
아직 표준화 되지 않음
22
XML PROGRAMMING
관계형 데이터베이스와 XML
▶ 관계형 데이터베이스의 XML 표현

요소로의 데이터베이스 표현
- 관계형 데이터베이스에서는 큰 개념을 기술하는 데이터 포인트들이 컬럼으로 구성
된
테이블로 표현
- 학생 정보를
표현하기위한
테이블
생성구문
CREATE
TABLE Student
(
StudentNumber varcher(50),
StudentName varcher(50),
Address varchar(100),
TelNumber varchar(50),
EmailAddress varchar(60))
- 테이블 생성결과
23
XML PROGRAMMING
관계형 데이터베이스와 XML (2)
- XML에서는 데이터 포인트들의 그룹을 다시 그룹핑되어 요소로 표현되는 더 큰 개념
으로 기술 할 수 있음.
- Student 테이블의 정보를 각각의 요소로 표현한 결과
<!ELEMENT Student (StudentNumber, StudentName, Address, TelNumber, EmailAddress)>
<!ELEMENT StudentNumber (#PCDATA)>
<!ELEMENT StudentName (#PCDATA)>
<!ELEMENT Address (#PCDATA)>
<!ELEMENT TelNumber (#PCDATA)>
<!ELEMENT EmailAddress (#PCDATA)>
<Student>
<StudentNumber> 001 </StudentNumber>
<StudentName> 홍길동 </StudentName>
<Address> 대전시 중구 오정동 </Address>
<TelNumber>042-111-1111 </TelNumber>
<EmailAddress> [email protected] </EmailAddress>
</Student>
24
XML PROGRAMMING
관계형 데이터베이스와 XML (3)

XML 검색
- XML 문서내의 데이터 포인트를 표현하는 또 다른 방법은 속성을 이용
- 아래는 속성을 이용하여 <Student>를 정의한 소스와 상세 데이터가 <Student>
요소의 속성으로 저장된 부분임.
<!ELEMENT Student EMPTY>
<!ATTLIST Student
StudentNumber CDATA #REQUIRED
StudentName CDATA #REQUIRED
Address CDATA #REQUIRED
TelNumber CDATA #REQUIRED
EmailAddress CDATA #REQUIRED>
<Student StudentNumber=“001”
StudentName=“홍길동”
Address=“대전시 중구 오정동”
TelNumber=“042-111-1111"
EmailAddress=“[email protected]"/>
25
XML PROGRAMMING
MS-SQL Server 2000과 XML과의 연동
▶ FOR XML을 이용한 SQL Server 2000에서의 검색

FOR XML을 이용한 SQL Server 2000에서의 데이터 추출과정

FOR XML의 기본 문법
26
XML PROGRAMMING
MS-SQL Server 2000과 XML과의 연동 (2)

FOR XML에서의 3가지 모드
모드

설명
RAW
테이블의 각행이 ROW라는 요소로 표현되고, 컬럼은 속성이 됨
AUTO
SELECT 구문의 칼럼 순서에 의해 계층 구조 형태로 표현
EXPLICT
검색된 데이터의 컬럼이름을 지정하거나 계층 구조 형태로 표현
FOR XML의 3가지 옵션
옵션
설명
XMLDATA
XML문서와 함께 해당 문서의 스키마를 반환해 준다. (XDR)
ELEMENTS
ELEMENTS 옵션은 AUTO 모드에서만 사용하는데 컬럼값이 최상위 요소
의 하위요소로 표현
BINARY
BASE64
검색되는 모든 이진 데이터
(예를 들어 SQL Server에서 IMAGE 타입의 데이터)가 BASE64로 인코
딩되어 표현되며 RAW모드와 EXPLICIT 모드에서 이 옵션을 함께 사용
27
XML PROGRAMMING
MS-SQL Server 2000과 XML과의 연동 (3)

RAW 모드를 이용한 데이터 검색
- FOR XML의 RAW 모드를 이용하여 SELECT 구문을 수행하면 최상위 요소가 <row>
태그로 표현
- XML의 계층구조로 표현되지는 않음.
① 학번(number)과 이름(name) 그리고 주민등록번호(cs_number) 등으로 구성된
student 테이블을 생성
number
name
cs_number
……
20002206
김기동
791103-1234567
……
20011126
이순정
800208-1587890
……
……
……
……
……
20021124
홍길동
810624-1386522
……
②student 테이블의 number, name, cs_number 데이터를 추출하기위한 SELECT
구문으로 RAW 모드를 사용
SELECT number, name, cs_number
FROM student
FOR XML RAW
28
XML PROGRAMMING
MS-SQL Server 2000과 XML과의 연동 (4)
③ 작성한 코드를 실행하면 <row>태그가 최상위 요소로 전환, 컬럼들은 속성이름
(number, name, cs_number)이 되고 검색된 데이터는 속성값으로 표현
29
XML PROGRAMMING
MS-SQL Server 2000과 XML과의 연동 (5)

AUTO 모드를 이용한 데이터 검색
- 단순 검색 : 한 개의 테이블에서 검색할 때 RAW 모드로 검색한 결과와 비슷하게
표현되지만, AUTO 모드에서는 최상위 요소의 이름이 테이블의 이름으
로 표현
① student 테이블에서 number, name, cs_number 컬럼을 검색하는 구문으로
AUTO 모드만을 사용
SELECT number, name, cs_number
FROM student
FOR XML AUTO
② 검색결과는 student 테이블 이름이 최상위 요소이름(<student>)이 되었고, 각각
의
컬럼은 속성이름(number, name, cs_number, dept_name)으로 표현
30
XML PROGRAMMING
MS-SQL Server 2000과 XML과의 연동 (6)
- ELEMENTS 옵션을 이용한 검색 : AUTO 모드에서 ELEMENTS 옵션을 사용하여 검색
을 하면 테이블의 모든 컬럼들이 각각 최상위 요소
와 그 하위 요소로 표현
① AUTO 모드와 ELEMENTS 옵션을 함께 사용하여 검색
SELECT number, name, cs_number
FROM student
FOR XML AUTO, ELEMENTS
② 검색결과는 student 테이블 이름이 최상위 요소이름(<student>)이 되었고,
각각의 컬럼이 그 하위 요소이름(<number>,<name>,<cs_number>)으로 표현
<student>
<number>20002206</number>
<name>김기동</name>
<cs_number>791103-1234567</cs_number>
</student>
.....................중략(반복)
<student>
<number>20021124</number>
<name>홍길동</name>
<cs_number>810624-1386522</cs_number>
</student>
31
XML PROGRAMMING
MS-SQL Server 2000과 XML과의 연동 (7)
-두개 이상의 테이블에서 검색 : 두 개 이상의 테이블에서 검색할 때 검색 결과가 계층적
구조로 나타남
① student 테이블과 dept 테이블이 존재하며, AUTO 모드를 이용하여 검색
Student 테이블
Dept 테이블
number
name
……
dept_name
number
……
20002206
김기동
……
컴퓨터공학과
20002206
……
……
……
……
……
……
……
20021124
홍길동
……
국어국문학과
20021124
……
② Student 테이블과 Dept 테이블에서 number, name, cs_number, dept_name
데이터를 추출하기 위한 SELECT 구문
SELECT student.number, student.name, student.cs_number,
dept.dept_name FROM student, dept
WHERE student.number = dept.number
FOR XML AUTO
32
XML PROGRAMMING
MS-SQL Server 2000과 XML과의 연동 (8)
③ 작성한 코드를 실행하면 student 테이블 이름이 최상위 요소이름(<student>)이 되었고,
dept 테이블 이름이 하위 요소이름(<dept>)이 되었다. 또한 각 컬럼은 속성이름
(number, name, cs_number, dept_name)으로, 데이터는 속성값으로 표현
33
XML PROGRAMMING
MS-SQL Server 2000과 XML과의 연동 (9)

EXPLICIT 모드를 이용한 데이터 검색
- EXPLICIT 모드에서 컬럼별칭 지정 문법
: EXPLICIT 모드를 사용하기 위해서는 SELECT 구문에서 컬럼의 별칭을 기술, 만약
컬럼별칭을 지정하지 않고 검색할 경우 에러가 발생, 다음은 컬럼의 별칭을 기술
하는 형식을 나타내고 있음
ElementName ! TagNumber ! PropertyName ! Directive
컬럼별칭지정
ElementName
TagNumber
PropertyName
Directive
설명
XML 문서에서 표현활 요소 이름을 나타냄
요소의 태그에 부여되는 고유 값
특정 속성의 이름을 지정하거나 하위 요소이름을 나타냄
EXPLICIT 모드에서 지원되는 명령어를 나타냄(지시어)
34
XML PROGRAMMING
MS-SQL Server 2000과 XML과의 연동 (10)
① EXPLICIT 모드에서 지원되는 명령어를 사용하지 않고 태그의 별칭을 지정하는 소스
SELECT 1
NULL
student.number
student.name
student.cs_number
FROM student
FOR XML EXPLICT
as Tag,
as Parent,
as [학생정보 ! 1 ! 학번],
as [학생정보 ! 1 ! 이름],
as [학생정보 ! 1 ! 주민등록번호]
② 실행시킨 결과를 보면 학생정보가 요소이름이 되었고 학생정보의 속성이름으로
학번,이름,주민등록번호가 생성
<학생정보 학번="20002206"
<학생정보 학번="20011126"
.....................중략(반복)
<학생정보 학번="20021100"
<학생정보 학번="20021124"
이름="김기동” 주민등록번호="791103-1234567"/>
이름="이순정” 주민등록번호="800208-1587890"/>
이름="이영진” 주민등록번호="810822-1356545"/>
이름="홍길동” 주민등록번호="810624-1386522"/>
35
XML PROGRAMMING
MS-SQL Server 2000과 XML과의 연동 (11)
- EXPLICIT 모드에서 지원되는 명령어
명령어
ELEMENT
설명
해당 데이터를 인코딩하며 XML 문서의 요소 형태로 표현
XML
해당 데이터를 인코딩하지 않고 XML 문서의 요소형태로 표현
XMLTEXT
데이터베이스의 칼럼에 포함된 데이터를 XML 문서에서 요소
의 속성으로 표현할 때 사용
CDATA
ID, IDREF, IDREFS
검색한 데이터를 XML 데이터의 CDATA 섹션으로 표현
요소의 속성을 id, idref, idrefs의 형식이 되도록 함
36
XML PROGRAMMING
MS-SQL Server 2000과 XML과의 연동 (12)

ELEMENT, XML 명령어을 이용한 검색
- ELEMENT와 XML 명령어는 EXPLICIT 모드와 함께 사용되는데 XML 문서에서
요소를 생성
① 학생의 학번과 이름을 XML의 요소로 지정한 소스코드
SELECT 1
NULL
student.number
student.name
student.cs_number
FROM student
FOR XML EXPLICT
as Tag,
as Parent,
as [학생정보 ! 1 ! 학번 ! ELEMENT],
as [학생정보 ! 1 ! 이름 ! ELEMENT],
as [학생정보 ! 1 ! 주민등록번호 ! ELEMENT]
② 위와같은 소스를 실행시키면 학생정보가 최상위 요소이름이 되었고 학번, 이름,
주민등록번호가 하위 요소의 이름으로 생성
<학생정보>
<학번>20002206</학번>
<이름>김기동</이름>
<주민등록번호>791103-1234567</주민등록번호>
</학생정보>
.....................중략(반복)
37
XML PROGRAMMING
MS-SQL Server 2000과 XML과의 연동 (13)

XMLTEXT 명령어를 이용한 검색
- XMLTEXT 명령어는 데이터베이스의 컬럼에 포함된 데이터를 XML 문서에서 요소의
속성으로 표현할 때 사용
① student 테이블이 구성되었다고 가정
number
name
……
Etc
20002206
김기동
……
<추가사항 군별=“육군”>소집해제</추가사
항>
20021100
이영진
……
<추가사항 군별=“해군”>군필</추가사항>
……
……
……
……
20021124 홍길동 …… <추가사항 군별=“공군”>군필</추가사항>
② 저장되어있는 데이터를 병역사항 요소의 속성으로 표현
SELECT 1
NULL
student.number
student.name
etc
FROM student
FOR XML EXPLICT
as Tag,
as Parent,
as [병역사항 ! 1 ! 학번],
as [병역사항 ! 1 ! 이름],
as [병역사항 ! 1 ! ! XMLTEXT]
38
XML PROGRAMMING
MS-SQL Server 2000과 XML과의 연동 (14)
③ 작성한 구문을 실행시키면 다음과 같이 etc 컬럼에 저장되어있던 데이터가 학생
정보 요소의 속성으로 표현
<병역사항 학번="20002206" 이름="김기동“ 군별=육군">소집해제</병역사항>
<병역사항 학번="20021100" 이름="이영진“ 군별=해군">군필</병역사항>
.....................중략(반복)
<병역사항 학번="20021124" 이름="홍길동“ 군별=공군">군필</병역사항>
39
XML PROGRAMMING
MS-SQL Server 2000과 XML과의 연동 (15)

CDATA 명령어을 이용한 검색
- CDATA 명령어는 데이터가 text, ntext, varchar, nvarchar 형식일 때만 사용이 가능
데이터를 CDATA 형식으로 표현
① 학생의 주민등록번호를 CDATA 형식으로 표현하기 위해 student.cs_number
컬럼을 검색할 때 별칭을 CDATA로 표현
SELECT 1
NULL
student.name
student.cs_number
FROM student
FOR XML EXPLICT
as Tag,
as Parent,
as [학생정보 ! 1 ! 이름],
as [학생정보 ! 1 ! ! CDATA]
② 실행시킨 결과를 보면 학생의 주민등록번호(cs_number)가 CDATA 형태로 표현
컬럼 별칭을 지정할 때 PropertyNmae을 지정해서는 안됨
<학생정보 이름="김기동”<![CDATA[791103-1234567]]></학생정보>
<학생정보 이름="이순정”<![CDATA[800208-1587890]]></학생정보>
.....................중략(반복)
<학생정보 이름="이영진”<![CDATA[810822-1356545]]></학생정보>
<학생정보 이름="홍길동”<![CDATA[810624-1386522]]></학생정보>
40
XML PROGRAMMING
MS-SQL Server 2000과 XML과의 연동 (16)

ID, IDREF, IDREFS 명령어을 이용한 검색
- ID, IDREF, IDREFS 명령어는 XML 문서 내의 요소들이 식별되어야 할 경우에 사용
① 학생의 학번을 ID 형식으로 선언하여 EXPLICIT 모드로 검색하는 소스코드
SELECT 1
as Tag,
NULL
as Parent,
student.number
as [학생정보 ! 1 ! 학번 ! ID],
student.name
as [학생정보 ! 1 ! 이름]
FROM student
FOR XML EXPLICT
② 실행시킨 결과를 보면 일반적인 검색과 동일하게 각각의 요소와 속성으로 표현
<학생정보 학번="20002206" 이름="김기동”>
<학생정보 학번="20011126" 이름="이순정”>
.....................중략(반복)
<학생정보 학번="20021100" 이름="이영진”>
<학생정보 학번="20021124" 이름="홍길동”>
41
XML PROGRAMMING
MS-SQL Server 2000과 XML과의 연동 (17)

XMLDATA 옵션을 이용한 검색
- ID 명령어와 XMLDATA 옵션을 사용하여 EXPLICIT 모드로 검색, 검색 결과는
스키마 구조를 포함한 XML 형태로 표현하고자 할 때 이용
① 학생의 학번을 ID 형식으로 선언하고 FOR XML 부분에 EXPLICIT 모드와
XMLDATA 옵션을 함께 사용
SELECT 1
as Tag,
NULL
as Parent,
student.number
as [학생정보 ! 1 ! 학번 ! ID],
student.name
as [학생정보 ! 1 ! 이름]
FROM student
FOR XML EXPLICT, XMLDATA
42
XML PROGRAMMING
MS-SQL Server 2000과 XML과의 연동 (18)
② 소스를 실행시키면 다음과 같이 스키마 정보를 포함한 형태로 나타나며, 실행결
과처럼 학번의 dt:type 속성이 id 형식으로 정의
<Schema name="Schema1" xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ElementType name="학생정보" content="mixed" model="open">
<AttributeType name="학번" dt:type="id"/>
<AttributeType name="이름" dt:type="string"/>
<attribute type="학번"/>
<attribute type="이름"/>
</ElementType>
</Schema>
<학생정보 xmlns="x-schema:#Schema1" 학번="20002206" 이름="김기동 " >
<학생정보 xmlns="x-schema:#Schema1" 학번="20011126" 이름="이순정 " >
.....................중략(반복)
<학생정보 xmlns="x-schema:#Schema1" 학번="20021100" 이름="이영진 " >
<학생정보 xmlns="x-schema:#Schema1" 학번="20021124" 이름="홍길동 " >
43
XML PROGRAMMING
OPENXML을 이용한 SQL Server 2000에서의 저장
▶ OPENXML을 이용한 SQL Server 2000에서의 저장

OPENXML을 이용한 SQL Server 2000에서의 데이터 저장과정
FOR XML
XML
문서
SQL Server
2000
OPENXML

OPENXML의 기본 문법
- OPENXML은 SQL Server 2000에서 로우셋 제공자로 XML문서의 로우셋 뷰를 생성
- 로우셋은 테이블과 같기 때문에 SELECT쿼리에서 테이블 혹은 관계형 뷰 대신에 사용
- OPENXML은 XML 문서나 조각으로부터 데이터를 데이터베이스 테이블에 저장
㉮ OPEN XML의 파라미터
OPEN
XML
(idoc, rowpattern, flags)
㉯ WITH 구문
[WITH (SchemaDecl | Tablename)]
44
XML PROGRAMMING
OPENXML을 이용한 SQL Server 2000에서의 저장
(2)

OPENXML의 파라미터
- OPENXML의 파라미터는 XML문서를 받아서 sp_preparedocument 프로시저를 사용
하여 XML문서를 분석하여 메모리에 올려놓고 핸들값을 반환해 주고, 핸들값이 유지
되는 한 메모리상에 분석된 XML문서가 상주하도록 함
파라미터
Idoc
설
명
XML 문서를 처리하기 위한 내부적으로 다루는 handle 값
sp_preparedocument 시스템 저장 프로시저를 사용하여 document
handle을 받아냄
Rowpattern Xpath 표현, 이 표현은 생성된 로우셋으로 매핑될 XML 문서 안의
노드를 식별
XML 문서의 속성/하위 요소가 생성되는 행과 매핑되는 형태를 결
정하는 태그
Flags
0 일때
속성 중심의 매핑에 대한 기본값
1 일때
속성 중심 매핑을 할대
2 일때
요소 중심으로 매핑하여 나타낼때
3 일때
Byte 타입 혼합하여 매핑할때
45
XML PROGRAMMING
MS-SQL Server 2000과 XML과의 연동 (3)

WITH 구문
- WITH문을 사용하여 실제 테이블이나 컬럼에 각 노드를 매핑시킬수 있고, 생성할
로우셋의 설명을 제공하는데 사용
선택사항
지정하지 않음
테이블 사용
직접 지정
내용
정의된 로우셋 스키마를 사용
이미 존재하는 테이블 이름을 지정하여 그 테이블 스키마를
로우셋 뷰를 생성하는데 사용
기본값으로 로우셋 컬럼 같은 이름으로 된 XML의 속성/하위
요소로 매핑, 만약 로우셋 칼럼 이름이 다르거나 컬럼을 XML의
메타 속성으로 매핑하고자 할 때, 매핑 정보를 추가할 수 있음
46
XML PROGRAMMING
OPENXML을 이용한 SQL Server 2000에서의 저장
(1)
▶ OPENXML을 이용한 데이터 저장

OPENXML이 데이터베이스 테이블에 데이터를 저장하는 단계
순서
내용
1
XML 문서의 DOM 표현을 메모리에 생성
2
OPENXML을 사용하여 XML 로우셋 뷰를 생성 (OPENXML의 일부분으로
원하는 요소를 얻기 위한 Xpath 표현을 지정함)
3
생성된 로우셋을 INSERT, UPDATE, DELETE문에 전달하여 데이터베이스
를 갱신
4
메모리상의 XML 문서를 제거
① FOR XML에서와 동일하게 학번(number)과 이름(name), 주민등록번호(cs_number)
등으로 구성된 student 테이블을 생성하여 파라미터와 구문을 적용
number
name
cs_number
……
20002206
김기동
791103-1234567
……
20011126
이순정
800208-1587890
……
……
……
……
……
20021124
홍길동
810624-1386522
……
47
XML PROGRAMMING
OPENXML을 이용한 SQL Server 2000에서의 저장
(2)② XML 을 삽 입 하 기 위 한 사 용 자 저 장 프 로 시 저 를 생 성 하 기 위 해 CREATE
PROCEDUER(PROC 생략 가능)의 구문을 사용,
매개 변수는 xmldata 라고 입력하여 지정
프로시저 이름은 insert_student,
CREATE PROC insert_student @xmldata ntext AS
........ 중략
- 저장 프로시저 종류
프로시저
내용
시스템저장프로시저
SQL 서버에서 미리 저장되어져 사용되는 프로시저.
거의 대부분이 master 데이터베이스에 저장되어 있음.
Sp_help 등과 같이 sp_로 시작하는 프로시저.
사용자 저장 프로시저
사용자가 임의로 생성하여 사용하는 프로시저.
확장 저장 프로시저
DLL로 구현되어 있는 외부 함수들이 이에 속함.
Xp_로 시작하는 프로시저.
48
XML PROGRAMMING
OPENXML을 이용한 SQL Server 2000에서의 저장
(3) ③ hDoc이라는 하나의 변수를 선언하기 위하여 DECLARE 구문을 이용
CREATE PROC insert_student @xmldata ntext AS
DECLARE @idoc int
........ 중략
④ XML 을 문 서 로 읽 어 들 여 구 문 분 석 을 하 기 위 해 EXEC 구 문 을 사 용 ,
sp_xml_preparedocument 저장 프로시저를 통해서 xmldata변수의 내용을 읽음
DECLARE @idoc int
EXEC sp_xml_preparedocument @hDoc OUTPUT, @xmldata
........ 중략
⑤ 읽어온 XML 문서에서 root 엘리먼트 이하를 student 테이블에 삽입하기 위하여
INSERT INTO 구문과 WITH 구문을 사용.
OPENXML을 사용하여 XML구조와 관계형 구조를 매칭
INSERT INTO student
SELECT *FROM OPENXML[@hDoc, '/root/student',2]
WITH student
49
XML PROGRAMMING
OPENXML을 이용한 SQL Server 2000에서의 저장
(4) ⑥읽어온 XML문서를 메모리에서 sp_xml_removedocument 저장프로시저를 통해 제거
WITH student
EXEC sp_xml_removedocument @hDoc
GO
⑦ OPENXML을 이용한 프로시저를 작성후 SQL Server 2000의 저장프로시저에 저장
CREATE PROC insert_student @xmldata ntext AS
DECLARE @idoc int
EXEC sp_preparedocument @idoc OUTPUT, @xmldata
INSERT INTO student
SELECT *FROM OPENXML[@idoc, '/root/student',2]
WITH student
EXEC sp_removedocument @idoc
GO
50
XML PROGRAMMING
OPENXML을 이용한 SQL Server 2000에서의 저장
(5) ⑧ 생성한 저장프로시저를 실행하기 위하여 다음과 같이 XML 문서를 작성
<root xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<sql:header>
<sql:param name ="xmldata">
</student>
<sql:param>
</sql:header>
<sql:query> exec insert_student @xmldata </sql:query>
</root>
⑨ 입력폼을 가지고 있는 HTML 문서를 작성한 후 그림과 같이 입력하여 전송.
InsertExam_1.html 에서는 입력된 데이터를 student_insert.xml 파일로 보내고,
student_insert.xml 은 데이터를 받아서 OPENXML 구문이 있는 프로시저를 실행.
CLICK
51
XML PROGRAMMING
OPENXML을 이용한 SQL Server 2000에서의 저장
(6) ⑩ 저장작업이 실행된 후의 student 테이블의 모습.
저장프로시저에서 OPENXML 구문과 함께 사용한 INSERT INTO가 데이터를
SQL Server 2000의 테이블에 저장
number
name
cs_number
……
20002206
김기동
791103-1234567
……
20024104
김석훈
760322-1567899
……
20011126
이순정
800208-1587890
……
……
……
……
……
20021124
홍길동
810624-1386522
……
52
XML PROGRAMMING
SQL Server 2000에서의 HTTP 접근

SQL Server 2000의 설정과정은 교재 424 Page를 참고
53
XML PROGRAMMING
HTTP를 이용한 데이터 검색 (1)
▶ URL 쿼리 허용

URL 쿼리는 URL 쿼리 문자열이 가상 디렉터리에 접근될 때 사용되는 T-SQL 구문

URL 쿼리는 개발한 SQL Server 애플리케이션을 테스트할 때 유용

클라이언트 애플리케이션이 T-SQL 문장을 서버측에 보내기 위한 문자열을 사용할 수
있기 때문에 이 URL 쿼리는 보안적인 측면이 약하다.
http://203.247.40.92/student?sql=SELECT* FROM member
FOR XML AUTO&root=root
URL 쿼리 실행 결과
 컬럼 중에서 number, name, css_number의 값만을 검색, 공백이었던 부분에 + 기호
를 사용하여 연결
http://203.247.40.92/student?sql=SELECT+number,name,css_number+FROM+
member+FOR+XML+AUTO&root=root
URL 쿼리 실행 결과
※ test용 임시 ID 및 PASSWORD
ID
PASSWORD
stud1, stud2, stud3
pw1, pw2, pw3
54
XML PROGRAMMING
HTTP를 이용한 데이터 검색 (2)
▶ 템플릿 쿼리 허용



템플릿 쿼리는 애플리케이션이 가상디렉터리를 통해 처리되는 것을 허용하는 방법으로
템플릿은 웹서버에 xml 파일로 저장
T-SQL 구문을 파일 내에 포함하며 쿼리를 수행하기 위해 서버측의 템플릿을 사용하는
데 이때 쿼리 결과만을 클라이언트에게 보여줌.
이러한 방법은 실제 쿼리의 내용을 완전히 숨길수 있기 때문에 데이터 처리에 대해 보
안효과를 가지고 있음

설정 방법은 교재 432 페이지 참고

‘student.xml’ 파일 -> CLICK
http://203.247.40.92/student/template/student.xml
템플릿 쿼리 실행 결과

저장프로시저 저장과 프로시저 호출을 위한 XML 문서 작성
=> 교재 435 페이지 및 사례연구 1(학생정보관리편) 참고
55
XML PROGRAMMING
HTTP를 이용한 데이터 검색 (3)
▶ XPath 허용

XPath 언어는 표준 탐색언어로 W3C에 의해서 표준규약이 완성

XPath 쿼리는 XPath 언어의 주석 스키마로 된 데이터를 검색하는 것을 가능하게 한다.

스키마는 데이터베이스의 데이터와 XML 요소 속성을 매핑하는 파일로 웹서버 상에
저장, 스키마에 의해 지정된 데이터가 반환될 것인지를 XPath로 지정할 수 있음.
http://203.247.40.92/student/student_dbobject/member/@number
XPath 실행 결과
▶ Post 허용

post 방식은 XML 이외의 다른 스크립트 언어나 웹언어에서 데이터를 전송할 때에도
많이 사용하는 방식
56
XML PROGRAMMING
DataBase를 이용한 XML 문서 작성

교재 440 페이지 및 사례연구 1(학생정보관리편) 참고

사례연구 1 (학생정보관리편)
http://203.247.40.92/
CLICK

사례연구 2 (XML을 이용한 쇼핑몰)
http://203.247.40.92/shop
CLICK
※ 사례연구 1, 2 예제 사이트 이용시 데이터 삭제 금지!
57