대메뉴 바로가기 본문 바로가기

데이터 기술 자료

데이터 기술 자료 상세보기
제목 SQLXML 가상 디렉터리 구조 탐색
등록일 조회수 5030
첨부파일  

SQLXML 가상 디렉터리 구조 탐색

관계형 모델 이후 소프트웨어 개발 커뮤니티는 많은 변화를 겪었지만 데이터베이스 프로그래밍 패러다임은 안정적인 구조를 유지해 왔습니다. 향상된 확장성, 바이너리 저장소 및 복제에 대한 애드온은 모두 동일한 디자인 모델에서 자연스럽게 확장된 것입니다. 데이터베이스에 있는 문서가 필요한 경우에는 BLOB(Binary Large Object), 데이터 형식 이미지 또는 텍스트로 저장했습니다. 또한 두 번에 걸친 인터넷의 혁명(TCP/IP 및 HTTP)에도 불구하고, 응용 프로그램의 주축인 데이터베이스는 계속 SQL 쿼리에 응답하고 결과를 생성하는 이전의 구조를 유지했습니다. 하지만 세 번째 인터넷 혁명인 XML 웹 서비스는 인터넷을 데이터베이스와 훨씬 밀접하게 만들고 차세대 응용 프로그램에서 문서의 형식과 배치 방식에 대해 새로운 접근법을 시도합니다. 이 백서에서는 미래의 SQL Server 프로그래밍에서 XML의 방향을 제시하고 XML 문서의 역할을 명확히 분류합니다.

서론

소프트웨어 개발 커뮤니티는 그 역사 속에서 수많은 변화를 거쳤지만 데이터베이스 프로그래밍 패러다임은 관계형 모델 이래로 안정을 유지해 왔습니다. 증가된 확장성, 이진 스토리지 및 복제의 추가는 모두 동일한 설계 모델의 자연스러운 확장이었습니다. 만약 데이터베이스에 문서를 넣고 싶으면 그 문서를 데이터 형식 이미지인 BLOB나 텍스트로 저장했습니다.
1차, 2차 인터넷 혁명에서조차(TCP/IP와 HTTP) 응용 프로그램의 주축인 데이터베이스는 과거와 변함 없이 SQL 쿼리에 응답하고 결과 집합을 생성했습니다. XML 기반 웹 서비스라는 3차 혁명에서는 인터넷이 데이터베이스와 훨씬 가까워지고 문서의 의미와 차세대 응용 프로그램에서 문서의 존재 방식이라는 관점에서 새로운 생각을 갖게 합니다.
본 백서는 XML에 대한 오리엔테이션 정보를 제공하고 미래의 Microsoft SQL Server 프로그램 가능성 측면에서 XML 문서 역할에 대해 설명합니다. SQL 서버와 XML 통합을 위한 컨텍스트에 대한 간략한 오리엔테이션을 마치면 XML을 데이터 계층으로 가져오는 데 필요한 다양한 기술과 기존 데이터를 가상 문서로 나타내는 방법에 대해 배울 것입니다. 본 백서는 데이터베이스 전문가에게 XML을 소개하기 위한 것이므로, 본 백서에 XML 통합과 관련된 모든 문제가 들어있는 것은 아닙니다. 백서를 모두 읽고 나면 XML이 왜 데이터베이스에 필요하고 가상 문서 롤링을 위해 무엇을 해야 하는지 더 잘 이해할 수 있을 것입니다.

데이터베이스에 XML 문서 수용

