다음을 통해 공유


XML 스키마 컬렉션(SQL Server)

xml(Transact-SQL) 항목에 설명된 대로 SQL Server는 데이터 형식을 통해 XML 데이터의 네이티브 스토리지를 xml 제공합니다. 필요에 따라 XML 스키마 컬렉션을 통해 XSD 스키마를 변수 또는 형식 열 xml 과 연결할 수 있습니다. XML 스키마 컬렉션은 가져온 XML 스키마를 저장한 다음 다음을 수행하는 데 사용됩니다.

  • XML 인스턴스 유효성 검사

  • 데이터베이스에 저장된 XML 데이터를 입력합니다.

XML 스키마 컬렉션은 데이터베이스의 테이블과 같은 메타데이터 엔터티입니다. 만들고, 수정하고, 삭제할 수 있습니다. CREATE XML SCHEMA COLLECTION(Transact-SQL) 문에 지정된 스키마는 새로 만든 XML 스키마 컬렉션 개체로 자동으로 가져옵니다. ALTER XML SCHEMA COLLECTION(Transact-SQL) 문을 사용하여 데이터베이스의 기존 컬렉션 개체로 추가 스키마 또는 스키마 구성 요소를 가져올 수 있습니다.

스키마가 인스턴스 데이터에 필요한 데이터 형식 정보를 제공하기 때문에 스키마가 연결된 열 또는 변수에 저장된 XML을 형식화된 XML과 형식화되지 않은 XML에 설명 된 대로 형식화된 XML이라고 합니다. SQL Server는 이 형식 정보를 사용하여 데이터 스토리지를 최적화합니다.

또한 쿼리 처리 엔진은 형식 검사에 스키마를 사용하고 쿼리 및 데이터 수정을 최적화합니다.

또한 SQL Server는 형식화된 xml경우 연결된 XML 스키마 컬렉션을 사용하여 XML 인스턴스의 유효성을 검사합니다. XML 인스턴스가 스키마를 준수하는 경우 데이터베이스는 해당 형식 정보를 사용하여 인스턴스를 시스템에 저장할 수 있도록 허용합니다. 그렇지 않으면 인스턴스를 거부합니다.

내장 함수 XML_SCHEMA_NAMESPACE 사용하여 데이터베이스에 저장된 스키마 컬렉션을 검색할 수 있습니다. 자세한 내용은 저장된 XML 스키마 컬렉션 보기를 참조하세요.

XML 스키마 컬렉션을 사용하여 XML 변수, 매개 변수 및 열을 입력할 수도 있습니다.

스키마 컬렉션 관리를 위한 DDL

데이터베이스에서 XML 스키마 컬렉션을 만들고 형식의 xml 변수 및 열과 연결할 수 있습니다. 데이터베이스에서 스키마 컬렉션을 관리하기 위해 SQL Server는 다음 DDL 문을 제공합니다.

XML 스키마 컬렉션과 이 컬렉션에 포함된 스키마를 사용하려면 먼저 CREATE XML SCHEMA COLLECTION 문을 사용하여 컬렉션과 스키마를 만들어야 합니다. 스키마 컬렉션을 만든 후에는 형식의 xml 변수와 열을 만들고 스키마 컬렉션을 연결할 수 있습니다. 스키마 컬렉션을 만든 후에는 다양한 스키마 구성 요소가 메타데이터에 저장됩니다. ALTER XML SCHEMA COLLECTION을 사용하여 기존 스키마에 더 많은 구성 요소를 추가하거나 기존 컬렉션에 새 스키마를 추가할 수도 있습니다.

스키마 컬렉션을 삭제하려면 DROP XML SCHEMA COLLECTION 문을 사용합니다. 그러면 컬렉션에 포함된 모든 스키마가 삭제되고 컬렉션 개체가 제거됩니다. 스키마 컬렉션을 삭제하려면 DROP XML SCHEMA COLLECTION(Transact-SQL)에 설명된 조건이 충족되어야 합니다.

스키마 구성 요소 이해

CREATE XML SCHEMA COLLECTION 문을 사용하면 다양한 스키마 구성 요소를 데이터베이스로 가져옵니다. 스키마 구성 요소에는 스키마 요소, 특성 및 형식 정의가 포함됩니다. DROP XML SCHEMA COLLECTION 문을 사용하는 경우 전체 컬렉션을 제거합니다.

CREATE XML SCHEMA COLLECTION은 스키마 구성 요소를 다양한 시스템 테이블에 저장합니다.

예를 들어 다음 스키마를 고려합니다.

