XSD 스키마를 작성할 때 XSD targetNamespace 특성을 사용하여 대상 네임스페이스를 지정할 수 있습니다. 이 항목에서는 XSD targetNamespace, elementFormDefault 및 attributeFormDefault 특성의 작동 방식, 생성된 XML 인스턴스에 미치는 영향 및 네임스페이스를 사용하여 XPath 쿼리를 지정하는 방법에 대해 설명합니다.
xsd:targetNamespace 특성을 사용하여 기본 네임스페이스의 요소와 특성을 다른 네임스페이스에 배치할 수 있습니다. 또한 명시적으로 접두사를 사용하거나 기본적으로 암시적으로 스키마의 로컬로 선언된 요소와 특성을 네임스페이스로 정규화할지 여부를 지정할 수 있습니다. xsd:schema> 요소에서 elementFormDefault 및 attributeFormDefault 특성을< 사용하여 로컬 요소 및 특성의 정규화된 값을 전역적으로 지정하거나 양식 특성을 사용하여 개별 요소와 특성을 개별적으로 지정할 수 있습니다.
예시
다음 예제를 사용하여 작업 샘플을 만들려면 특정 요구 사항을 충족해야 합니다. 자세한 내용은 SQLXML 실행 요구 사항 예제를 참조 하세요.
A. 대상 네임스페이스 지정
다음 XSD 스키마는 xsd:targetNamespace 특성을 사용하여 대상 네임스페이스를 지정합니다. 또한 스키마는 elementFormDefault 및 attributeFormDefault 특성 값을 "unqualified" (이러한 특성의 기본값)로 설정합니다. 전역 선언이며 모든 로컬 요소(스키마의 순서>) 및 특성(<스키마의 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>
이 인스턴스 문서는 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 특성을 지정하는 경우 인스턴스 문서에는 모든 로컬 요소와 특성이 정규화됩니다. 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>