대부분의 데이터베이스 개발자는 성능 조정, 논리 엔터티 및 하나 또는 두 개의 데이터 액세스 API를 전문으로 연구해 왔습니다. 이러한 분야에서는 XML이나 HTML이 설 자리가 없었으며 데이터 계층에서 문서 기술이 왜 필요한지에 대해서도 처음에는 쉽게 이해하지 못했습니다. 확장성을 위한 Microsoft Windows DNA 프로그래밍 모델은 다른 계층에 프레젠테이션의 부담을 줍니다. 어떤 사람들은 더 복잡하고 속도가 느리긴 하지만 레코드 집합으로 이전에 할 수 있었던 모든 것을 XML로 할 수 있다고 주장하기도 합니다.
그렇다면 XML을 수용하도록 데이터베이스를 바꾸는 이유는 무엇일까요? 그것은 XML이 다른 형식으로만 표현되기 때문입니다. 제대로 일반화된 엔터티, 미세 조정된 쿼리 및 잘 다듬어진 인덱스는 모두 XML 통합을 위해 제대로 계획한다면 원상태를 유지합니다.
.NET 프레임워크에는 두 가지 중요한 변경 사항이 포함되어 있는데, 그 중 하나는 본 백서의 범위를 벗어나는 공용 언어 런타임 환경이고 다른 하나는 보급되고 있는 XML의 사용입니다. 처음부터 구축하든 선적 기술을 통합하든 개발자들은 몇 가지 다른 유형의 문서가 필요해서 데이터베이스에 액세스하는 모든 프로젝트에 대해 도움을 제공할 것입니다.
XML이 어떤 측면에서 개발 커뮤니티를 도울 수 있는지에 대한 컨텍스트가 필요할 경우 http://msdn.microsoft.com/xml를 참조하십시오.

DBA용 XML에 대한 간략한 소개

XML 문서의 기본 구조와 용어에 대해 이미 익숙한 사람이라면 다음 섹션으로 건너뛰어도 됩니다.
XML은 XML 문서 자체, 스키마 확인, 그리고 이 둘 안에서 사용되는 이름 공간의 세 가지 기능 구성 요소로 이루어집니다. 이름 공간이란 문서를 읽게 될 응용 프로그램에 대해 특정 의미를 지닌 노드(요소 또는 특성)를 선언하는 방법입니다. 대부분의 이름 공간은 MSXML 파서를 통해 읽지만 SQLXML은 고유 이름 공간을 사용합니다(이와 관련된 내용은 후반부에서 자세하게 설명합니다). 문서의 스키마와 테이블의 스키마 사이에는 유사점이 많습니다. 한 예로, 필수 값이든 옵션 값이든 상관 없이 데이터 형식을 정의하고 제약 조건을 추가할 수 있습니다. 유효한 문서를 생성하려면 그 구조가 스키마에 정의된 규칙을 따라야 합니다. 다음은 스키마가 인라인 스키마로 문서에 포함된 XML 문서의 예제입니다.

<?xml version="1.0" encoding="utf-8" ?> - <root> - <Schema name="Schema1" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn :schemas-microsoft-com:datatypes"> - <ElementType name="Employees" content="empty" model="closed"> <AttributeType name="EmployeeID" dt:type="i4" /> <AttributeType name="FirstName" dt:type="string" /> <AttributeType name="lastName" dt:type="string" /> <attribute type="EmployeeID" /> <attribute type="FirstName" /> <attribute type="lastName" /> </ElementType> </Schema> <Employees xmlns="x-schema:#Schema1" EmployeeID="1" FirstName="Nancy" lastName="Davolio" /> <Employees xmlns="x-schema:#Schema1" EmployeeID="2" FirstName="Andrew" lastName="Fuller" /> <Employees xmlns="x-schema:#Schema1" EmployeeID="3" FirstName="Janet" lastName="Leverling" /> </root>

XML 보기를 사용하여 가상 문서 생성

데이터를 새로운 방식으로 사용하려는 응용 프로그램에 대해, 제공된 스키마를 기반으로 XML 문서를 생성합니다. 이러한 문서가 가상이 되는 이유는 텍스트나 이미지 열을 저장에 사용하지 않아도 된다는 사실 때문입니다. 본 문서는 테이블 형식의 데이터 스트림 패킷 레코드 집합에 반대되는 것으로 열 머리글, 행 및 튜플을 XML 인코딩으로 포괄하는 기존 데이터에 대한 보기를 생성하고 있기 때문에 가상입니다. 이 기능은 어떠한 XML 기반 응용 프로그램이라도 데이터베이스 변환을 XML이나 SQLXML 계층, 그리고 플랫 파일 XML 스트림과 구별할 수 없도록 데플랫 파일에 반대되는 가상 문서를 사용할 때의 이점은 다음과 같습니다.

·최종 포맷을 생성하는 데 추가 저장 공간이 사용되지 않습니다.

·요구하는 즉시 최신 업데이트를 이용할 수 있습니다.

·문서 액세스 보안이 SQL 모델로 직접 매핑됩니다.

