쿼리에서 주석이 추가된 XSD 스키마 사용(SQLXML 4.0)
적용 대상: SQL Server Azure SQL Database
XSD 스키마에 대해 템플릿에서 XPath 쿼리를 지정하여 주석이 추가된 스키마에 대한 쿼리를 지정하여 데이터베이스에서 데이터를 검색할 수 있습니다.
<sql:xpath-query> 요소를 사용하면 주석이 추가된 스키마로 정의된 XML 뷰에 대해 XPath 쿼리를 지정할 수 있습니다. XPath 쿼리를 실행할 주석이 추가된 스키마는 sql:xpath-query 요소의< 매핑 스키마 특성을 사용하여 식별됩니다.>
템플릿은 하나 이상의 쿼리를 포함하는 유효한 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 쿼리> 요소는 매핑 스키마 특성을 지정하여 매핑 스키마를 고유하게 식별합니다.
템플릿에서 인라인 스키마를 지정하는 경우 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 쿼리 요소(<XPath 쿼리>가 있는 경우) 또는 updategram의 updg:sync> 요소에서< 매핑 스키마 특성을 지정하는 것 외에도 다음을 수행할 수 있습니다.
템플릿의 ROOT> 요소(전역 선언)에< 매핑 스키마 특성을 지정합니다. 그러면 이 매핑 스키마는 명시적 매핑 스키마 주석이 없는 모든 XPath 및 updategram 노드에서 사용할 기본 스키마 가 됩니다.
ADO Command 개체를 사용하여 매핑 스키마 특성을 지정합니다.
xpath-query> 또는< updg:sync> 요소에 <지정된 매핑 스키마 특성의 우선 순위가 가장 높고 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 는 값을 검색할 열입니다.