테이블/열에 대한 사용자 지정 XSD 매핑(SQLXML)

적용 대상: SQL Server Azure SQL 데이터베이스

XSD 스키마를 사용하여 관계형 데이터베이스의 XML 뷰를 제공할 때는 스키마의 요소 및 특성을 데이터베이스의 테이블 및 열에 매핑해야 합니다. 데이터베이스 테이블/뷰의 행은 XML 문서의 요소에 매핑됩니다. 데이터베이스의 열 값은 특성 또는 요소에 매핑됩니다.

XPath 쿼리는 주석이 추가된 XSD 스키마에 대해 지정되며 스키마의 요소 및 특성에 대한 데이터는 매핑되는 테이블 및 열에서 검색됩니다. 데이터베이스에서 단일 값을 얻으려면 XSD 스키마에 지정된 매핑에 관계 및 필드 사양이 모두 있어야 합니다. 요소/특성의 이름이 매핑되는 테이블/뷰 또는 열 이름과 같지 않은 경우 SQL:relationsql:field 주석을 사용하여 XML 문서의 요소 또는 특성과 데이터베이스의 테이블(뷰) 또는 열 간의 매핑을 지정합니다.

sql-relation

sql:relation 주석은 XSD 스키마의 XML 노드를 데이터베이스 테이블에 매핑하기 위해 추가됩니다. 테이블 이름(뷰)은 sql:relation 주석의 값으로 지정됩니다.

요소에 sql:relation을 지정하면 이 주석의 scope 해당 요소의 복합 형식 정의에 설명된 모든 특성 및 자식 요소에 적용되므로 주석 작성에 바로 가기가 제공됩니다.

sql:relation 주석은 Microsoft SQL Server 유효한 식별자가 XML에서 유효하지 않은 경우에도 유용합니다. 예를 들어 "주문 세부 정보"는 SQL Server 유효한 테이블 이름이지만 XML에는 없습니다. 이러한 경우 sql:relation 주석을 사용하여 매핑을 지정할 수 있습니다. 예를 들면 다음과 같습니다.

<xsd:element name="OD" sql:relation="[Order Details]">  

sql-field

sql-field 주석은 요소 또는 특성을 데이터베이스 열에 매핑합니다. sql:field 주석은 스키마의 XML 노드를 데이터베이스 열에 매핑하기 위해 추가됩니다. 빈 콘텐츠 요소에는 sql:field 를 지정할 수 없습니다.

예제

다음 예를 사용하여 작업 예제를 만들려면 특정 요구 사항이 충족되어야 합니다. 자세한 내용은 SQLXML 예제 실행에 대한 요구 사항을 참조하세요.

A. 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)를 만든 다음 이 스크립트를 사용하여 템플릿을 실행합니다.

    자세한 내용은 ADO를 사용하여 SQLXML 쿼리 실행을 참조하세요.

다음은 결과 집합의 일부입니다.

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">   
 <Contact ContactID="1">   
    <FName>Gustavo</FName>   
    <LName>Achong</LName>   
 </Contact>   
  .....  
</ROOT>