Web Multimedia Documents

Download Report

Transcript Web Multimedia Documents

II. XML과 Database 연동
[Beginning XML, 제13장]
멀티미디어 데이터베이스
(2001.10.23~11.1)
임순범
숙명여대 정보과학부 멀티미디어학과
1
목차
[교재] Beginning XML, David Hunter 외 5인 공저, 정보문화사, 2001.
제13장 XML과 데이터베이스, pp.625-654.
1. 관계형 Database 예제
2. 기존의 Database 사용하기
3. XML을 Database에 통합하기
4. Database 제작사와 XML
1) Microsoft SQL Server
2) Oracle XDK
2
1. 관계형 Database 예제
• RDB의 특징
– 테이블을 사용하여 데이터를 구조화 : Field, Record
– 초점은 Application이 아니라 데이터 그 자체
• 예제
– Parts table,
– Customer table
item
description
account_no
name
home_phone
work_phone
E16-25A
책상
125692
홍길동
02)555-1212
02)555-2121
E25-25A
소파
125693
고소영
02)555-1111
02)555-1112
125694
이몽룡
043)854-9919
02)555-1010
– Order table
order_no
account_no
item
quantity
date
123587
125692
E16-25A
16
2001/9/1
123588
125692
E16-25A
1
2001/10/1
123589
125694
E16-25A
20
2001/10/1
123590
125693
E25-25A
5
2001/10/1
3
• SQL (Structured Query Language)
SELECT name FROM Customer WHERE account_no = ‘125692’
• 결과 :
name
홍길동
SELECT Order.order_no, Order.account_no, Customer.name, Order.item,
Parts.description, Order.quantity, Order.date
FROM Order, Customer, Parts
WHERE Order.order_no = ‘123587’
AND Customer.account_no = Order.account_no
AND Parts.item = Order.item
order_no account_no
123587
125692
item
quantity
date
name
description
E16-25A
16
2001/9/1
홍길동
책상
– Recordset : ADO(Active Data Objects) 기능
– Uniqueness (Database Integrity) : Primary key
4
• SQL Join
– SELECT o.order_no, o.account_no, c.name, o.item, p.description,
o.quantity, o.date
FROM Parts p INNER JOIN Order o ON p.item = o.item
INNER JOIN Customer c ON o.account_no = c.account_no
WHERE o.order_no = ‘123587’
o.order_no o.account_no c.name
123587
125692
o.item
홍길동 E16-25A
p.description o.quantity
책상
16
o.date
2001/9/1
• Normalization
– Database Integrity, easy to application, but speed (need to join)
– vs. Denormalization
5
2. 기존의 Database 사용하기
• N-계층 구조
Data services
모든 데이터 저장, 보통 경우는 Database
(경우에 따라stored procedure 사용)
Data Objects
Database와 Business Objects가 서로 통신
(예, ADO Recordset)
Business Objects
Presentation
application 논리에 따라 presentation과 data층 통신
사용자와 의사소통
• N-계층 구조의 장점
– 개발자 역할이 단순화 : 각 계층 별로
– 변경이 용이하고, 재사용성 증가
– 분산 시스템의 확장성 및 보안이 좋다.
• N-계층 구조에 XML 적용 => 어느 계층?
6
• 이기종 분산 환경의 예
DB2
SQL server
Oracle
DB2 data
object
SQL server
data object
Oracle
data object
Business Object
Presentation
Business Object
...
Presentation
• XML을 사용한 분산 환경 구축
 SQL
 COM 표준 인터페이스
(Component Object Model)
예, ADO VB, JDBC
 XML 언어 사용 저장
- 서버에 독립적,
- HTTP 프로토콜 통신
 서버 독립적 XML 표현