·스키마가 테이블과는 별도로 존재하며 기본적인 데이터베이스 스키마에 영향을 미치지 않고도 수정할 수 있습니다.

문서 상태에 대한 감사 추적이 필요하지 않은 경우, 가상 문서 모델은 데이터베이스 액세스에 투명하게 추가됩니다.

가상 문서 요구 사항

가상 문서를 관리하는 데는 필수 구성 요소와 옵션 구성 요소가 있습니다. OPENXML을 제외하면 SQL Server에서 이루어지는 모든 XML 기반 프로그래밍은 MDAC(Microsoft Data Access Components) 버전 2.6을 통해 SQLOLEDB에 추가된 IcommandStream 개체를 사용합니다.
본 백서에 연급된 기술 중 일부는 SQL Server 2000과 함께 제공된 것으로 SQL Server 2000에만 적용되지만, 다른 기술(XML Bulk Load, Updategrams 및 XSD 지원)은 SQLXML이라고도 불리는 SQLXML 3.0을 설치해야 합니다.

가상 문서 기능 호환성 도표

다음 표는 서로 다른 기능에 대한 호환성 수준을 나타낸 것입니다.



가상 문서 아키텍처 개요

다음 다이어그램은 SQL Server 2000에서 XML을 통해 이용할 수 있는 전체적인 문서 워크플로를 나타낸 것입니다.



그림에서 볼 수 있듯이, SQL 명령이 관계형 엔진에 전달되기 전에는 가상 문서 구조의 대부분이 XML에 대한 참조를 제거합니다. SQL Server로 전달되는 명령이 데이터가 XML 문서에 있어야 한다고 표시하는 곳은 FOR XML 절에서 뿐입니다. 이제는 FOR XML을 효과적으로 사용하여 원하는 문서 유형을 얻고 그 파워를 활용하는 방법에 대해 자세히 알아보겠습니다.

FOR XML 쿼리: 가상 문서의 궁극적인 소스

SQL Server 2000은 Transact-SQL 언어를 수정하여 DBA와 개발자에게 XML을 완벽하게 알지 않고도 XML 문서를 쉽게 생성할 수 있는 방법을 제공하는데 그것이 FOR XML 절입니다.
FOR XML 절은 다음과 같은 세 가지 기본 모드를 통해 레코드 집합을 XML 문서로 토큰화합니다.

·FOR XML RAW
·FOR XML AUTO
·FOR XML EXPLICIT

다음 섹션에서는 FOR XML의 각 모드에서 생성할 수 있는 일반 문서의 유형을 설명합니다.

FOR XML RAW 쿼리의 가상 문서

SELECT "<root>"; SELECT TOP 3 EmployeeID, FirstName, LastName FROM Employees FOR XML RAW, XMLDATA SELECT "</root>"; <root> <Schema name="Schema1" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes"> <ElementType name="row" content="empty" model="closed"> <AttributeType name="EmployeeID" dt:type="i4" /> <AttributeType name="FirstName" dt:type="string" /> <AttributeType name="LastName" dt:type="string" /> <attribute type="EmployeeID" /> <attribute type="FirstName" /> <attribute type="LastName" /> </ElementType> </Schema> <row xmlns="x-schema:#Schema1" EmployeeID="1" FirstName="Nancy" LastName="Davolio" /> <row xmlns="x-schema:#Schema1" EmployeeID="2" FirstName="Andrew" LastName="Fuller" /> <row xmlns="x-schema:#Schema1" EmployeeID="3" FirstName="Janet" LastName="Leverling" /> </root>

위의 예제는 가상 문서의 RAW 모드를 사용하여 레코드 집합을 가장 빠르지만 가장 일반적인 XML로 나타낸 것입니다. 이 예제에서는 스키마가 열 특성이 있는 기본 행 요소를 사용하지 않을 경우 업무 프로세스 컨텍스트를 갖지 않습니다. SQL Server 기반 가상 디렉터리를 사용할 때 데이터는 HTTP 를 통해 플랫폼의 XML-savvy 응용 프로그램으로 전달할 수 있습니다.
XMLDATA 키워드는 동일한 XML 문서 내에서 XDR 스타일의 스키마 인라인을 생성하는데 사용되지만 필수 요소는 아니라는 점을 명심하십시오. 문서 구조가 스키마 구조와 관련이 있을 때 문서 구조를 확인하면 스키마와 문서 구조 사이의 관계를 더 쉽게 알 수 있습니다. FOR XML 절이 있는 SELECT 문을 이해하면 생성해야 하는 XML 문서가 자연스럽게 이해됩니다.

