테이블 및 열에 대한 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 주석은 Microsoft SQL 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 쿼리를 테스트하려면

  1. 위 스키마 코드를 복사한 후 텍스트 파일에 붙여 넣습니다. 파일을 MySchema-annotated.xml로 저장합니다.

  2. 다음 템플릿을 복사한 후 텍스트 파일에 붙여 넣습니다. 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"
    
  3. 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>