다음을 통해 공유


targetNamespace 특성을 사용하여 대상 네임스페이스 지정(SQLXML 4.0)

적용 대상: SQL ServerAzure SQL Database

XSD 스키마를 작성할 때 XSD targetNamespace 특성을 사용하여 대상 네임스페이스를 지정할 수 있습니다. 이 문서에서는 XSD targetNamespaceelementFormDefaultattributeFormDefault 특성의 작동 방식, 생성된 XML 인스턴스에 미치는 영향 및 네임스페이스를 사용하여 XPath 쿼리를 지정하는 방법을 설명합니다.

특성을 사용하여 기본 네임스페이 xsd:targetNamespace 스의 요소와 특성을 다른 네임스페이스에 배치할 수 있습니다. 또한 명시적으로 접두사를 사용하거나 기본적으로 암시적으로 스키마의 로컬로 선언된 요소와 특성을 네임스페이스로 정규화할지 여부를 지정할 수 있습니다. 요소의 elementFormDefault 특성과 attributeFormDefault 특성을 사용하여 로컬 요소 및 특성 <xsd:schema> 의 한정을 전역적으로 지정하거나 특성을 사용하여 form 개별 요소와 특성을 별도로 지정할 수 있습니다.

예제

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

A. 대상 네임스페이스 지정

다음 XSD 스키마는 특성을 사용하여 대상 네임스페이 xsd:targetNamespace 스를 지정합니다. 또한 스키마는 및 attributeFormDefault 특성 값을 (이러한 특성의 기본값)으로 "unqualified" 설정합니다elementFormDefault. 전역 선언이며 스키마의 모든 로컬 요소<Order>와 특성(CustomerIDContactNameOrderID 스키마)에 영향을 줍니다.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:sql="urn:schemas-microsoft-com:mapping-schema"
    xmlns:CO="urn:MyNamespace"
    targetNamespace="urn:MyNamespace">
    <xsd:annotation>
        <xsd:appinfo>
            <sql:relationship name="CustOrders"
                parent="Sales.Customer"
                parent-key="CustomerID"
                child="Sales.SalesOrderHeader"
                child-key="CustomerID" />
        </xsd:appinfo>
    </xsd:annotation>

    <xsd:element name="Customer"
        sql:relation="Sales.Customer"
        type="CO:CustomerType" />

    <xsd:complexType name="CustomerType">
        <xsd:sequence>
            <xsd:element name="Order"
                sql:relation="Sales.SalesOrderHeader"
                sql:relationship="CustOrders"
                type="CO:OrderType" />
        </xsd:sequence>
        <xsd:attribute name="CustomerID" type="xsd:string" />
        <xsd:attribute name="SalesPersonID" type="xsd:string" />
    </xsd:complexType>
    <xsd:complexType name="OrderType">
        <xsd:attribute name="SalesOrderID" type="xsd:integer" />
        <xsd:attribute name="CustomerID" type="xsd:string" />
    </xsd:complexType>
</xsd:schema>

스키마에서:

  • CustomerTypeOrderType 형식 선언은 전역이므로 스키마의 대상 네임스페이스에 포함됩니다. 따라서 요소 및 해당 자식 요소의 <Customer> 선언에서 이러한 형식을 <Order> 참조하는 경우 대상 네임스페이스와 연결된 접두사를 지정합니다.

  • <Customer> 스키마의 전역 요소이므로 요소가 스키마의 대상 네임스페이스에도 포함됩니다.

스키마에 대해 다음 XPath 쿼리를 실행합니다.

(/CO:Customer[@CustomerID=1)

이 XPath 쿼리를 실행하면 다음 인스턴스 문서가 생성됩니다. 여기에는 주문의 일부만 나와 있습니다.

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <y0:Customer xmlns:y0="urn:MyNamespace"
      CustomerID="ALFKI" ContactName="Maria Anders">
        <Order CustomerID="ALFKI" OrderID="10643" />
        <Order CustomerID="ALFKI" OrderID="10692" />
        ...
  </y0:Customer>
  </ROOT>

이 인스턴스 문서는 urn:MyNamespace 네임스페이스를 정의하고 접두사(y0)를 연결합니다. 접두사는 전역 요소에 <Customer> 만 적용됩니다. (요소는 스키마에서 요소의 <xsd:schema> 자식으로 선언되므로 전역입니다.)

접두사는 스키마에서 값과 특성 elementFormDefault 이 설정 "unqualified" 되므로 로컬 요소 및 attributeFormDefault 특성에 적용되지 않습니다. <Order> 해당 선언이 요소를 정의하는 요소의 <complexType> 자식으로 표시되므로 요소는 로컬입니다<CustomerType>. 마찬가지로 특성(CustomerIDOrderIDContactName)은 전역이 아닌 로컬입니다.

이 스키마의 작업 샘플 만들기

  1. 이전 스키마 코드를 복사하여 텍스트 파일에 붙여넣습니다. 파일을 targetNamespace.xml로 저장합니다.

  2. 다음 템플릿을 복사하여 텍스트 파일에 붙여넣습니다. 파일을 저장한 targetNameSpaceT.xml 동일한 디렉터리에 저장 targetNamespace.xml합니다.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
        <sql:xpath-query mapping-schema="targetNamespace.xml"
            xmlns:CO="urn:MyNamespace">
            /CO:Customer[@CustomerID=1]
        </sql:xpath-query>
    </ROOT>
    

    템플릿의 XPath 쿼리는 CustomerID가 <Customer> 1인 고객의 요소를 반환합니다. XPath 쿼리는 특성이 아닌 쿼리의 요소에 대한 네임스페이스 접두사를 지정합니다. (로컬 특성은 스키마에 지정된 대로 정규화되지 않습니다.)

    매핑 스키마(targetNamespace.xml)에 지정된 디렉터리 경로는 템플릿이 저장된 디렉터리를 기준으로 합니다. 절대 경로도 지정할 수 있습니다. 예를 들면 다음과 같습니다.

    mapping-schema="C:\MyDir\targetNamepsace.xml"
    
  3. SQLXML 4.0 테스트 스크립트(Sqlxml4test.vbs)를 만들고 사용하여 템플릿을 실행합니다.

    자세한 내용은 ADO를 사용한 SQLXML 4.0 쿼리를 실행합니다.

스키마가 지정 elementFormDefault 하고 attributeFormDefault"qualified"이 있는 특성이 있는 경우 인스턴스 문서에는 모든 로컬 요소와 특성이 정규화됩니다. 요소에 이러한 특성을 포함하도록 이전 스키마를 <xsd:schema> 변경하고 템플릿을 다시 실행할 수 있습니다. 이제 특성도 인스턴스에서 정규화되므로 XPath 쿼리는 네임스페이스 접두사를 포함하도록 변경됩니다.

수정된 XPath 쿼리입니다.

/CO:Customer[@CO:CustomerID=1]

반환되는 XML 문서는 다음과 같습니다.

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
   <y0:Customer xmlns:y0="urn:MyNamespace" CustomerID="1" SalesPersonID="280">
      <Order SalesOrderID="43860" CustomerID="1" />
      <Order SalesOrderID="44501" CustomerID="1" />
      <Order SalesOrderID="45283" CustomerID="1" />
      <Order SalesOrderID="46042" CustomerID="1" />
   </y0:Customer>
</ROOT>