FOR XML AUTO 쿼리의 가상 문서

SELECT "<root>"; SELECT TOP 3 EmployeeID, FirstName, LastName FROM Employees as EmployeeDetail FOR XML AUTO, ELEMENTS, XMLDATA SELECT "</root>"; <root> <Schema name="Schema1" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes"> <ElementType name="EmployeeDetail" content="eltOnly" model="closed" order="many"> <element type="EmployeeID" /> <element type="FirstName" /> <element type="LastName" /> </ElementType> <ElementType name="EmployeeID" content="textOnly" model="closed" dt:type="i4" /> <ElementType name="FirstName" content="textOnly" model="closed" dt:type="string" /> <ElementType name="LastName" content="textOnly" model="closed" dt:type="string" /> </Schema> <EmployeeDetail xmlns="x-schema:#Schema1"> <EmployeeID>1</EmployeeID> <FirstName>Nancy</FirstName> <LastName>Davolio</LastName> </EmployeeDetail> <EmployeeDetail xmlns="x-schema:#Schema1"> <EmployeeID>2</EmployeeID> <FirstName>Andrew</FirstName> <LastName>Fuller</LastName> </EmployeeDetail> <EmployeeDetail xmlns="x-schema:#Schema1"> <EmployeeID>3</EmployeeID> <FirstName>Janet</FirstName> <LastName>Leverling</LastName> </EmployeeDetail> </root>

가상 문서의 XML 스키마가 하나의 테이블로 직접 매핑되거나 단순 계층으로 변환되면 AUTO 모드에서 FOR XML을 사용할 수 있습니다. 기본적으로 모든 열은 위의 쿼리처럼 테이블 이름의 특성이나 테이블 별칭으로 표시됩니다. ELEMENTS 키워드는 AUTO 모드의 FOR XML에 의해서만 인식되며 특성 대신 하위요소로 표시되는 열 정보에 대한 절대적인 설정입니다. 이것은 기존의 데이터 사용을 기반으로 XML 스키마를 생성하고 있을 때 기존의 보고서 및 프레젠테이션 계층에서 사용되는 기존의 Transact-SQL 기반 보기를 XML 문서 형식으로 확장하는 가장 일반적인 방법입니다.

FOR XML EXPLICIT 쿼리의 가상 문서
그러나 XML 문서 구조가 결코 획일적인 것은 아닙니다. XML 기반 워크플로에 대한 마이그레이션의 대부분은 Microsoft BizTalk Server 2000, XSD나 XDR 스키마로 재작성된 DTD, 또는 데이터를 몰드해야 하는 XML 사양의 다른 형식으로부터 기존의 XML 주석 스키마를 데이터베이스 개발자에게 제시합니다. EXPLICIT 모드의 작동 방식을 규명하기 전에 먼저 SQL Server 2000이 임의의 XML 구조를 구축하는 방법을 이해해야 합니다. 제대로 구성된 XML 문서에서는 모든 노드 또는 요소와 특성이 서로 관련을 맺고 있습니다. TAG 열과 PARENT 열은 고유한 노드 위치와 그 상위 노드를 결정하는 데 각각 사용됩니다. 특정 규칙은 열 이름 및 열 이름이 XML로 변환되는 방식을 제어합니다(SQL Server Books Online의 "EXPLICIT 모드 사용" 항목 참조).

