XML 스키마 컬렉션 [SQL Server]XML Schema Collections (SQL Server)

xml(Transact-SQL) 항목에 설명된 것과 같이 SQL Server는 xml 데이터 형식을 통해 XML 데이터에 대한 네이티브 저장소를 제공합니다.As described in the topic, xml (Transact-SQL), SQL Server provides native storage of XML data through the xml data type. 선택적으로 XML 스키마 컬렉션을 통해 xml 유형의 열 또는 변수와 XSD 스키마를 연결할 수 있습니다.You can optionally associate XSD schemas with a variable or a column of xml type through an XML schema collection. XML 스키마 컬렉션은 가져온 XML 스키마를 저장하고 다음을 수행하는 데 사용됩니다.The XML schema collection stores the imported XML schemas and is then used to do the following:

  • XML 인스턴스 유효성 검사Validate XML instances

  • 데이터베이스에 저장될 때 XML 데이터 형식화Type the XML data as it is stored in the database

    XML 스키마 컬렉션은 데이터베이스에 있는 테이블과 같은 메타데이터 엔터티입니다.Note that the XML schema collection is a metadata entity like a table in the database. 스키마 컬렉션은 생성, 수정 및 삭제할 수 있습니다.You can create, modify, and drop them. CREATE XML SCHEMA COLLECTION(Transact-SQL) 문에 지정된 스키마는 새로 만든 XML 스키마 컬렉션 개체에 자동으로 가져와집니다.Schemas specified in a CREATE XML SCHEMA COLLECTION (Transact-SQL) statement are automatically imported into the newly created XML schema collection object. ALTER XML SCHEMA COLLECTION(Transact-SQL) 문을 사용하여 추가 스키마 또는 스키마 구성 요소를 데이터베이스에 있는 기존 컬렉션 개체로 가져올 수 있습니다.You can import additional schemas or schema components into an existing collection object in the database by using the ALTER XML SCHEMA COLLECTION (Transact-SQL) statement.

    형식화된 XML과 형식화되지 않은 XML 항목에 설명된 것과 같이 스키마가 연결된 열 또는 변수에 저장된 XML은 스키마가 인스턴스 데이터에 대해 필요한 데이터 형식 정보를 제공하기 때문에 형식화된 XML이라고 부릅니다.As described in the topic, Typed vs. Untyped XML, the XML stored in a column or variable that a schema is associated with is referred to as typed XML, because the schema provides the necessary data type information for the instance data. SQL Server는 이 유형 정보를 사용하여 데이터 저장소를 최적화합니다.SQL Server uses this type information to optimize data storage.

    쿼리 프로세싱 엔진은 또한 유형 검사 및 쿼리와 데이터 수정 최적화를 위해 스키마를 사용합니다.The query-processing engine also uses the schema for type checking and to optimize queries and data modification.

    또한 SQL Server는 형식화된 xml의 경우 연결된 XML 스키마 컬렉션을 사용하여 XML 인스턴스의 유효성을 검사합니다.Also, SQL Server uses the associated XML schema collection, in the case of typed xml, to validate the XML instance. XML 인스턴스가 스키마로 컴파일되는 경우 데이터베이스에서 인스턴스를 해당 유형 정보와 함께 시스템에 저장할 수 있습니다.If the XML instance complies with the schema, the database allows the instance to be stored in the system with their type information. 그렇지 않으면 인스턴스가 거부됩니다.Otherwise, it rejects the instance.

    내장 함수 XML_SCHEMA_NAMESPACE를 사용하여 데이터베이스에 저장된 스키마 컬렉션을 검색할 수 있습니다.You can use the intrinsic function XML_SCHEMA_NAMESPACE to retrieve the schema collection that is stored in the database. 자세한 내용은 저장된 XML 스키마 컬렉션 보기를 참조하세요.For more information, see View a Stored XML Schema Collection.

    또한 XML 스키마 컬렉션을 사용하여 XML 변수, 매개 변수 및 열을 형식화할 수 있습니다.You can also use the XML schema collection to type XML variables, parameters, and columns.

스키마 컬렉션 관리 DDL DDL for Managing Schema Collections

