테이블 및 열에 대한 XSD 요소 및 특성의 명시적 매핑(SQLXML 4.0)
XSD 스키마를 사용하여 관계형 데이터베이스의 XML 뷰를 제공할 때는 스키마의 요소 및 특성을 데이터베이스의 테이블 및 열에 매핑해야 합니다. 데이터베이스 테이블/뷰의 행은 XML 문서의 요소에 매핑됩니다. 데이터베이스의 열 값은 특성 또는 요소에 매핑됩니다.
XPath 쿼리는 주석이 추가된 XSD 스키마에 대해 지정되며 스키마의 요소 및 특성에 대한 데이터는 매핑되는 테이블 및 열에서 검색됩니다. 데이터베이스에서 단일 값을 얻으려면 XSD 스키마에 지정된 매핑에 관계 및 필드 사양이 모두 있어야 합니다. 요소/특성의 이름이 매핑되는 테이블/뷰 또는 열 이름과 다른 경우 sql:relation 및 sql:field 주석을 사용하여 XML 문서의 요소 또는 특성과 데이터베이스의 테이블(뷰) 또는 열 간의 매핑을 지정할 수 있습니다.
sql-relation
sql:relation 주석은 XSD 스키마의 XML 노드를 데이터베이스 테이블에 매핑하기 위해 추가됩니다. 테이블(뷰)의 이름은 sql:relation 주석의 값으로 지정됩니다.
요소에 sql:relation을 지정하면 이 주석의 범위가 해당 요소의 복합 유형 정의에 기술된 모든 특성 및 자식 요소에 적용되므로 주석을 쉽게 작성할 수 있습니다.
sql:relation 주석은 MicrosoftSQL Server에서는 유효하지만 XML에서는 유효하지 않은 식별자가 있을 때도 유용합니다. 예를 들어 "Order Details"는 SQL Server에서는 유효한 테이블 이름이지만 XML에서는 유효하지 않습니다. 이 경우 sql:relation 주석을 사용하여 매핑을 지정할 수 있습니다. 예를 들어 다음과 같습니다.
<xsd:element name="OD" sql:relation="[Order Details]">
sql-field
sql-field 주석은 요소 또는 특성을 데이터베이스 열에 매핑합니다. sql:field 주석은 스키마의 XML 노드를 데이터베이스 열에 매핑하기 위해 추가됩니다. 비어 있는 콘텐츠 요소에는 sql:field를 지정할 수 없습니다.
예
다음 예를 사용하여 작업 예제를 만들려면 특정 요구 사항이 충족되어야 합니다. 자세한 내용은 SQLXML 예 실행을 위한 요구 사항을 참조하십시오.
1. sql:relation 및 sql:field 주석 지정
이 예에서 XSD 스키마는 <FName> 및 <LName> 자식 요소와 ContactID 특성을 포함하는 복합 유형의 <Contact> 요소로 구성되어 있습니다.
sql:relation 주석은 <Contact> 요소를 AdventureWorks 데이터베이스의 Person.Contact 테이블에 매핑합니다. sql:field 주석은 <FName> 요소를 FirstName 열에, <LName> 요소를 LastName 열에 매핑합니다.
ContactID 특성에는 주석이 지정되지 않습니다. 따라서 이름이 같은 열에 특성을 매핑하는 기본 매핑이 수행됩니다.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="Contact" sql:relation="Person.Contact" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="FName"
sql:field="FirstName"
type="xsd:string" />
<xsd:element name="LName"
sql:field="LastName"
type="xsd:string" />
</xsd:sequence>
<xsd:attribute name="ContactID"
type="xsd:integer" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
스키마에 대해 예제 XPath 쿼리를 테스트하려면
위 스키마 코드를 복사한 후 텍스트 파일에 붙여 넣습니다. 파일을 MySchema-annotated.xml로 저장합니다.
다음 템플릿을 복사한 후 텍스트 파일에 붙여 넣습니다. MySchema-annotated.xml을 저장한 디렉터리와 같은 디렉터리에 MySchema-annotatedT.xml 이름으로 파일을 저장합니다.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="MySchema-annotated.xml"> /Contact </sql:xpath-query> </ROOT>
매핑 스키마(MySchema-annotated.xml)에 대해 지정된 디렉터리 경로는 템플릿이 저장된 디렉터리에 상대적입니다. 또한 다음과 같이 절대 경로를 지정할 수 있습니다.
mapping-schema="C:\SqlXmlTest\MySchema-annotated.xml"
SQLXML 4.0 테스트 스크립트(Sqlxml4test.vbs)를 만든 다음 이 스크립트를 사용하여 템플릿을 실행합니다.
자세한 내용은 Using ADO to Execute SQLXML Queries을 참조하십시오.
다음은 결과 집합의 일부입니다.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Contact ContactID="1">
<FName>Gustavo</FName>
<LName>Achong</LName>
</Contact>
.....
</ROOT>