<?xml version="1.0"?>  
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            targetNamespace="uri:Cust_Orders2"  
            xmlns="uri:Cust_Orders2" >  
  <xsd:attribute name="SomeAttribute" type="xsd:int" />  
  <xsd:complexType name="SomeType" />  
  <xsd:complexType name="OrderType" >  
    <xsd:sequence>  
      <xsd:element name="OrderDate" type="xsd:date" />  
      <xsd:element name="RequiredDate" type="xsd:date" />  
      <xsd:element name="ShippedDate" type="xsd:date" />  
    </xsd:sequence>  
    <xsd:attribute name="OrderID" type="xsd:ID" />  
    <xsd:attribute name="CustomerID"  />  
    <xsd:attribute name="EmployeeID"  />  
  </xsd:complexType>  
  <xsd:complexType name="CustomerType" >  
     <xsd:sequence>  
        <xsd:element name="Order" type="OrderType"  
                     maxOccurs="unbounded" />  
       </xsd:sequence>  
      <xsd:attribute name="CustomerID" type="xsd:string" />  
      <xsd:attribute name="OrderIDList" type="xsd:IDREFS" />  
  </xsd:complexType>  
  <xsd:element name="Customer" type="CustomerType" />  
</xsd:schema>  

이전 스키마는 데이터베이스에 저장할 수 있는 다양한 유형의 구성 요소를 보여 줍니다. 여기에는 SomeAttribute, SomeType, OrderType, CustomerType, Customer, Order, CustomerID, OrderID, OrderDate, RequiredDate, ShippedDate 등이 포함됩니다.

구성 요소 범주

데이터베이스에 저장된 스키마 구성 요소는 다음 범주로 분류됩니다.

  • 요소

  • 속성

  • TYPE(단순 또는 복합 형식의 경우)

  • 속성 그룹

  • MODELGROUP

다음은 그 예입니다.

  • SomeAttribute 는 ATTRIBUTE 구성 요소입니다.

  • SomeType, OrderTypeCustomerType 은 TYPE 구성 요소입니다.

  • 고객은 ELEMENT 구성 요소입니다.

데이터베이스로 스키마를 가져올 때 SQL Server는 스키마 자체를 저장하지 않습니다. 대신 SQL Server는 다양한 개별 구성 요소를 저장합니다. 즉, <스키마 태그는 저장되지 않고 스키마> 태그 내에 정의된 구성 요소만 유지됩니다. 모든 스키마 요소는 유지되지 않습니다. 스키마> 태그에 <해당 구성 요소의 기본 동작을 지정하는 특성이 포함된 경우 다음 표와 같이 가져오기 프로세스 중에 이러한 특성이 해당 구성 요소 내의 스키마 구성 요소로 이동됩니다.

속성 이름 행동
attributeFormDefault 아직 없는 스키마의 모든 특성 선언에 적용된 양식 특성이며 값은 attributeFormDefault 특성의 값으로 설정됩니다.
elementFormDefault 아직 없는 스키마의 모든 요소 선언에 적용된 양식 특성이며 값은 elementFormDefault 특성의 값으로 설정됩니다.
기본_차단 블록 특성은 아직 없는 모든 요소 선언 및 형식 정의에 적용되며 값은 blockDefault 특성의 값으로 설정됩니다.
finalDefault 아직 없는 모든 요소 선언 및 형식 정의에 적용된 최종 특성이며 값은 finalDefault 특성의 값으로 설정됩니다.
targetNamespace 대상 네임스페이스에 속하는 구성 요소에 대한 정보는 메타데이터에 저장됩니다.

XML 스키마 컬렉션에 대한 권한

다음을 수행하는 데 필요한 권한이 있어야 합니다.

  • XML 스키마 컬렉션 만들기/로드

  • XML 스키마 컬렉션 수정

  • XML 스키마 컬렉션 삭제

  • XML 스키마 컬렉션을 사용하여 열, 변수 및 매개 변수 형식을 입력 xml 하거나 테이블 또는 열 제약 조건에서 사용합니다.

SQL Server 보안 모델은 모든 개체에 대한 CONTROL 권한을 허용합니다. 이 권한의 허가 받은 사람은 개체에 대한 모든 다른 권한을 얻습니다. 개체의 소유자도 개체에 대한 모든 권한을 갖습니다.

개체에 대한 CONTROL 권한의 소유자와 권한 수여자는 개체에 대한 모든 권한을 부여할 수 있습니다. 소유자가 아니고 CONTROL 권한이 없는 사용자는 WITH GRANT OPTION을 지정할 때 개체에 대한 사용 권한을 계속 부여할 수 있습니다. 예를 들어 사용자 A는 WITH GRANT OPTION을 통해 XML 스키마 컬렉션 S에 대한 REFERENCES 권한이 있지만 S에 대한 다른 권한은 없다고 가정합니다. 사용자 A는 스키마 컬렉션 S에 대해 사용자 B REFERENCES 권한을 부여할 수 있습니다.

