다음을 통해 공유


sql:id-prefix를 사용하여 유효한 ID, IDREF 및 IDREFS 유형 특성 만들기(XDR 스키마)

중요 정보중요

이 항목은 레거시 응용 프로그램에 대한 참조용으로 포함되었습니다. 이 기능에 대해서는 이후 개발 작업이 진행되지 않습니다. 새 개발 작업에서는 이 기능을 사용하지 마십시오. 대신 주석이 추가된 XSD 스키마를 사용하여 XML 뷰를 만드십시오. 자세한 내용은 주석이 추가된 XSD 스키마 소개(SQLXML 4.0)을 참조하십시오. 주석이 추가된 기존 XDR 스키마를 XSD 스키마로 변환할 수 있습니다. 자세한 내용은 주석이 추가된 XDR 스키마를 해당 XSD 스키마로 변환(SQLXML 4.0)을 참조하십시오.

특성을 ID 유형 특성으로 지정할 수 있습니다. 그런 다음 IDREF 또는 IDREFS로 지정된 특성을 사용하여 ID 유형 특성을 참조할 수 있으므로 문서 간 연결을 사용할 수 있습니다.

ID, IDREF 및 IDREFS는 몇 가지 차이점은 있지만 데이터베이스의 기본 키/외래 키(PK/FK) 관계에 해당합니다. XML 문서에서 ID 유형 특성 값은 고유해야 합니다. XML 문서에 CustomerID 및 SalesOrderID 특성이 있는 경우 이러한 값은 고유해야 합니다. 하지만 데이터베이스에서 CustomerID 및 SalesOrderID 열은 동일한 값을 가질 수 있습니다. 예를 들어, 데이터베이스에서 CustomerID가 1이고 OrderID가 1일 수 있습니다.

ID, IDREF 및 IDREFS 특성이 유효하려면 다음 조건을 충족해야 합니다.

  • ID 값이 XML 문서 내에서 고유해야 합니다.

  • 모든 IDREF 및 IDREFS에 대해 참조된 ID 값이 XML 문서에 있어야 합니다.

  • ID, IDREF 및 IDREFS 값은 명명된 토큰이어야 합니다. 예를 들어, 정수 값 101은 ID 값이 될 수 없습니다.

  • ID, IDREF 및 IDREFS 유형의 특성은 text, ntext, image 형식이나 다른 이진 데이터 형식(예: timestamp)의 열에 매핑할 수 없습니다.

XML 문서에 ID가 여러 개 포함되어 있으면 sql:prefix 주석을 지정하여 고유한 값을 만듭니다. . The sql:id-prefix 주석은 숫자에서 명명된 토큰을 만드는 데에도 사용됩니다. sql:id-prefix에 지정된 값은 유효한 이름 문자여야 합니다.

sql:id-prefix특성은 ID, IDREF 및 IDREFS 값을 문자열 앞에 추가하여 해당 문자열을 고유하게 만듭니다. 접두사의 유효성과 ID, IDREF 또는 IDREFS 값의 고유성을 확인하는 검사는 수행되지 않습니다.

ID, IDREF 또는 IDREFS 형식이 아닌 특성에 대해서는 sql:id-prefix특성이 무시됩니다.

[!참고]

ID, IDREF 및 IDREFS 특성의 각 값은 접두사(지정된 경우)를 포함하여 4,000자로 제한됩니다.

다음 예를 사용하여 작업 예제를 만들려면 특정 요구 사항이 충족되어야 합니다. 자세한 내용은 SQLXML 예 실행을 위한 요구 사항을 참조하십시오.

1. ID 유형 특성에 대해 sql:id-prefix 지정

이 XDR 스키마에서 SalesOrderID 및 CustomerID 특성은 ID 유형으로 선언되어 있습니다. ID의 고유성과 유효성이 보장되도록 이러한 특성에 sql:id-prefix 주석을 지정합니다.

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <ElementType name="Order" sql:relation="Sales.SalesOrderHeader" sql:key-fields="SalesOrderID">
    <AttributeType name="SalesOrderID" dt:type="id" sql:id-prefix="Ord-" />
    <AttributeType name="OrderDate" />
 
    <attribute type="SalesOrderID" />
    <attribute type="OrderDate" />
  </ElementType>

  <ElementType name="Customer" sql:relation="Sales.Customer">
    <AttributeType name="CustomerID" dt:type="id" />
    <attribute type="CustomerID" />
    <AttributeType name="OrderList" dt:type="idrefs"
                                 sql:id-prefix="Ord-" />
    <attribute type="OrderList" sql:relation="Sales.SalesOrderHeader" sql:field="SalesOrderID">
        <sql:relationship
                key-relation="Sales.Customer"
                key="CustomerID"
                foreign-relation="Sales.SalesOrderHeader"
                foreign-key="CustomerID" />
    </attribute>
    <element type="Order">
        <sql:relationship key-relation="Sales.SalesOrderHeader"
                          key="SalesOrderID"
                          foreign-relation="Sales.Customer"
                          foreign-key="SalesOrderID" />
    </element>
  </ElementType>
</Schema>

스키마에 대해 예제 XPath 쿼리를 테스트하려면

  1. 위 스키마 코드를 복사한 후 텍스트 파일에 붙여넣습니다. 파일을 sqlPrefix-Xdr.xml로 저장합니다.

  2. 다음 템플릿을 복사한 후 텍스트 파일에 붙여넣습니다. sqlPrefix-Xdr.xml을 저장한 디렉터리와 같은 디렉터리에 sqlPrefix-XdrT.xml로 파일을 저장합니다. 템플릿의 XPath 쿼리는 CustomerID가 1인 <Customer> 및 <Order> 하위 요소를 반환합니다.

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

    매핑 스키마(sqlPrefix-Xdr.xml)에 대해 지정된 디렉터리 경로는 템플릿이 저장된 디렉터리에 상대적입니다. 또한 다음과 같이 절대 경로를 지정할 수 있습니다.

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

    자세한 내용은 ADO를 사용하여 SQLXML 4.0 쿼리 실행을 참조하십시오.

결과 집합은 다음과 같습니다.

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Customer CustomerID="1" OrderIDList="Ord-43860 Ord-44501 Ord-45283 Ord-46042">
    <Order SalesOrderID="Ord-43860" OrderDate="2001-08-01T00:00:00" /> 
    <Order SalesOrderID="Ord-44501" OrderDate="2001-11-01T00:00:00" /> 
    <Order SalesOrderID="Ord-45283" OrderDate="2002-02-01T00:00:00" /> 
    <Order SalesOrderID="Ord-46042" OrderDate="2002-05-01T00:00:00" /> 
  </Customer>
</ROOT>

참고 항목

참조