Download presentation
Presentation is loading. Please wait.
Published bySherman Dalton Modified over 9 years ago
1
XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet
2
목차 .NET Framework SQLXML SQLXML 과 관련된 XML 기술 SQL Server 2000 에서의 XML 지원
3
.NET Framework Web Server 브라우저 World! ADO.NET / XML / XML Schema HTML, XML OS 데이터 저장소 HTTP Handler /ASP.NET ADO.NET.NET RMI / SOAP 컨텍스트 보안 트랜잭션 동시성 Serviced Component Managed Object COM+ Server CLR SOAP,XML
4
.NET vs. SQLXML .NET XML-Object Mapping Layer XML-Object Mapping Layer XML Serialization XML Serialization XML-Relation Mapping Layer XML-Relation Mapping Layer ADO.NET ADO.NET SQLXML XML-Relation Mapping Layer XML-Relation Mapping Layer
5
XML vs Relational Relational format : data storage 각 entity 의 instance 는 row 각 entity 의 instance 는 row 각 entity 의 property 는 column 각 entity 의 property 는 column Relationships 은 key field 를 기반으로 Relationships 은 key field 를 기반으로 XML : data exchange 각 entity 의 instance 는 element 각 entity 의 instance 는 element 각 entity 의 Properties 는 value, attribute, 또는 child element 각 entity 의 Properties 는 value, attribute, 또는 child element Relationships 은 계층적으로 묘사 Relationships 은 계층적으로 묘사
6
E-Commerce 시나리오 RetailerShipper Customer Supplier Purchase order Catalog Delivery request Extranet Web site Intranet Web site
7
SQLXML RDB 의 구조적 데이터를 XML 로 변환 XML 을 RDB 의 구조적 데이터로 변환 XML-Relation Mapping Layer XML business document, e.g., purchase order RetailerSupplier
8
SQLXML Architecture IISISAPI ADO HTTP COM Annotated Schemas SQL Server SQLOLEDB ClientMiddle TierSQL Server Translation of: Updategrams Query templates XPath queries SQL executed: Open XML T-SQL Update Insert Delete Select…For XML Updategram Query request
9
SQLXML Architecture
10
SQLXML 과 관련된 XML 기술 XML Schema XPath XSLT
11
XML Schema Schema 는 XML 문서의 규약을 동의 element, attribute – 데이터타입, 순서, 길이, 최대 / 최소값 element, attribute – 데이터타입, 순서, 길이, 최대 / 최소값 XML business document, e.g., purchase order RetailerSupplier Schema
12
"urn:nwtraders" XPath XPath 는 W3C XML Path Language XPath 를 이용 XML 문서를 네비게이션, 검색, 조작 XPath 는 DOM, XQuery, XSL, XSLT 과 같이 사용됨 <Plants xmlns="urn:nwtraders"> Clematis <Plants xmlns="urn:nwtraders"> Clematis "123" "Clematis" Root "urn:nwtraders" "comment " "proc-instr"
13
XPath XPath 표준 navigation language XML 계층구조로부터 XPath 쿼리로 노드를 리턴 모든 OrderDetail 요소들 모든 OrderDetail 요소들 ProductID 특성이 23 인 OrderDetail 요소들 ProductID 특성이 23 인 OrderDetail 요소들 Quantity 가 1 보다 큰 요소를 가진 OrderDetail 요소 Quantity 가 1 보다 큰 요소를 가진 OrderDetail 요소 Order/OrderDetail[@ProductID='23'] Order/OrderDetail[Quantity > 1] Order/OrderDetail
14
XSLT XSLT 는 W3C XSL Transformations language XPath 와 같이 사용 XML vocabularies 와 포맷으로 변환하는데 사용 XML vocabulary 변환 XML 을 HTML 이나 text 로 변환 Lemon Lemon 3 Lemon 3 XML HTML
15
XSLT XSL 스타일 시트를 적용시 XML 문서를 다른 포맷 (HTML) 으로 변환 XML 문서를 다른 포맷 (HTML) 으로 변환 XML 문서를 또 다른 포맷 (XML,WML) 으로 변환 XML 문서를 또 다른 포맷 (XML,WML) 으로 변환 XML XSL
16
XSLT & XPath <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 로트노트로 부터 employee name 을 리스트 XPath 루트노드 밑의 로 정렬
17
SQL Server 2000 에서의 XML 지원 SQL Server Data 를 XML 로 처리하는 방법 Transact-SQL XML 을 이용한 SQL Server Data 변경
18
XML 을 처리하는 방법 System.Data System.Xml T-SQL UpdateGram/Bulk Load SOAP/WSDL SQLOLEDB/SQLXMLOLEDB Managed SQLXML Class Biztalk …,
19
Transact-SQL SELECT... FOR XML 결과셋이 XML stream 으로 리턴 결과셋이 XML stream 으로 리턴 relational data 를 XML 로 검색 relational data 를 XML 로 검색 OpenXML XML stream 을 rowset 으로 리턴 XML stream 을 rowset 으로 리턴 XML data 를 relational tables 로 Insert XML data 를 relational tables 로 Insert
20
XML 을 이용한 SQL Server Data 변경 XML Updategrams 추가, 수정, 삭제시 XML document 을 사용 추가, 수정, 삭제시 XML document 을 사용 XML Bulk Loader Component COM component COM component XML data 의 bulk-load 시 XML data 의 bulk-load 시
21
FOR XML FOR XML 구문 XML Document Fragments SELECT select_list FROM table_source WHERE search_condition FOR XML RAW | AUTO | EXPLICIT [, XMLDATA] [, ELEMENTS] [, BINARY BASE64] SELECT select_list FROM table_source WHERE search_condition FOR XML RAW | AUTO | EXPLICIT [, XMLDATA] [, ELEMENTS] [, BINARY BASE64]
22
SQL Server Generate ROWSET TDS/ Token XML SELECT … FROM … WHERE … FOR XML MODE SELECT … FROM … WHERE … FOR XML MODE Query processor ROWSET to XML
23
Using RAW Mode 각각의 레코드에 하나의 element 각 컬럼은 attibute 로 처리 각 컬럼은 attibute 로 처리 SELECT OrderID, OrderDate FROM Orders FOR XML RAW SELECT OrderID, OrderDate FROM Orders FOR XML RAW
24
Using AUTO Mode 테이블 이름이 element 의 이름 중첩을 지원, 컬럼은 attribute 로 처리 중첩을 지원, 컬럼은 attribute 로 처리 Alias 로 이름 변경 가능 Alias 로 이름 변경 가능 SELECT OrderID, OrderDate FROM Orders FOR XML AUTO SELECT OrderID, OrderDate FROM Orders FOR XML AUTO
25
ELEMENTS 컬럼은 child element 로 처리 SELECT OrderID, OrderDate FROM Orders FOR XML AUTO, ELEMENTS SELECT OrderID, OrderDate FROM Orders FOR XML AUTO, ELEMENTS 10248 07/04/1996 10249 07/05/1996 10248 07/04/1996 10249 07/05/1996
26
예 ) Table Join SELECT OrderForm.OrderID, Item.ProductID Item.Quantity FROM Orders OrderForm JOIN [Order Details] Item ON OrderForm.OrderID = Item.OrderID ORDER BY OrderForm.OrderID FOR XML RAW SELECT OrderForm.OrderID, Item.ProductID Item.Quantity FROM Orders OrderForm JOIN [Order Details] Item ON OrderForm.OrderID = Item.OrderID ORDER BY OrderForm.OrderID FOR XML RAW SELECT OrderForm.OrderID, Item.ProductID Item.Quantity FROM Orders OrderForm JOIN [Order Details] Item ON OrderForm.OrderID = Item.OrderID ORDER BY OrderForm.OrderID FOR XML AUTO SELECT OrderForm.OrderID, Item.ProductID Item.Quantity FROM Orders OrderForm JOIN [Order Details] Item ON OrderForm.OrderID = Item.OrderID ORDER BY OrderForm.OrderID FOR XML AUTO
27
XMLDATA XML-Data Reduced (XDR) Schema 로 리턴 SELECT OrderID, OrderDate FROM Orders FOR XML AUTO, XMLDATA SELECT OrderID, OrderDate FROM Orders FOR XML AUTO, XMLDATA <Schema name="Schema1" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft- com:datatypes"> <ElementType name="Orders" content="empty“ model="closed"> <Schema name="Schema1" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft- com:datatypes"> <ElementType name="Orders" content="empty“ model="closed">
28
Binary Data SELECT EmployeeID, Photo FROM Employees WHERE EmployeeID = 10 FOR XML AUTO SELECT EmployeeID, Photo FROM Employees WHERE EmployeeID = 10 FOR XML AUTO <Employees EmployeeID="1" Photo="dbObject/Employees[@EmpID='1']/@Photo"/> <Employees EmployeeID="1" Photo="dbObject/Employees[@EmpID='1']/@Photo"/> SELECT EmployeeID, Photo FROM Employees WHERE EmployeeID = 1 FOR XML AUTO, BINARY BASE64 SELECT EmployeeID, Photo FROM Employees WHERE EmployeeID = 1 FOR XML AUTO, BINARY BASE64 <Employees EmpID="1" Photo="FRwvAAIAAAANAA4AFAAhAP////9Ca..."/> <Employees EmpID="1" Photo="FRwvAAIAAAANAA4AFAAhAP////9Ca..."/>
29
Using EXPLICIT Mode 범용테이블을 만들기 위해 T-SQL 작성 원하는 XML 문서형태로 제어 SELECT 1 AS Tag, NULL AS Parent, OrderID AS [Invoice!1!InvoiceNo], OrderDate AS [Invoice!1!Date!Element] FROM Orders WHERE OrderID = 10248 FOR XML EXPLICIT SELECT 1 AS Tag, NULL AS Parent, OrderID AS [Invoice!1!InvoiceNo], OrderDate AS [Invoice!1!Date!Element] FROM Orders WHERE OrderID = 10248 FOR XML EXPLICIT 1996-07-04T00:00:00 1996-07-04T00:00:00
30
범용 테이블 XML 문서의 특정형식 ( 행집합 ) Tag,Parent 계층구조 결정 Tag,Parent 계층구조 결정 Column 이름은 element / attribute 로 매핑 Column 이름은 element / attribute 로 매핑 TagParent Invoice!1! InvoiceNo Invoice!1!Date! Element LineItem!2! ProductID LineItem!2 1NULL102481996-07-04T00:00:00NULLNULL 2110248NULL11 Queso Cabrales 2110248NULL42 Singaporean …
31
예 ) EXPLICIT UNION ALL 이용 SELECT 1 AS Tag, NULL AS Parent, OrderID AS [Invoice!1!InvoiceNo], OrderDate AS [Invoice!1!Date!Element], NULL AS [LineItem!2!ProductID], NULL AS [LineItem!2] FROM Orders WHERE OrderID=10248 UNION ALL SELECT 2 AS Tag,1 AS Parent, OD.OrderID, NULL, OD.ProductID, P.ProductName FROM [Order Details] OD JOIN Orders O ON OD.OrderID=O.OrderID JOIN Products P ON OD.ProductID = P.ProductID WHERE OD.OrderID=10248 ORDER BY [Invoice!1!InvoiceNo], [LineItem!2!ProductID] FOR XML EXPLICIT SELECT 1 AS Tag, NULL AS Parent, OrderID AS [Invoice!1!InvoiceNo], OrderDate AS [Invoice!1!Date!Element], NULL AS [LineItem!2!ProductID], NULL AS [LineItem!2] FROM Orders WHERE OrderID=10248 UNION ALL SELECT 2 AS Tag,1 AS Parent, OD.OrderID, NULL, OD.ProductID, P.ProductName FROM [Order Details] OD JOIN Orders O ON OD.OrderID=O.OrderID JOIN Products P ON OD.ProductID = P.ProductID WHERE OD.OrderID=10248 ORDER BY [Invoice!1!InvoiceNo], [LineItem!2!ProductID] FOR XML EXPLICIT
32
OPENXML OPENXML syntax Row 를 결정하기 위해 rowpattern parameter 사용 Row 를 결정하기 위해 rowpattern parameter 사용 컬럼을 결정하기 위해 WITH 구문사용 컬럼을 결정하기 위해 WITH 구문사용 Attribute 를 결정하기 위해 Flags parameter 사용 Attribute 를 결정하기 위해 Flags parameter 사용 SELECT * FROM OpenXML (@idoc, 'order', 1) WITH (orderno integer, orderdate datetime) SELECT * FROM OpenXML (@idoc, 'order', 1) WITH (orderno integer, orderdate datetime)
33
OPENXML 적용방법 sp_xml_preparedocument 으로 트리생성 sp_xml_removedocument 메모리 해제 CREATE PROC ProcessOrder @doc NText AS DECLARE @idoc integer EXEC sp_xml_preparedocument @idoc OUTPUT, @doc -- Process Document EXEC sp_xml_removedocument @idoc CREATE PROC ProcessOrder @doc NText AS DECLARE @idoc integer EXEC sp_xml_preparedocument @idoc OUTPUT, @doc -- Process Document EXEC sp_xml_removedocument @idoc
34
예 ) Inserting Data INSERT 구문 SELECT INTO 구문 INSERT orders SELECT * FROM OpenXML (@idoc, 'order', 1) WITH (orderno integer, orderdate datetime) INSERT orders SELECT * FROM OpenXML (@idoc, 'order', 1) WITH (orderno integer, orderdate datetime) SELECT * INTO neworders FROM OpenXML (@idoc, 'order', 1) WITH (orderno integer, orderdate datetime) SELECT * INTO neworders FROM OpenXML (@idoc, 'order', 1) WITH (orderno integer, orderdate datetime)
35
Using rowpattern Xpath 를 사용 SELECT * FROM OpenXML (@idoc, 'order/lineitem', 1) WITH (productid integer, quantity integer, price money) SELECT * FROM OpenXML (@idoc, 'order/lineitem', 1) WITH (productid integer, quantity integer, price money) SELECT * FROM OpenXML (@idoc, 'order/lineitem[@quantity>2]', 1) WITH (productid integer, quantity integer, price money) SELECT * FROM OpenXML (@idoc, 'order/lineitem[@quantity>2]', 1) WITH (productid integer, quantity integer, price money)
36
Using Flags attributes 또는 elements 지정하기 위해 사용 0 = default (attributes) 0 = default (attributes) 1 = attributes 1 = attributes 2 = elements 2 = elements 3 = attributes elements (1 + 2) 3 = attributes elements (1 + 2)
37
Using a Table Name WITH 구문에 테이블 이름 사용 컬럼이름이 match 컬럼이름이 match 데이터 타입이 호환 데이터 타입이 호환 INSERT lineitems SELECT * FROM OpenXML (@idoc, 'order/lineitem', 3) WITH lineitems INSERT lineitems SELECT * FROM OpenXML (@idoc, 'order/lineitem', 3) WITH lineitems
38
Column Pattern 계층구조에서 데이터를 처리하기 위해 Xpath 사용 relative XPath 적용 INSERT lineitems SELECT * FROM OpenXML (@idoc, 'order/lineitem', 1) WITH (orderno integer '../@orderno', productid integer, --Default Mapping quantity integer './quantity', price money --Default Mapping) INSERT lineitems SELECT * FROM OpenXML (@idoc, 'order/lineitem', 1) WITH (orderno integer '../@orderno', productid integer, --Default Mapping quantity integer './quantity', price money --Default Mapping)
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.