SELECT "<root>"; SELECT 1 as Tag, NULL as PARENT, E.EmployeeID as [Employee!1!EmployeeID], NULL as [EmployeeDetail!2!!element], NULL as [Nickname!3!!element], NULL as [Surname!4!!element] FROM (SELECT TOP 3 EmployeeID,FirstName,LastName from Employees) E UNION ALL SELECT 2, 1, E.EmployeeID as [Employee!1!EmployeeID], NULL as [EmployeeDetail!2!!element], NULL as [Nickname!3!!element], NULL as [Surname!4!!element] FROM (SELECT TOP 3 EmployeeID,FirstName,LastName from Employees) E UNION ALL SELECT 3, 2, E.EmployeeID as [Employee!1!EmployeeID], NULL as [EmployeeDetail!2!!element], E.FirstName as [Nickname!3!!element], NULL as [Surname!4!!element] FROM (SELECT TOP 3 EmployeeID,FirstName,LastName from Employees) E UNION ALL SELECT 4, 2, E.EmployeeID as [Employee!1!EmployeeID], NULL as [EmployeeDetail!2!!element], NULL as [Nickname!3!!element], E.LastName as [Surname!4!!element] FROM (SELECT TOP 3 EmployeeID,FirstName,LastName from Employees) E ORDER BY [Employee!1!EmployeeID] FOR XML EXPLICIT, XMLDATA SELECT "</root>"; <root> <Schema name="Schema1" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes"> <ElementType name="Employee" content="mixed" model="open"> <AttributeType name="EmployeeID" dt:type="i4" /> <attribute type="EmployeeID" /> </ElementType> <ElementType name="EmployeeDetail" content="mixed" model="open" /> <ElementType name="Nickname" content="mixed" model="open" /> <ElementType name="Surname" content="mixed" model="open" /> </Schema> <Employee xmlns="x-schema:#Schema1" EmployeeID="1"> <EmployeeDetail> <Nickname>Nancy</Nickname> <Surname>Davolio</Surname> </EmployeeDetail> </Employee> <Employee xmlns="x-schema:#Schema1" EmployeeID="2"> <EmployeeDetail> <Nickname>Andrew</Nickname> <Surname>Fuller</Surname> </EmployeeDetail> </Employee> <Employee xmlns="x-schema:#Schema1" EmployeeID="3"> <EmployeeDetail> <Nickname>Janet</Nickname> <Surname>Leverling</Surname> </EmployeeDetail> </Employee> </root>

위 예제에서는 RAW 모드와 AUTO 모드를 사용하여 표시된 행과 동일한 열을 선택했으며, 테이블 엔터티에서 쉽게 표현할 수 없는 추가 노드와 혼합 하위 노드 형식(하나의 문서에 요소와 특성이 모두 포함)의 복잡도가 있는 폼으로 행 집합을 나?한 SQLXML 계층 강화

서버측 실행에 캐시된 계획을 위해 저장 프로시저에 FOR XML 쿼리를 작성할 수 있지만 XML 처리의 대부분은 웹 서비스의 데이터베이스 서버 밖에서 발생합니다. 이러한 응용 프로그램은 이미 XML 스키마를 가지고 있기 때문에 온라인 트랜잭션 처리를 위해 데이터베이스에 직접 연결하지 않아도 됩니다. 사용자 커뮤니티는 느슨하게 결합된 시스템 사이에서 끊임 없이 변하는 상호작용을 위해 어느 정도 동적 폼의 ad hoc 지원에 맞는 업무 사례를 만듭니다. 가상 문서에는 데이터베이스 서버의 영향을 받지 않는 XML 스키마에 대해 유연한 아키텍처가 필요합니다.
SQLXML 3.0은 기존 스키마에 주석으로 추가할 수 있는 두 개의 서로 다른 이름 공간을 사용합니다. SQL Server 2000에서 처음 제공된 이름 공간인 "schemas-microsoft-com:xml-sql"은 XDR 스키마 변형 기능을 SQL Server 테이블의 XML 보기 또는 보기로 통합합니다. SQLXML 2.0은 "schemas-microsoft-com:mapping-schema"을 추가했고 이는 XSD 기반 스키마의 XML 보기 기능을 확장합니다. XML 스키마 보기는 매핑된 테이블과 열이 XML 형식으로 되어 있는 경우 보기를 생성하도록 주석이 달려 있기 때문에 XML 보기, 매핑 스키마 및 주석 스키마 같은 용어들은 어떤 스타일의 XML 스키마를 데이터베이스로 가져오는지와 상관 없이 서로 바꿔 사용할 수 있습니다.

XML View Mapper를 사용하는 XDR 기반 가상 문서
인라인 참조를 추출해서 위의 FOR XML EXPLICIT 예제 출력에서 얻은 스키마에 일부 데이터 형식 정보를 추가하면 다음과 같은 스키마를 생성할 수 있습니다.

