쿼리에 주석이 추가된 XSD 스키마 사용(SQLXML 4.0)

템플릿에 XDR 스키마에 대한 XPath 쿼리를 지정하는 방식으로 주석이 추가된 스키마에 대해 쿼리를 지정하여 데이터베이스에서 데이터를 검색할 수 있습니다.

<sql:xpath-query> 요소를 사용하면 주석이 추가된 스키마에 정의된 XML 뷰에 대해 XPath 쿼리를 지정할 수 있습니다. XPath 쿼리가 실행될 주석이 추가된 스키마는 <sql:xpath-query> 요소의 mapping-schema 특성을 사용하여 식별합니다.

템플릿은 하나 이상의 쿼리를 포함하는 유효한 XML 문서입니다. FOR XML 및 XPath 쿼리는 문서 조각을 반환합니다. 템플릿은 문서 조각의 컨테이너 역할을 하며 단일 최상위 요소를 지정하는 방법을 제공합니다.

이 항목의 예에서는 템플릿을 통해 주석이 추가된 스키마에 대해 XPath 쿼리를 지정하여 데이터베이스에서 데이터를 검색합니다.

예를 들어 주석이 추가된 다음 스키마를 참조하십시오.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
  <xsd:element name="Person.Contact" >
     <xsd:complexType>
       <xsd:attribute name="ContactID" type="xsd:string" /> 
       <xsd:attribute name="FirstName" type="xsd:string" /> 
       <xsd:attribute name="LastName"  type="xsd:string" /> 
     </xsd:complexType>
  </xsd:element>
</xsd:schema>

이해하기 쉽도록 이 XSD 스키마는 Schema2.xml이라는 파일에 저장됩니다. 따라서 다음 템플릿 파일(Schema2T.xml)에 주석이 추가된 스키마에 대한 XPath 쿼리를 지정할 수 있었습니다.

<sql:xpath-query 
     xmlns:sql="urn:schemas-microsoft-com:xmlsql"
     >
          Person.Contact[@ContactID="1"]
</sql:xpath-query>

그러면 SQLXML 4.0 테스트 스크립트(Sqlxml4test.vbs)를 만들어서 사용하여 템플릿 파일의 일부로 쿼리를 실행할 수 있습니다. 자세한 내용은 주석이 추가된 XDR 스키마(SQLXML 4.0에서는 더 이상 사용되지 않음)을 참조하십시오.

인라인 매핑 스키마 사용

주석이 추가된 스키마를 템플릿에 직접 포함한 다음 이 템플릿에 인라인 스키마에 대한 XPath 쿼리를 지정할 수 있습니다. 이 템플릿은 Updategram일 수도 있습니다.

템플릿에는 여러 개의 인라인 스키마가 포함될 수 있습니다. 스키마에 포함된 인라인 스키마를 사용하려면 <xsd:schema> 요소에 고유한 값과 함께 id 특성을 지정한 다음 #idvalue를 사용하여 인라인 스키마를 참조합니다. id 특성의 동작은 XDR 스키마에 사용되는 sql:id({urn:schemas-microsoft-com:xml-sql}id)의 동작과 동일합니다.

예를 들어 다음 템플릿에서는 주석이 추가된 두 개의 인라인 스키마를 지정합니다.

<ROOT xmlns:sql='urn:schemas-microsoft-com:xml-sql'>
<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'
        xmlns:ms='urn:schemas-microsoft-com:mapping-schema'
        id='InLineSchema1' sql:is-mapping-schema='1'>
  <xsd:element name='Employees' ms:relation='HumanResources.Employee'>
    <xsd:complexType>
      <xsd:attribute name='LoginID' 
                     type='xsd:string'/>
      <xsd:attribute name='Title' 
                     type='xsd:string'/>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'
        xmlns:ms='urn:schemas-microsoft-com:mapping-schema'
        id='InLineSchema2' sql:is-mapping-schema='1'>
  <xsd:element name='Contacts' ms:relation='Person.Contact'>
    <xsd:complexType>

      <xsd:attribute name='ContactID' 
                     type='xsd:string' />
      <xsd:attribute name='FirstName' 
                     type='xsd:string' />
      <xsd:attribute name='LastName' 
                     type='xsd:string' />
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

<sql:xpath-query xmlns:sql='urn:schemas-microsoft-com:xml-sql' 
        mapping-schema='#InLineSchema1'>
    /Employees[@LoginID='adventure-works\guy1']
</sql:xpath-query>

<sql:xpath-query xmlns:sql='urn:schemas-microsoft-com:xml-sql' 
        mapping-schema='#InLineSchema2'>
    /Contacts[@ContactID='1']
</sql:xpath-query>
</ROOT>

이 템플릿에서는 두 개의 XPath 쿼리도 지정합니다. 각 <xpath-query> 요소는 mapping-schema 특성을 지정하여 매핑 스키마를 고유하게 식별합니다.

템플릿에 인라인 스키마를 지정하는 경우 <xsd:schema> 요소에 sql:is-mapping-schema 주석도 지정해야 합니다. sql:is-mapping-schema는 부울 값(0=false, 1=true)을 사용합니다. **sql:is-mapping-schema="1"**이 있는 인라인 스키마는 주석이 추가된 인라인 스키마로 처리되며 XML 문서에 반환되지 않습니다.

sql:is-mapping-schema 주석은 템플릿 네임스페이스 urn:schemas-microsoft-com:xml-sql에 속합니다.

이 예를 테스트하려면 로컬 디렉터리에 템플릿(InlineSchemaTemplate.xml)을 지정한 다음 SQLXML 4.0 테스트 스크립트(Sqlxml4test.vbs)를 만들어서 사용하여 템플릿을 실행합니다. 자세한 내용은 ADO를 사용하여 SQLXML 4.0 쿼리 실행를 참조하십시오.

템플릿의 <sql:xpath-query> 요소(XPath 쿼리가 있는 경우) 또는 Updategram의 <updg:sync> 요소에 mapping-schema 특성을 지정하는 것 외에도 다음을 수행할 수 있습니다.

  • 템플릿의 <ROOT> 요소(전역 선언)에 mapping-schema 특성을 지정합니다. 그러면 이 매핑 스키마가 명시적 mapping-schema 주석이 없는 모든 XPath 및 Updategram 노드에서 사용할 기본 스키마가 됩니다.

  • ADO Command 개체를 사용하여 mapping schema 특성을 지정합니다.

<xpath-query> 또는 <updg:sync> 요소에 지정되는 mapping-schema 특성은 가장 높은 우선 순위를 갖는 반면 ADO Command 개체는 가장 낮은 우선 순위를 갖습니다.

템플릿에 XPath 쿼리만 지정하고 XPath 쿼리가 실행되는 매핑 스키마를 지정하지 않으면 XPath 쿼리가 dbobject 유형 쿼리로 처리됩니다. 예를 들어 다음 템플릿을 참조하십시오.

<sql:xpath-query 
     xmlns:sql="urn:schemas-microsoft-com:xmlsql">
          Production.ProductPhoto[@ProductPhotoID='100']/@LargePhoto
</sql:xpath-query>

이 템플릿에서는 XPath 쿼리만 지정하고 매핑 스키마는 지정하지 않습니다. 따라서 이 쿼리는 Production.ProductPhoto가 테이블 이름이고 @ProductPhotoID='100'이 ID 값이 100인 제품 사진을 찾는 조건자인 dbobject 유형 쿼리로 처리됩니다. @LargePhoto는 값을 검색할 열입니다.