Presentation is loading. Please wait.

Presentation is loading. Please wait.

XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet.

Similar presentations


Presentation on theme: "XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet."— Presentation transcript:

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)


Download ppt "XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet."

Similar presentations


Ads by Google