<?xml version="1.0" ?> <Schema name="Schema1" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes"> <ElementType name="Employee"> <AttributeType name="EmployeeID" dt:type="i4" /> <attribute type="EmployeeID" /> </ElementType> <ElementType name="EmployeeDetail" /> <ElementType name="Nickname" dt:type="string" /> <ElementType name="Surname" dt:type="string" /> </Schema>

SQLXML 릴리스와 함께 XML View Mapper라는 툴 릴리스가 있는데, 이 릴리스는 요소와 그 하위 노드를 각각의 데이터베이스 테이블 및 열과 연관시키기 위한 개발 환경을 생성합니다. 그림 2는 특정 데이터베이스에서 보기 또는 테이블을 끌어와 기존 XDR 스키마에 연결하는 방법을 나타낸 것입니다.



XML View Mapper는 테이블 이름과 노드 이름이 동일한 경우에만 암시적 매핑을 수행합니다. 기타 모든 매핑은 인터페이스나 내장된 XDR Editor를 사용하여 수행해야 합니다. XML 노드 매핑에 대한 데이터베이스가 완료되면 다음과 같은 주석 스키마를 내보내서 가상 문서를 생성하는 데 사용할 수 있습니다.

<?xml version="1.0" ?> <!-- Generated by XMLMapper.exe XDR Publisher --> <Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes" xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <ElementType name="EmployeeDetail" content="mixed" order="many" sql:relation="Employees"> <element type="Nickname" minOccurs="1" maxOccurs="1" /> <element type="Surname" minOccurs="1" maxOccurs="1" /> </ElementType> <ElementType name="Nickname" content="textOnly" order="many" dt:type="string" sql:relation="Employees" sql:field="FirstName" /> <ElementType name="Surname" content="textOnly" order="many" dt:type="string" sql:relation="Employees" sql:field="LastName" /> <ElementType name="Employee" content="mixed" order="many" sql:relation="Employees"> <AttributeType name="EmployeeID" dt:type="i4" /> <attribute type="EmployeeID" required="no" /> <element type="EmployeeDetail" minOccurs="1" maxOccurs="1" sql:relation="Employees"> <sql:relationship key-relation="Employees" key="EmployeeID" foreign-relation="Employees" foreign-key="EmployeeID" /> </element> </ElementType> </Schema>

XML View Mapper는 자동으로 스키마를 정리해서 XML 문서의 속성에 관해 더 많은 설명을 제공할 뿐 아니라 "schemas-microsoft-com:xml-sql" 이름 공간의 요소와 특성을 추가하였습니다. sql:relation 특성과 sql:field 특성은 각각 Northwind 데이터베이스 테이블 및 열의 데이터를 포함하는 노드에 해당합니다. EmployeeDetail 요소 상의 sql:relationship 하위 요소는 스키마에 포함된 두 가지 다른 sql:relation 요소 인스턴스 생성 사이의 JOIN 문과 같습니다. 이 경우, 가상 문서 출력을 위해서는 자체 조인이 필요합니다. 이 기능은 몇 가지 SQLXML 계층 기능에서 사용되기 때문에 가상 문서를 생성하는 데 필요한 데이터 계층에서 관리할 코드가 없습니다.

XPath를 사용하는 가상 문서 쿼리
매핑 스키마를 생성한 후에는 XML 문서처럼 이 보기로 표시된 데이터를 처리할 수 있습니다. 일반적으로 WHERE 절이 있는 SELECT 문을 이용해 테이블에 액세스하는 것과 같은 방식으로 XML 문서도 XPath라는 노드 탐색 규칙?원을 위해 활성화된 가상 디렉터리를 사용할 때 XPath 쿼리가 HTTP POST로부터 실행될 수 있게 합니다.
Microsoft IIS(Internet Information Services) 서버에서 IIS Virtual Directory Management for SQL Server를 사용할 때, XML 스키마의 물리적 위치와 SQLOLEDB 연결 문자열에 가상 디렉터리를 매핑할 수 있습니다. 그림 3에서 IIS는 SQL Server 2000과 동일한 서버에서 실행되고 있으며, SQLXML 계층는 고유 웹 서버에서 가장 잘 확장됩니다.