데이터베이스에서 XML 스키마 컬렉션을 만들고 이를 xml 유형의 변수 및 열과 연결할 수 있습니다.You can create XML schema collections in the database and associate them with variables and columns of xml type. 데이터베이스에 있는 스키마 컬렉션을 관리하기 위해 SQL ServerSQL Server는 다음 DDL 문을 제공합니다.To manage schema collections in the database, SQL ServerSQL Server provides the following DDL statements:

  • CREATE XML SCHEMA COLLECTION(Transact-SQL)은 데이터베이스에 스키마 구성 요소를 가져옵니다.CREATE XML SCHEMA COLLECTION (Transact-SQL) Imports schema components into a database.

  • ALTER XML SCHEMA COLLECTION(Transact-SQL)은 기존 XML 스키마 컬렉션의 스키마 구성 요소를 수정합니다.ALTER XML SCHEMA COLLECTION (Transact-SQL) Modifies the schema components in an existing XML schema collection.

  • DROP XML SCHEMA COLLECTION(Transact-SQL)은 전체 XML 스키마 컬렉션 및 모든 해당 구성 요소를 삭제합니다.DROP XML SCHEMA COLLECTION (Transact-SQL) Deletes a complete XML schema collection and all its components.

    XML 스키마 컬렉션과 여기에 포함되는 스키마를 사용하려면 먼저 CREATE XML SCHEMA COLLECTION 문을 사용하여 컬렉션과 스키마를 만들어야 합니다.To use an XML schema collection and the schemas it contains, you must first create the collection and the schemas by using the CREATE XML SCHEMA COLLECTION statement. 스키마 컬렉션을 만든 다음에는 xml 유형의 변수와 열을 만들고 스키마 컬렉션과 연결할 수 있습니다.After the schema collection is created, you can then create variables and columns of xml type and associate the schema collection with them. 스키마 컬렉션을 만든 다음에는 여러 스키마 구성 요소가 메타데이터에 포함됩니다.Note that after a schema collection is created, various schema components are stored in the metadata. 또한 ALTER XML SCHEMA COLLECTION을 사용하여 기존 스키마에 더 많은 구성 요소를 추가하거나 기존 컬렉션에 새로운 스키마를 추가할 수 있습니다.You can also use the ALTER XML SCHEMA COLLECTION to add more components to the existing schemas or add new schemas to an existing collection.

    스키마 컬렉션을 삭제하려면 DROP XML SCHEMA COLLECTION 문을 사용합니다.To drop the schema collection, use the DROP XML SCHEMA COLLECTION statement. 이렇게 하면 컬렉션에 포함된 모든 스키마가 삭제되고 컬렉션 개체가 제거됩니다.This drops all schemas that are contained in the collection and removes the collection object. 스키마 컬렉션을 삭제하려면 DROP XML SCHEMA COLLECTION(Transact-SQL)에 기술된 조건을 충족해야 합니다.Note that before you can drop a schema collection, the conditions described in DROP XML SCHEMA COLLECTION (Transact-SQL)must be met.

스키마 구성 요소 이해 Understanding Schema Components

CREATE XML SCHEMA COLLECTION 문을 사용하면 여러 스키마 구성 요소를 데이터베이스로 가져옵니다.When you use the CREATE XML SCHEMA COLLECTION statement, various schema components are imported into the database. 스키마 구성 요소에는 스키마 요소, 특성 및 유형 정의가 포함됩니다.Schema components include schema elements, attributes, and type definitions. DROP XML SCHEMA COLLECTION 문을 사용하면 전체 컬렉션을 제거합니다.When you use the DROP XML SCHEMA COLLECTION statement, you remove the complete collection.

CREATE XML SCHEMA COLLECTION은 여러 시스템 테이블에 스키마 구성 요소를 저장합니다.CREATE XML SCHEMA COLLECTION saves the schema components into various system tables.

예를 들어 다음 스키마를 고려해 보십시오.For example, consider the following schema:

<?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>  

이전 스키마는 데이터베이스에 저장할 수 있는 여러 유형의 구성 요소를 보여 줍니다.The previous schema shows the different types of components that can be stored in the database. 여기에는 SomeAttribute, SomeType, OrderType, CustomerType, Customer, Order, CustomerID, OrderID, OrderDate, RequiredDateShippedDate이(가) 포함됩니다.These include SomeAttribute, SomeType, OrderType, CustomerType, Customer, Order, CustomerID, OrderID, OrderDate, RequiredDate, and ShippedDate.

구성 요소 범주Component Categories

