ROI 를 이용한 H.264 SVC 에서의 다중 채널 네트워크 비디오 전송 · ROI 를 이용한 H.264 SVC 에서의 다중 채널 네트워크 비디오 전송 ... 파라미터
SQL Server 2005 에서의 XML 지원
description
Transcript of SQL Server 2005 에서의 XML 지원
XML 데이터 형식
CREATE TABLE xml_tab ( the_id INTEGER, xml_col XML)
CREATE PROCEDURE transform ( @x XML, @y XML OUTPUT)AS...
CREATE FUNCTION simple ( @x NVARCHAR(max))RETURNS XMLASDECLARE @a XMLSET @a = @x...RETURN @a
XML 데이터 형식 제한 사항
comparison 지원 안됨 (NULL 제외 )– no equality comparison– no ORDER BY, GROUP BY– no built-in functions (ISNULL, COALESCE 제외 )
KEY 열로 사용할 수 없음 UNIQUE 제약으로 사용할 수 없음 COLLATE 으로 선언할 수 없음
– XML encoding 사용– 그렇지 않으면 UNICODE 로 저장
XML Column
XML Column 은 단순 TEXT 열이 아님 XML 관련 기술 지원
– XML Schema– XML Index– XQuery 와 Xpath 2.0– FOR XML, OpenXML
XML Column
CREATE TABLE xml_tab ( the_id INTEGER, xml_col XML)GO
-- 자동 변환INSERT INTO xml_tab VALUES(1, '<doc/>')INSERT INTO xml_tab VALUES(2, N'<doc/>')
SELECT CAST(xml_col AS VARCHAR(MAX)) FROM xml_tab WHERE the_id < 10
-- 에러 , not well formedINSERT INTO xml_tab VALUES(3, '<doc><x1><x2></x1></x2></doc>')
XML Index
XML Column 에 XML Index 생성– XML 쿼리 최적화– Primary xml index 제일 먼저 생성– 세가지 특별한 인덱스
• VALUE – 콘텐트 쿼리에 최적화 • PATH – 구조적 쿼리에 최적화 • PROPERTY – 이름 /값 쌍에 최적화
CREATE TABLE xml_tab ( id integer primary key, doc xml)GOCREATE PRIMARY XML INDEX xml_idx on xml_tab (doc)GOsys.xml_indexes 뷰에서 확인
XML Index
요구사항– 테이블은 primary key 를 가지고 있어야 함– Composite XML INDEX 는 허용 안됨– Primary xml index 생성 후 추가 XML Index 생성– XML Schema 를 이용 최적화
CREATE XML INDEX invpathidx ON xml_tab (invoice) USING XML INDEX xml_idx FOR PATH
XML Schema
<?xml version="1.0" encoding="UTF-8"?><xsd:schema targetNamespace="http://www.wtime.net/edu" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http:// www.wtime.net/edu " elementFormDefault="qualified" version="2.05"><xsd:import namespace="http://www.w3.org/1999/xlink" schemaLocation="xlinks.xsd"/><xsd:include schemaLocation=“hongju.xsd"/> <xsd:complexType name="GeocodeQOSType"> <xsd:attribute name="accuracy" type="xsd:decimal"
use="required"/> <xsd:attribute name="matchType"
type="GeocodeMatchTypeType" use="required"/> </xsd:complexType> <xsd:element name="GeocodeQOS" type="GeocodeQOSType"/> <xsd:complexType name="GeocodeRequestType"> <xsd:complexContent><xsd:extension base="AbstractRequestParametersType">
XML Schema 생성
XML SCHEMA COLLECTION 생성– XML 인스턴스와 관련되는 collection 이름을 지정
CREATE XML SCHEMA COLLECTION cvSchemasASN'<?xml version="1.0" ?> <xsd:schema targetNamespace=http://www.wtime.net/edu
XML Schema 참조
XML 데이터 형식이 사용하는 스키마는 데이터베이스에 있어야 함
CREATE TABLE Locations( location xml(cvSchemas) ...)
Typed XML
CREATE TABLE xsd_tab( id int IDENTITY primary key, -- namespace ‘http://www.wtime.net/edu’ xsd_col xml(CONTENT, cvSchemas))GOINSERT INTO xsd_tab VALUES( '<PSI xmlns=" http://www.wtime.net/edu "><P>10</P><S>20</S></PSI>')
-- 실패INSERT INTO xsd_tab VALUES( '<PSI xmlns=" http://www.wtime.net/edu "><P>10</P><S>foo</S></PSI>')
Xml Schema 정보
xml_schema_namespace 이용– XML schema collection 이름– query 이용 하나의 namespace 결과 반환– xml 형식 반환
SELECT XML_SCHEMA_NAMESPACE(N'dbo',N'cvSchemas')goSELECT XML_SCHEMA_NAMESPACE(N'dbo',N'cvSchemas').query('/xs:schema[@targetNamespace="http://www.wtime.net/edu"]')
XML Schema 제한사항
<xs:import> 는 이미 있는 collection 요구– schemaLocation 무시
<xs:include>, <xs:redefine>, <xs:notation>
BOL 참조
XQuery
XQuery 는 XML 과 데이터 베이스를 위한 표준언어 XQuery 는 XPath 의 Superset
– XPath 또는 FLWOR 표현식 사용– 거의 모든 유효한 XPath 문장은 또한 XQuery– XPath 는 FLWOR 표현식에서 값을 선택하는데 사용
(: 유효한 XQuery :)/people/person[age > 30]
(: FLWOR 표현식 :)for $p in /people/personwhere $p/age > 30order by $p/age[1]return $p/name
XQuery
XQuery 메서드– xml.query - XML instance 반환– xml.value – scalar 반환 – xml.exist – bool 반환– xml.nodes – 하나의 컬럼 rowset– xml.modify – instance 변경
FLWOR 표현식
XML 쿼리는 FLWOR 표현식– 다섯가지 구문 형식으로 구성
• FOR • LET (SQL Server 2005 나 System.Xml 에서는 지원안됨 )• WHERE • ORDER BY• RETURN
xml.query
xml.query 는 XML 데이터 형식 인스턴스 반환– XML 형식 인스턴스와 XQuery 입력– XML 단편같은 스칼라 형식 반환– 새로운 데이터를 형성하기 위해 constructor 이용
<Invoice xmlns=“http://witmens> <LineItem>Soda</LineItem> <LineItem>Ice</LineItem></Invoice>
SELECT invoice.query('declare namespace hong = "http://wtimens“ /hong:Invoice/hong:LineItem') FROM Invoices
-- 결과 --------------------------<LineItem>Soda</LineItem><LineItem>Ice</LineItem>
xml.value
-- 어떤 행을 추가INSERT xml_tab VALUES('<people><person name="curly"/></people>')INSERT xml_tab VALUES('<people><person name="larry"/></people>')INSERT xml_tab VALUES('<people><person name="moe"/></people>')
-- 검색 쿼리 SELECT id, xml_col.value('/people/person/@name','varchar(50)') AS nameFROM xml_tab
-- 결과셋 id name--------------------------1 curly2 larry3 moe
xml.exist
-- people root 밑에 person 을 반드시 가지고 있어야 함 .CREATE TABLE xmltab( id INTEGER PRIMARY KEY, pdoc XML CHECK (pdoc.exist('/people/person')=1))-- okinsert xmltab values( 1, '<people><person name="bob"/></people>')
-- fails, no personsinsert xmlpeople values( 2, '<people><emp name="fred"/></people>')
Select pdoc From xmlpeople Where pdoc.exist(‘('/people/person’)=1
xml.nodes
SELECT nCol.value('../../@InvoiceNo[1]', 'int') InvoiceNo, nCol.value('@Product[1]', 'int') ProductID, nCol.value('@Price[1]', 'money') Price, nCol.value('@Quantity[1]', 'int') QuantityFROM #Stores CROSS APPLY Invoices.nodes('declare default namespace="http://schemas.adventure-works.com/Invoices" /InvoiceList/Invoice/Items/Item') AS nTable(nCol)ORDER BY InvoiceNo
xml.modify
-- modify 이용 서브 요소를 추가SET @x.modify( 'insert <InvoiceDate>2002-06-15</InvoiceDate> into /Invoice[1] ')
-- 또는 특성을 추가SET @x.modify('insert attribute status{"backorder"} into /Invoice[1] ')
-- 모든 LineItem 요소를 삭제SET @x.modify('delete /Invoice/LineItems/LineItem')
-- CustomerName 요소의 값을 변경SET @x.modify('replace value of /Invoice[1]/CustomerName[1]/text()[1] with "John Smith" ')