그림 3에서는 SA로 Northwind 데이터베이스에 로그인할 때 필요한 로컬 SQL 서버에 대한 연결 정보가 들어 있는 vdir이라는 가상 디렉터리가 생성되었습니다. 이 예제에서는 매핑 스키마와 템플릿 쿼리를 저장하는 데 각각 schema(스키마)와 template(템플릿)이라는 이름의 가상 디렉터리를 사용하지만, 생성 시에는 이러한 폴더에 아무 이름이나 붙일 수 있습니다. 매핑 스키마 및 가상 디렉터리 구성을 생성한 후에는 어떠한 웹 브라우저에서든지 XPath 쿼리를 실행하고 문서를 반환할 수 있습니다. 이전에 Virtdoc.xdr로 표시된 주석 스키마를 가상 디렉터리로 표시된 스키마 폴더에 저장하면 다음 쿼리를 통해 FOR XML EXPLICIT로부터 가상 문서를 반환할 수 있습니다.
http://localhost/vdir/schema/virtdoc.xdr/Employees[@EmployeeID<4]?root=root 사용자는 문서에 루트 노드가 없을 것이라고 생각하기 때문에 SQLXML은 문서가 제대로 형식을 갖추는 데 필요한 루트를 정의하는 외부 메커니즘을 제공합니다. 모든 인터넷 기반 쿼리에 이용할 수 있는 매개 변수에 관한 자세한 내용은 http://msdn.microsoft.com/의 MSDN Library에 있는 "HTTP를 사용하여 SQL 문 실행"을 참조하십시오.
가상 디렉터리 구성에 관한 자세한 내용은 SQL Server Books Online의 "IIS Virtual Directory Management for SQL Server 유틸리티 사용" 항목과 SQLXML의 웹 릴리스에 포함된 설명서를 참조하십시오. 캐싱, 쿼리 유형 및 오류 처리에 가상 디렉터리 기능은 각각의 웹 릴리스마다 변경되었습니다.
가장 효율적인 매핑 스키마를 구축하려면 SQL 쿼리로부터 가상 문서를 작성하는 방법을 이해해야 합니다. 위 예제에서는 저장 프로시저와 임의 쿼리를 작성하고 최종 UNION 및 ORDER BY의 일부가 된 각각의 SELECT로부터 특정 순서와 열을 지정할 수 있었습니다. SQL Profiler를 사용하여 위의 단순 XPath 쿼리로부터 생성된 쿼리를 캡처하고 그 쿼리를 복사해서 Query Analyzer에 붙여넣은 다음 FOR XML 절이 없는 쿼리의 결과를 보면 SQLXML이 어떻게 가상 문서를 생성하는지 알 수 있습니다(그림 4 참조).



sql:relationship을 정의하지 않으면 SQLXML은 Employee!1!EmployeeID 열에 NULL을 생성하고 ORDER BY 절은 원하는 노드 중첩을 생성하지 않습니다. 조인, CDATA 섹션, SQL 매핑이 없는 노드 및 기타 시나리오를 매우 정밀하게 제어할 수 있는 추가 이름 공간 특성은 매우 다양합니다. 자세한 내용은 SQL Server Books Online 항목인 "주석 XDR 스키마를 사용하여 XML 보기 생성"을 참조하십시오. SQLXML Books Online에는 XSD 스키마의 새로운 매핑 및 변경 사항에 관한 추가 설명서가 들어 있습니다.

템플릿 쿼리
XPath 쿼리는 매우 강력하기는 하지만 정확한 노드 탐색 패턴을 생성하려면 스키마에 대한 지식이 필요하고 보안의 위험도 있습니다. 또한 사용자 커뮤니티가 초기 색인 요청을 벗어나는 열을 검색해서 블로킹이 발생하고 실행 시간이 늦어지는 등 최적의 상태에 못 미치는 색인 구조와 관련된 성능 문제를 야기시킬 수도 있습니다. 이제 데이터베이스는 가상 문서 공장이 되었지만 여전히 새로운 XML 세계에 들어서기 전처럼 훌륭한 성능 조정을 위한 모든 규칙을 따릅니다. 이전 XML 응용 프로그램에서는 저장 프로시저를 사용하여 사용자 권한과 성능 임팩트를 제한했을 것입니다. SQLXML은 템플릿 쿼리를 통해 이와 동일한 파워를 제공합니다.
템플릿은 "schemas-microsoft-com:xml-sql" 이름 공간을 지원하는 XML 문서지만 데이터베이스 구조 대신 쿼리 구성 요소에 XML 노드를 매핑하기 위한 것입니다. 예를 들면 다음 XML을 포함하는 Template.xml 파일을 생성해서 XPath 쿼리의 동일한 매핑 스키마를 생성하는 동안 한 번에 하나의 직원 레코드에만 액세스하도록 할 수 있습니다.