ASP, CGI, VB, Java
=> XML, HTML, etc.
– BizTalk, SOAP, XML-RPC 등
7
예제 코드
• Data Object로부터 XML 결과 받기
– Data Object 생성하고, 결과 XML문서를 작성하는 VB 코드
– Database 에 접속하기 위하여 ADO(ActiveX Data Object) 객체 사용
– MSXML 파서를 사용하여 XML 문서 생성
• 예제 코드
– ADO의 Connection 객체 사용하여 DB에 접속
– DB를 작동하기 위한 SQL 구문 준비
Dim cnnDatabaseConnection AS ADODB.Connection
Set cnnDatabaseConnection = New ADODB.Connection
…
Dim strSQL As String
strSQL = “SELECT name FROM Customer WHERE account_no = ‘125692’ ”
=> SQL 실행 & 결과 XML 문서 생성
8
– Connection 객체의 Execute() 메소드가 SQL 구문 호출
– 결과는 ADO의 Recordset 객체로
Dim rsResults AS ADODB.Recordset
Set rsResults = cnnDatabaseConnection.Execute(strSQL)
– 문서 생성 : MSMXL의 DOM 객체 사용
Dim objXML As MSXML.DOMDocument
Set objXML = New MSXML.DOMDocument
objXML.loadXML “<root> <name/> </root>”
‘ 초기 문서 생성
objXML.selectSingleNode(“/root/name”).Text = rsResults(“name”).Value
‘ SQL 결과를 XML 문서에 추가
– 결과
<root>
<name />
</root>
<root>
<name> 홍길동 </name>
</root>
9
3. XML을 Database에 통합하기
• 비정규화 방법으로 저장하기
– XML문서 그대로 저장, primary key는 별도로 저장
– 예제) Order table
order_no
account_no
order_xml
123587
125692
<?xml version=“1.0”?>
<Order number=“123587”>
<Account number=“125692”>
<Name>홍길동</Name>
<Homephone>02)555-1212</ Homephone>
<Workphone>02)555-2121</ Workphone>
</Account>
<Item number=“E16-25A”>
<Description>책상</Description>
<Quantity>16</Quantity>
</Item>
<Date>2001/9/1</Date>
</Order>
...
– SELECT order_xml FROM Order WHERE order_no = ‘123587’
10
• Staging Database
–
–
–
–
–
–
Front-end : 비정규화 데이터를 임시 저장 장소에 보관
Back-end : 정규화된 RDB에 저장
application 사용 시 편리 : join 필요 없음, 간단한 SQL
Staging DB에 임시로 보관, 일정 기간 후 삭제 => 공간 문제 해결
제약점 : 데이터를 가공하여 사용할 때 추가 작업 필요
예) 폼기반 웹 응용 : 폼 입력시 최종 submit에만 DB에 전송
• XML 형식의 데이터
–
–
–
–
Data Object에서 XML 문서를 SELECT 혹은 INSERT하는 SQL명령
Data Object에서 수행 작업이 감소 => 더 많은 응용 가능
Front-end 응용에서는 XML의 모든 장점 적용 가능
XML문서를 분할하여 저장하는 것도 가능 => 여러 기법 적용
11
예제
• 간단한 Data Object 처리
Dim cnnDatabaseConnection AS ADODB.Connection
Set cnnDatabaseConnection = New ADODB.Connection
Dim strSQL As String
strSQL = “SELECT order_xml FROM Order WHERE order_no = ‘123587’ ”
Dim rsResults AS ADODB.Recordset
Set rsResults = cnnDatabaseConnection.Execute(strSQL)
‘ 여기까지는 동일
Dim strResult As String
strResult = rsResults(“order_xml”).Value
‘ DOM 필요 없음 :
‘ objXML = New MSXML.DOMDocument, loadXML, selectSingleNode( )
‘ 이미 XML 문서 형태로 되어 있음
12
4. Database 제작사와 XML
• XML과 Database는 서로 보완 관계
– XML의 강정과 유연성을 활용하는 방향
– 데이터 검색 후 XML로 변경, 더 나아가 XML형태로 저장
• XML 통합기술
– Data Object 제작시 쉽게 작업하도록 XML 지원 기능제공
– Microsoft
• IE : MSXML 내장
• Microsoft SQL Server
– Oracle
• XDK (XML Developer’s Kit)
• XML SQL Utility
– eXcelon : 전문 XML Database
13
Microsoft SQL Server
• SQL Server 2000
– SQL 예제 : SELECT name FROM Customer
• ISAPI filter 사용
http://서버명/DB명?sql=SELECT+name+FROM+Customer+FOR+XML+RAW
• 템플리트 파일 사용
http://서버명/DB명/name.xml
<root>
<sql:query xmlns:sql=“urn:schemas-microsoft-com:xml-sql”>
SELECT name FROM Customer FOR XML RAW
</sql:query>
</root>
– 결과
<?xml version=“1.0” ?>
<root>
<row name =“홍길동” />
<row name =“고소영” />
<row name =“이몽룡” />
</root>
14
• 템플리트 파일 사용 예제2
http://서버명/DB명/order.xml
<?xml version=“1.0” ?>
<root>
<sql:query xmlns:sql=“urn:schemas-microsoft-com:xml-sql”>
<! [CDATA [
SELECT Order.order_no, Order.account_no, Customer.name,
Order.item, Parts.description, Order.quantity, Order.date
FROM Order, Customer, Parts
WHERE Order.order_no = ‘123587’
AND Customer.account_no = Order.account_no
AND Parts.item = Order.item
FOR XML RAW
] ] > </sql:query>
</root>
=> 원하는 order_no 를 골라서 선택하려면
15
• 템플리트 파라메터 사용
http://서버명/DB명/order.xml?ordnum=‘123587’
<?xml version=“1.0” ?>
<?xml-stylesheet . . . ?>
<root>
<sql:query ordnum=‘ ’ xmlns:sql=“urn:schemas-microsoft-com:xml-sql”>
<! [CDATA [
SELECT Order.order_no, Order.account_no, Customer.name,
Order.item, Parts.description, Order.quantity, Order.date
FROM Order, Customer, Parts
WHERE Order.order_no = ?
AND Customer.account_no = Order.account_no
AND Parts.item = Order.item
FOR XML RAW
] ] > </sql:query>
</root>
– IE 출력 : 스타일 시트 선언 포함
16
Oracle XDK
• 자바용 XML SQL Utility
– SQL 예제 : SELECT name FROM Customer
– 결과 <?xml version=“1.0” ?>
<ROWSET>
<ROW id=“1”> <name>홍길동</name> </ROW>
<ROW id=“2”> <name>고소영</name> </ROW>
<ROW id=“3”> <name>이몽룡</name> </ROW>
</ROWSET>
• Java XSQL sublet 작성
<?xml version=“1.0” ?>
<?xml-stylesheet . . . ?>
<query find=“%” sort=“ENAME” >
SELECT * FROM EMP
WHERE ENAME LIKE ‘%{@find}%’
ORDER BY {@sort}
</query>
– http://서버명/DB명/emp.xsql?find=T&sort=EMPNO
17
• XSQL 템플리트 파라메터 사용 예제
http://서버명/DB명/order.xsql?ordnum=‘123587’
<?xml version=“1.0” ?>
<?xml-stylesheet . . . ?>
<query ordnum=‘ ’ >
<! [CDATA [
SELECT Order.order_no, Order.account_no, Customer.name,
Order.item, Parts.description, Order.quantity, Order.date
FROM Order, Customer, Parts
WHERE Order.order_no = {@ordnum}
AND Customer.account_no = Order.account_no
AND Parts.item = Order.item
]]>
</query>
18