데이터베이스에 저장되는 스키마 구성 요소는 다음 범주로 구분됩니다.The Schema components stored in the database fall into the following categories:

  • ELEMENTELEMENT

  • ATTRIBUTEATTRIBUTE

  • TYPE(간단하거나 복잡한 유형)TYPE (for simple or complex types)

  • ATTRIBUTEGROUPATTRIBUTEGROUP

  • MODELGROUPMODELGROUP

    예를 들어For example:

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

  • SomeType, OrderTypeCustomerType 은 TYPE 구성 요소입니다.SomeType, OrderType, and CustomerType are TYPE components.

  • Customer 는 ELEMENT 구성 요소입니다.Customer is an ELEMENT component.

    데이터베이스로 스키마를 가져올 때 SQL ServerSQL Server 에서 스키마 자체는 저장하지 않습니다.When you import a schema into the database, SQL ServerSQL Server does not store the schema itself. 대신 SQL ServerSQL Server 는 여러 개별 구성 요소를 저장합니다.Instead, SQL ServerSQL Server stores the various individual components. 즉, <Schema> 태그는 저장되지 않으며 이 태그 내에 정의된 구성 요소만 보관됩니다.That is, the <Schema> tag is not stored, only the components that are defined within it are preserved. 모든 스키마 요소는 보관되지 않습니다.All schema elements are not preserved. <Schema> 태그에 해당 구성 요소의 기본 동작을 지정하는 특성이 포함된 경우 이러한 특성은 다음 표에 설명된 것과 같이 가져오기 프로세스 중에 태그 내에 있는 스키마 구성 요소로 이동됩니다.If the <Schema> tag contains attributes that specify default behavior of its components, these attributes are moved to the schema components within it during the import process, as shown in the following table.

특성 이름Attribute name 동작Behavior
attributeFormDefaultattributeFormDefault 아직 제공되지 않았고 값이 attributeFormDefault 특성의 값으로 설정된 스키마의 모든 특성 선언에 적용된 form 특성입니다.The form attribute applied to all attribute declarations in the schema where it is not already present and the value is set to the value of the attributeFormDefault attribute.
elementFormDefaultelementFormDefault 아직 제공되지 않았고 값이 elementFormDefault 특성의 값으로 설정된 스키마의 모든 요소 선언에 적용된 form 특성입니다.The form attribute applied to all element declarations in the schema where it is not already present and the value is set to the value of the elementFormDefault attribute.
blockDefaultblockDefault 아직 제공되지 않았고 값이 blockDefault 특성의 값으로 설정된 모든 요소 선언 및 유형 정의에 적용된 block 특성입니다.The block attribute applied to all element declarations and type definitions where it is not already present and the value is set to the value of the blockDefault attribute.
finalDefaultfinalDefault 아직 제공되지 않았고 값이 finalDefault 특성의 값으로 설정된 모든 요소 선언 및 유형 정의에 적용된 final 특성입니다.The final attribute applied to all element declarations and type definitions where it is not already present and the value is set to the value of the finalDefault attribute.
targetNamespacetargetNamespace 대상 네임스페이스에 속하는 구성 요소에 대한 정보는 메타데이터에 저장됩니다.Information about the components that belong to the target namespace is stored in the metadata.

XML 스키마 컬렉션에 대한 사용 권한 Permissions on an XML Schema Collection