또한 보안 모델을 사용하면 XML 스키마 컬렉션을 만들고 사용하거나 한 사용자에서 다른 사용자로 소유권을 이전할 수 있습니다. 다음 항목에서는 XML 스키마 컬렉션 권한에 대해 설명합니다.

XML 스키마 및 스키마 컬렉션에 대한 정보 가져오기

XML 스키마 컬렉션은 카탈로그 뷰 sys.xml_schema_collections에 열거됩니다. XML 스키마 컬렉션 "sys"는 시스템에 의해 정의됩니다. 여기에는 명시적으로 로드하지 않고도 모든 사용자 정의 XML 스키마 컬렉션에서 사용할 수 있는 미리 정의된 네임스페이스가 포함되어 있습니다. 이 목록에는 xml, xs, xsi, fn 및 xdt에 대한 네임스페이스가 포함됩니다. 다른 두 카탈로그 뷰는 각 XML 스키마 컬렉션 내의 모든 네임스페이스를 열거하는 sys.xml_schema_namespaces와 각 XML 스키마 내의 모든 XML 스키마 구성 요소를 열거하는 sys.xml_components입니다.

기본 제공 함수 XML_SCHEMA_NAMESPACEschemaName, XmlSchemacollectionName, namespace-uri는 데이터 형식 인스턴스를 xml 생성합니다. 이 인스턴스에는 미리 정의된 XML 스키마를 제외하고 XML 스키마 컬렉션에 포함된 스키마에 대한 XML 스키마 조각이 포함되어 있습니다.

다음과 같은 방법으로 XML 스키마 컬렉션의 내용을 열거할 수 있습니다.

  • XML 스키마 컬렉션에 대한 적절한 카탈로그 뷰에 대한 Transact-SQL 쿼리를 작성합니다.

  • 기본 제공 함수 XML_SCHEMA_NAMESPACE()를 사용합니다. 이 함수의 출력에 데이터 형식 메서드를 적용 xml 할 수 있습니다. 그러나 기본 XML 스키마는 수정할 수 없습니다.

다음은 다음 예제에 설명되어 있습니다.

예: XML 스키마 컬렉션에서 XML 네임스페이스 열거

XML 스키마 컬렉션 "myCollection"에 대해 다음 쿼리를 사용합니다.

SELECT XSN.name  
FROM    sys.xml_schema_collections XSC JOIN sys.xml_schema_namespaces XSN  
    ON (XSC.xml_collection_id = XSN.xml_collection_id)  
WHERE    XSC.name = 'myCollection'     

예: XML 스키마 컬렉션의 내용 열거

다음 문은 관계형 스키마 dbo 내에서 XML 스키마 컬렉션 "myCollection"의 내용을 열거합니다.

SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection')  

대상 네임스페이스를 XML_SCHEMA_NAMESPACE()의 세 번째 인수로 xml 지정하여 컬렉션 내의 개별 XML 스키마를 데이터 형식 인스턴스로 가져올 수 있습니다. 이 방법은 다음 예제에서 확인할 수 있습니다.

예: XML 스키마 컬렉션에서 지정된 스키마 출력

다음 문은 관계형 스키마 dbo 내의 XML 스키마 컬렉션 "myCollection"에서 대상 네임스페이스가 "https://www.microsoft.com/books"인 XML 스키마를 출력합니다.

SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection',   
N'https://www.microsoft.com/books')  

XML 스키마 쿼리

XML 스키마 컬렉션에 로드한 XML 스키마는 다음과 같은 방법으로 쿼리할 수 있습니다.

  • XML 스키마 네임스페이스에 대한 카탈로그 뷰에 Transact-SQL 쿼리를 작성합니다.

  • 데이터 형식 열이 포함된 xml 테이블을 만들어 XML 스키마를 저장하고 XML 형식 시스템에 로드합니다. xml 데이터 형식 메서드를 사용하여 XML 열을 쿼리할 수 있습니다. 또한 이 열에 XML 인덱스도 작성할 수 있습니다. 그러나 이 방법을 사용하면 애플리케이션이 XML 열에 저장된 XML 스키마와 XML 형식 시스템 간에 일관성을 유지해야 합니다. 예를 들어 XML 형식 시스템에서 XML 스키마 네임스페이스를 삭제하는 경우 일관성을 유지하기 위해 테이블에서 XML 스키마 네임스페이스를 삭제해야 합니다.

또한 참조하십시오

저장된 XML 스키마 컬렉션 보기
포함된 스키마를 병합하기 위한 스키마 전처리
서버의 XML 스키마 컬렉션에 대한 요구 사항 및 제한 사항