<EmployeeSet xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:header> <sql:param name="ID">1</sql:param> </sql:header> <sql:xpath-query mapping-schema="..schemavirtdoc.xdr">/Employee [@EmployeeID=$ID]</sql:xpath-query> </EmployeeSet>

위 예제는 템플릿의 주요 기능을 소개합니다. SQLXML 2.0으로 시작해서 매개 변수가 전달되지 않은 경우 기본값으로 1을 포함하여 sql:param 요소에 정의된 대로 XPath 쿼리로 매개 변수를 전달할 수 있습니다. 이 EmployeeSet의 경우, 전체 템플릿이 실행되려면 제대로 구성되어야 하기 때문에 템플릿에는 하드 코드 루트 요소가 필요합니다. 매핑 스키마 특성은 로컬, UNC 또는 URL 기반 경로를 사용할 수 있지만 이 경우에는 처음 예제를 말합니다. 템플릿 쿼리를 실행하려면 위 XML 문서를 템플릿 가상 디렉터리에 Template.xml로 저장하고 아래 URL을 브라우저에 입력합니다.
http://localhost/vdir/template/template.xml?ID=3 템플릿 쿼리는 SQL 서버로 보내진 쿼리 배치에 직접 매핑됩니다. sql:query 요소에 있는 아무 쿼리(DDL, DBCC 등)나 실행할 수 있음을 알 수 있을 것입니다. 템플릿 쿼리는 XPath 쿼리와 SQL 기반 쿼리 조합을 포함할 수도 있습니다.

결론

본 백서에서는 느슨하게 결합된 시스템에서 연결된 다른 응용 프로그램과 상호 작용할 수 있도록, 모든 데이터에서 XML 문서를 생성하는 완전한 “웹 시티즌”으로서 SQL Server를 소개하는 차원에서 SQLXML의 인터넷 기반 사용을 다루고자 했습니다. 여러분은 추가 툴이 필요한 수많은 시나리오를 접하게 될 것입니다. 위 예제들은 인터넷 통합 워크플로를 사용하지만 ADO 기반 XML 스트림을 사용하여 가상 디렉터리에 포함된 모든 기능을 수행할 수 있습니다. 가상 디렉터리는 OLE DB 인터페이스와 직접 상호 작용하기 때문에 ADO 및 HTTP 기반 XPath 쿼리와 템플릿 쿼리 모두 프로그래밍 유연성을 떨어뜨리지 않는 속도를 제공합니다. 가상 문서는 단순히 보여주기 위한 것만이 아? 격리시킬 수 있으며 필요에 따라 데이터베이스를 변경하기 위한 것입니다. 매핑 스키마는 BCP 스타일 삽입 및 스키마 생성에 SQLXML 벌크 로드를 사용하거나, updategram과 diffgram을 사용하는 트랜잭션 기반 수정을 통해 원본으로 사용하는 테이블의 수정을 관리하는 데 도움을 줄 수 있습니다. 세 가지 방법 모두 문서와 그 상태를 XML 보기로 SQLXML에 표시하여 관련 있는 INSERT, UPDATE, DELETE 문을 생성합니다. 매핑 스키마를 이용할 수 없거나 OLE 자동화 및 기타 저장 프로시저를 이용한 더욱 복잡한 서버측 상호 작용이 필요하면 OPENXML을 사용할 수 있습니다.
FOR XML 기반 저장 프로시저에 대해 매핑 스키마와 가상 디렉터리를 사용할지 ADO 기반 템플릿을 사용할지 여부는 성능과 업무 목적에 따라 균형을 이루어야 합니다. 선택한 방법에 상관 없이 여러분은 이제 SQLXML 계층에 첫 발을 내디뎠으며 XML 통합 세계로의 긴 여행을 떠날 준비가 된 것입니다.

 

제공 : DB포탈사이트 DBguide.net