다음을 수행하는 데 필요한 권한이 있어야 합니다.You must have the necessary permissions to do the following:

  • XML 스키마 컬렉션 생성/로드Create/load the XML schema collection

  • XML 스키마 컬렉션 수정Modify the XML schema collection

  • XML 스키마 컬렉션 삭제Drop the XML schema collection

  • XML 스키마 컬렉션을 사용하여 xml 유형의 열, 변수 및 매개 변수를 형식화하거나 이를 테이블 또는 열 제약 조건에 사용Use the XML schema collection to type xml type columns, variables, and parameters, or use it in table or column constraints

    SQL Server 보안 모델에서는 모든 개체에 대한 CONTROL 권한이 허용됩니다.The SQL Server security model allows CONTROL permission on every object. 이 사용 권한의 피부여자는 개체에 대한 모든 기타 사용 권한을 얻습니다.The grantee of this permission obtains all other permissions on the object. 개체의 소유자는 또한 개체에 대한 모든 사용 권한을 가집니다.The owner of the object also has all the permissions on the object.

    개체에 대한 CONTROL 권한의 소유자 및 피부여자는 해당 개체에 대한 모든 사용 권한을 부여할 수 있습니다.The owner and the grantee of the CONTROL permission on an object can grant any permission on the object. 소유자가 아니고 CONTROL 권한이 없는 사용자도 WITH GRANT OPTION이 지정된 경우에는 개체에 대한 사용 권한을 계속 부여할 수 있습니다.A user who is not the owner and does not have CONTROL permission can still grant permission on an object when WITH GRANT OPTION is specified. 예를 들어 WITH GRANT OPTION을 통해 사용자 A에게 XML 스키마 컬렉션 S에 대한 REFERENCES 권한이 있지만 S에 대한 다른 사용 권한이 없다고 가정해 보십시오. 이 경우 사용자 A는 사용자 B에게 스키마 컬렉션 S에 대한 REFERENCES 권한을 부여할 수 있습니다.For example, assume User A has REFERENCES permission on XML schema collection S, through WITH GRANT OPTION, but no other permissions on S. User A could grant User B REFERENCES permission on schema collection S.

    보안 모델에서는 또한 사용 권한을 통해 XML 스키마 컬렉션을 만들고 사용하거나 한 사용자에서 다른 사용자로 소유권을 전송할 수 있습니다.The security model also allows permissions to create and use XML schema collections or transfer ownership from one user to another. 다음 항목에서는 XML 스키마 컬렉션 권한에 대해 설명합니다.The following topics describe the XML schema collection permissions.

  • XML 스키마 컬렉션에 대한 사용 권한 부여Grant Permissions on an XML Schema Collection

    이 항목에서는 XML 스키마 컬렉션을 만들기 위한 사용 권한을 부여하고 XML 스키마 컬렉션 개체에 대한 사용 권한을 부여하는 방법에 대해 설명합니다.This topic discussess how to grant permissions to create an XML schema collection and how to grant permissions on an XML schema collection object.

  • XML 스키마 컬렉션에 대한 사용 권한 취소Revoke Permissions on an XML Schema Collection

    이 항목에서는 사용 권한 취소를 사용하여 XML 스키마 컬렉션이 생성되지 않도록 방지하고 XML 스키마 컬렉션 개체에서 사용 권한을 취소하는 방법에 대해 설명합니다.This topic discusses how revoking permissions can be used to prevent the creation of an XML schema collection and how to revoke permissions on an XML schema collection object.

  • XML 스키마 컬렉션에 대한 사용 권한 거부Deny Permissions on an XML Schema Collection

    이 항목에서는 XML 스키마 컬렉션을 만들기 위한 사용 권한을 거부하고 XML 스키마 컬렉션 개체에 대한 사용 권한을 거부하는 방법에 대해 설명합니다.This topic discusses how to deny permissions to create an XML schema collection and deny permission on an XML schema collection object.

XML 스키마 및 스키마 컬렉션에 대한 정보 가져오기 Getting Information about XML Schemas and Schema Collections

XML 스키마 컬렉션은 sys.xml_schema_collections 카탈로그 뷰에 열거됩니다.XML schema collections are enumerated in the catalog view, sys.xml_schema_collections. XML 스키마 컬렉션 "sys"는 시스템에 의해 정의됩니다.The XML schema collection "sys" is defined by the system. 여기에는 명시적으로 로드할 필요 없이 모든 사용자 정의 XML 스키마 컬렉션에서 사용할 수 있는 미리 정의된 네임스페이스가 포함됩니다.It contains the predefined namespaces that can be used in all user-defined XML schema collections without having to load them explicitly. 이 목록에는 xml, xs, xsi, fn 및 xdt에 대한 네임스페이스가 포함됩니다.This list contains the namespaces for xml, xs, xsi, fn, and xdt. 두 개의 다른 카탈로그 뷰는 각 XML 스키마 컬렉션 내에서 모든 네임스페이스를 열거하는 sys.xml_schema_namespaces와 각 XML 스키마 내에서 모든 XML 스키마 구성 요소를 열거하는 sys.xml_components입니다.Two other catalog views are sys.xml_schema_namespaces, which enumerates all namespaces within each XML schema collection, and sys.xml_components, which enumerates all XML schema components within each XML schema.

기본 제공 함수인 XML_SCHEMA_NAMESPACE, schemaName, XmlSchemacollectionName, namespace-urixml 데이터 형식의 인스턴스를 생성합니다.The built-in function XML_SCHEMA_NAMESPACE, schemaName, XmlSchemacollectionName, namespace-uri, yields an xml data type instance.. 이 인스턴스에는 미리 정의된 XML 스키마를 제외하고 XML 스키마 컬렉션에 포함된 스키마에 대한 XML 스키마 조각이 들어 있습니다.This instance contains XML schema fragments for schemas that are contained in an XML schema collection, except the predefined XML schemas.

