targetNamespace 특성을 사용하여 대상 네임스페이스 지정(SQLXML 4.0)
XSD 스키마를 작성할 때 XSD targetNamespace 특성을 사용하여 대상 네임스페이스를 지정할 수 있습니다. 이 항목에서는 XSD targetNamespace, elementFormDefault 및 attributeFormDefault 특성이 작동하는 방식, 생성된 XML instance 미치는 영향 및 네임스페이스를 사용하여 XPath 쿼리를 지정하는 방법에 대해 설명합니다.
xsd:targetNamespace 특성을 사용하여 기본 네임스페이스의 요소와 특성을 다른 네임스페이스에 배치할 수 있습니다. 또한 로컬로 선언된 스키마 요소 및 특성을 접두사를 사용하여 명시적으로 또는 암시적으로(기본 설정) 네임스페이스에서 정규화된 것으로 표시할지 여부를 지정할 수도 있습니다. xsd:schema> 요소에서<elementFormDefault 및 attributeFormDefault 특성을 사용하여 로컬 요소 및 특성의 자격을 전역적으로 지정하거나 양식 특성을 사용하여 개별 요소와 특성을 별도로 지정할 수 있습니다.
예제
다음 예를 사용하여 작업 예제를 만들려면 특정 요구 사항이 충족되어야 합니다. 자세한 내용은 SQLXML 예제 실행에 대한 요구 사항을 참조하세요.
A. 대상 네임스페이스 지정
다음 XSD 스키마는 xsd:targetNamespace 특성을 사용하여 대상 네임스페이스를 지정합니다. 또한 스키마는 elementFormDefault 및 attributeFormDefault 특성 값을 "정규화되지 않은" (이러한 특성의 기본값)으로 설정합니다. 전역 선언이며 모든 로컬 요소(스키마의 순서>) 및 특성(<스키마의 CustomerID, ContactName 및 OrderID)에 영향을 줍니다.
<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>
스키마에서 다음을 확인하십시오.
CustomerType 및 OrderType 형식 선언은 전역이므로 스키마의 대상 네임스페이스에 포함됩니다. 따라서 이러한 형식이 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>
이 instance 문서에서는 urn:MyNamespace 네임스페이스를 정의하고 접두사(y0)를 연결합니다. 접두사는 Customer> 전역 요소에<만 적용됩니다. (요소는 스키마에서 xsd:schema> 요소의< 자식으로 선언되기 때문에 전역입니다.)
elementFormDefault 및 attributeFormDefault 특성의 값이 스키마에서 "정규화되지 않음"으로 설정되므로 접두사는 로컬 요소 및 특성에 적용되지 않습니다. Order> 요소는 해당 선언이<CustomerType> 요소를 정의하는<complexType> 요소의< 자식으로 표시되므로 로컬입니다. 마찬가지로 특성(CustomerID, OrderID 및 ContactName)은 전역이 아닌 로컬입니다.
이 스키마의 작업 예제를 만들려면
위 스키마 코드를 복사한 후 텍스트 파일에 붙여넣습니다. 파일을 targetNameSpace.xml로 저장합니다.
다음 템플릿을 복사한 후 텍스트 파일에 붙여넣습니다. 파일을 targetNamespace.xml을 저장한 디렉터리와 같은 디렉터리에 targetNameSpaceT.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>가< 1인 고객의 Customer 요소를 반환합니다. XPath 쿼리에서 요소에 대해서만 네임스페이스 접두사가 지정되고 특성에 대해서는 지정되지 않는 것을 알 수 있습니다. 스키마에 지정된 대로 로컬 특성이 정규화되지 않는 것입니다.
매핑 스키마(targetNamespace.xml)에 대해 지정된 디렉터리 경로는 템플릿이 저장된 디렉터리에 상대적입니다. 또한 다음과 같이 절대 경로를 지정할 수 있습니다.
mapping-schema="C:\MyDir\targetNamepsace.xml"
SQLXML 4.0 테스트 스크립트(Sqlxml4test.vbs)를 만든 다음 이 스크립트를 사용하여 템플릿을 실행합니다.
자세한 내용은 ADO를 사용하여 SQLXML 쿼리 실행을 참조하세요.
스키마가 값이 "정규화"된 elementFormDefault 및 attributeFormDefault 특성을 지정하는 경우 instance 문서에는 모든 로컬 요소와 특성이 정규화됩니다. 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>