XML 스키마 컬렉션의 내용은 다음과 같은 방식으로 열거할 수 있습니다.You can enumerate the contents of an XML schema collection in the following ways:

  • XML 스키마 컬렉션에 적합한 카탈로그 뷰에 Transact-SQL 쿼리를 작성합니다.Write Transact-SQL queries on the appropriate catalog views for XML schema collections.

  • 기본 제공 함수 XML_SCHEMA_NAMESPACE()를 사용합니다.Use the built-in function XML_SCHEMA_NAMESPACE(). 이 함수의 출력에 xml 데이터 형식 메서드를 적용할 수 있습니다.You can apply xml data type methods on the output of this function. 하지만 기본 XML 스키마는 수정할 수 없습니다.However, you cannot modify the underlying XML schemas.

    이러한 내용은 다음 예에 설명되어 있습니다.These are illustrated in the following examples.

예: XML 스키마 컬렉션에 XML 네임스페이스 열거Example: Enumerate the XML Namespaces in an XML Schema Collection

XML 스키마 컬렉션 "myCollection"에 대해 다음 쿼리를 사용합니다.Use the following query for the XML schema collection "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 스키마 컬렉션의 내용 열거Example: Enumerate the Contents of an XML Schema Collection

다음 문은 관계형 스키마 dbo 내에 있는 XML 스키마 컬렉션 "myCollection"의 내용을 열거합니다.The following statement enumerates the contents of the XML schema collection "myCollection" within the relational schema, dbo.

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

컬렉션 내의 개별 XML 스키마는 XML_SCHEMA_NAMESPACE() 에 대한 세 번째 인수로 대상 네임스페이스를 지정하여 xml데이터 형식의 인스턴스로 가져올 수 있습니다.Individual XML schemas within the collection can be obtained as xml data type instances by specifying the target namespace as the third argument to XML_SCHEMA_NAMESPACE(). 이는 다음 예에서 확인할 수 있습니다.This is shown in the following example.

예: XML 스키마 컬렉션으로부터 지정된 스키마 출력Example: Output a Specified Schema from an XML Schema Collection

다음 문은 관계형 스키마 dbo 내에 있는 XML 스키마 컬렉션 "myCollection"으로부터 대상 네임스페이스가 "http://www.microsoft.com/books"인 XML 스키마를 출력합니다.The following statement outputs the XML schema with the target namespace "http://www.microsoft.com/books" from the XML schema collection "myCollection" within the relational schema, dbo.

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

XML 스키마 쿼리Querying XML Schemas

XML 스키마 컬렉션에 로드한 XML 스키마를 다음과 같은 방식으로 쿼리할 수 있습니다.You can query XML schemas that you have loaded into XML schema collections in the following ways:

  • XML 스키마 네임스페이스에 대한 카탈로그 뷰에서 Transact-SQL 쿼리를 작성합니다.Write Transact-SQL queries on catalog views for XML schema namespaces.

  • xml 데이터 형식의 열이 포함된 테이블을 만들어서 XML 스키마를 저장하고 이를 XML 유형의 시스템으로 로드합니다.Create a table that contains an xml data type column to store your XML schemas and also load them into the XML type system. xml 데이터 형식의 메서드를 사용하여 XML 열을 쿼리할 수 있습니다.You can query the XML column by using the xml data type methods. 또한 이 열에서 XML 인덱스를 작성할 수 있습니다.Also, you can build an XML index on this column. 하지만 이 접근 방식에서는 응용 프로그램이 XML 열에 저장된 XML 스키마와 XML 유형 시스템 간의 일관성을 유지 관리해야 합니다.However, with this approach, the application must maintain consistency between the XML schemas stored in the XML column and the XML type system. 예를 들어 XML 유형 시스템으로부터 XML 스키마 네임스페이스를 삭제하면 일관성 유지를 위해 테이블에서도 삭제해야 합니다.For example, if you drop the XML schema namespace from the XML type system, you also have to drop it from the table in order to preserve consistency.

참고 항목See Also

저장된 XML 스키마 컬렉션 보기 View a Stored XML Schema Collection
포함된 스키마를 병합하기 위해 스키마 전처리 Preprocess a Schema to Merge Included Schemas
서버의 XML 스키마 컬렉션에 대한 요구 사항 및 제한 사항 Requirements and Limitations for XML Schema Collections on the Server