형식화된 XML과 형식화되지 않은 XML 비교Compare Typed XML to Untyped XML

xml 유형의 변수, 매개 변수 및 열을 만들 수 있습니다.You can create variables, parameters, and columns of the xml type. 선택적으로 XML 스키마 컬렉션을 xml 유형의 변수, 매개 변수 또는 열과 연결할 수 있습니다.You can optionally associate a collection of XML schemas with a variable, parameter, or column of xml type. 이런 경우 xml 데이터 형식 인스턴스를 형식화되었다고 하고,In this case, the xml data type instance is called typed. 그 외의 경우에는 XML 인스턴스를 형식화되지 않았다고 합니다.Otherwise, the XML instance is called untyped.

올바른 형식의 XML 및 xml 데이터 형식Well-formed XML and the xml Data Type

xml 데이터 형식은 ISO 표준 xml 데이터 형식을 구현합니다.The xml data type implements the ISO standard xml data type. 따라서 올바른 형식의 XML 버전 1.0 문서를 저장할 수 있으며 텍스트 노드 및 형식화되지 않은 XML 열의 최상위 요소가 임의의 개수로 포함된 XML 내용 조각을 저장할 수 있습니다.Therefore, it can store well-formed XML version 1.0 documents and also so-called XML content fragments with text nodes and an arbitrary number of top-level elements in an untyped XML column. 시스템은 데이터가 올바른 형식인지 확인하고, 열이 XML 스키마로 바인딩되도록 요구하지 않으며, 넓은 의미에서 올바른 형식이 아닌 데이터를 거부합니다.The system checks that the data is well-formed, does not require the column to be bound to XML schemas, and rejects data that is not well-formed in the extended sense. 형식화되지 않은 XML 변수 및 매개 변수도 여기에 해당됩니다.This is true also of untyped XML variables and parameters.

XML 스키마XML Schemas

XML 스키마는 다음을 제공합니다.An XML schema provides the following:

  • 유효성 검사 제약 조건Validation constraints. 형식화된 xml 인스턴스가 할당 또는 수정될 때마다 SQL Sever가 인스턴스의 유효성을 검사합니다.Whenever a typed xml instance is assigned to or modified, SQL Server validates the instance.

  • 데이터 형식 정보Data type information. 스키마는 xml 데이터 형식 인스턴스에 있는 특성 및 요소의 유형에 대한 정보를 제공합니다.Schemas provide information about the types of attributes and elements in the xml data type instance. 유형 정보는 인스턴스에 포함되어 있는 값에 대해 형식화되지 않은 xml에 있을 수 있는 것보다 정확한 작업 의미를 제공합니다.The type information provides more precise operational semantics to the values contained in the instance than is possible with untyped xml. 예를 들어 숫자 산술 연산은 문자열 값이 10진수 값에서 수행할 수 있습니다.For example, decimal arithmetic operations can be performed on a decimal value, but not on a string value. 따라서 형식화된 XML 저장소는 형식화되지 않은 XML보다 더욱 간결하게 만들 수 있습니다.Because of this, typed XML storage can be made significantly more compact than untyped XML.

형식화된 XML 또는 형식화되지 않은 XML 선택Choosing Typed or Untyped XML

다음 경우에 형식화되지 않은 xml 데이터 형식을 사용합니다.Use untyped xml data type in the following situations:

  • XML 데이터에 대한 스키마가 없습니다.You do not have a schema for your XML data.

  • 스키마가 있지만 서버에서 데이터 유효성 검사를 수행하지 않습니다.You have schemas, but you do not want the server to validate the data. 이러한 경우는 데이터를 서버에 저장하기 전에 응용 프로그램이 클라이언트 쪽 유효성 검사를 수행하거나, 스키마에 대해 유효하지 않은 XML 데이터를 임시적으로 저장하거나, 서버에서 지원되지 않는 스키마 구성 요소를 사용하는 경우입니다.This is sometimes the case when an application performs client-side validation before storing the data at the server, or temporarily stores XML data that is invalid according to the schema, or uses schema components that are not supported at the server.

    다음 경우에 형식화된 xml 데이터 형식을 사용합니다.Use typed xml data type in the following situations:

  • XML 데이터에 대한 스키마가 있으며 이 XML 스키마에 따라 서버에서 XML 데이터의 유효성을 검사하려고 합니다.You have schemas for your XML data and you want the server to validate your XML data according to the XML schemas.

  • 형식 정보에 따라 저장소 및 쿼리 최적화를 활용합니다.You want to take advantage of storage and query optimizations based on type information.

  • 쿼리 컴파일 시 형식 정보를 더욱 활용합니다.You want to take better advantage of type information during compilation of your queries.

    형식화된 XML 열, 매개 변수 및 변수는 XML 문서 또는 내용을 저장할 수 있습니다.Typed XML columns, parameters, and variables can store XML documents or content. 그러나 선언 시 문서를 저장하는지 아니면 내용을 저장하는지에 따라 플래그를 지정해야 합니다.However, you have to specify with a flag whether you are storing a document or content at the time of declaration. 또한 XML 스키마의 컬렉션을 제공해야 합니다.Additionally, you have to provide the collection of XML schemas. 각 XML 인스턴스에 정확히 하나의 최상위 요소가 있는 경우 DOCUMENT를 지정합니다.Specify DOCUMENT if each XML instance has exactly one top-level element. 그렇지 않으면 CONTENT를 사용합니다.Otherwise, use CONTENT. 쿼리 컴파일러는 쿼리 컴파일 중에 형식 검사에서 DOCUMENT 플래그를 사용하여 단일 항목인 최상위 요소를 유추합니다.The query compiler uses the DOCUMENT flag in type checks during query compilation to infer singleton top-level elements.

형식화된 XML 만들기Creating Typed XML

형식화된 xml 변수, 매개 변수 또는 열을 만들려면 먼저 CREATE XML SCHEMA COLLECTION(Transact-SQL)에 따라 XML 스키마 컬렉션을 등록해야 합니다.Before you can create typed xml variables, parameters, or columns, you must first register the XML schema collection by using CREATE XML SCHEMA COLLECTION (Transact-SQL). 그런 다음 XML 스키마 컬렉션을 xml 데이터 형식의 변수, 매개 변수 또는 열과 연결할 수 있습니다.You can then associate the XML schema collection with variables, parameters, or columns of the xml data type.

다음 예에서는 XML 스키마 컬렉션 이름을 지정하기 위해 두 부분으로 된 명명 규칙이 사용됩니다.In the following examples, a two-part naming convention is used for specifying the XML schema collection name. 첫 번째 부분은 스키마 이름이고 두 번째 부분은 XML 스키마 컬렉션 이름입니다.The first part is the schema name, and the second part is the XML schema collection name.

예제: xml 유형 변수와 스키마 컬렉션 연결Example: Associating a Schema Collection with an xml Type Variable

다음 예제에서는xml 형식 변수를 만들고 이를 스키마 컬렉션에 연결합니다.The following example creates anxml type variable and associates a schema collection with it. 이 예에서 지정된 스키마 컬렉션은 이미 AdventureWorks 데이터베이스로 가져온 상태입니다.The schema collection specified in the example is already imported in the AdventureWorks database.

DECLARE @x xml (Production.ProductDescriptionSchemaCollection);   

예제: xml 유형 열에 스키마 지정Example: Specifying a Schema for an xml Type Column

다음 예에서는 xml 유형 열이 포함된 테이블을 만들고 이 열에 대한 스키마를 지정합니다.The following example creates a table with an xml type column and specifies a schema for the column:

CREATE TABLE T1(  
 Col1 int,   
 Col2 xml (Production.ProductDescriptionSchemaCollection)) ;  

예제: xml 유형 매개 변수를 저장 프로시저에 전달Example: Passing an xml Type Parameter to a Stored Procedure

다음 예에서는 xml 유형 매개 변수를 저장 프로시저에 전달하고 해당 변수에 대한 스키마를 지정합니다.The following example passes an xml type parameter to a stored procedure and specifies a schema for the variable:

CREATE PROCEDURE SampleProc   
  @ProdDescription xml (Production.ProductDescriptionSchemaCollection)   
AS   
...  

XML 스키마 컬렉션에 대한 다음 내용에 유의하십시오.Note the following about the XML schema collection:

  • XML 스키마 컬렉션은 XML 스키마 컬렉션 만들기를 사용하여 등록한 데이터베이스에서만 사용할 수 있습니다.An XML schema collection is available only in the database in which it was registered by using Creating an XML Schema Collection.

  • 또한 문자열을 형식화된 xml 데이터 형식으로 캐스팅하는 경우 구문 분석 시 지정된 컬렉션에 있는 XML 스키마 네임스페이스에 따라 유효성 검사와 형식 지정도 수행됩니다.If you cast from a string to a typed xml data type, the parsing also performs validation and typing, based on the XML schema namespaces in the collection specified.

  • 형식화된 xml 데이터 형식을 형식화되지 않은 xml 데이터 형식으로 캐스팅하거나 그 반대로도 할 수 있습니다.You can cast from a typed xml data type to an untyped xml data type, and vice versa.

    SQL Server에서 XML을 생성하는 다른 방법은 XML 데이터 인스턴스 만들기를 참조하세요.For more information about other ways to generate XML in SQL Server, see Create Instances of XML Data. XML을 생성한 후 xml 데이터 형식 변수에 할당하거나 xml 유형 열에 저장하여 추가 처리를 수행할 수 있습니다.After XML is generated, it can be assigned either to an xml data type variable or stored in xml type columns for additional processing.

    데이터 형식 계층에서 xml 데이터 형식은 sql_variant 및 사용자 정의 형식 아래, 기본 제공 유형 위에 표시됩니다.In the data type hierarchy, the xml data type appears below sql_variant and user-defined types, but above any of the built-in types.

예제: 형식화된 xml 열을 제한하기 위한 패싯 지정Example: Specifying Facets to Constrain a Typed xml Column

형식화된 xml 열의 경우 열에 저장된 각 인스턴스에 대해 최상위의 단일 요소만 허용하도록 열을 제한할 수 있습니다.For typed xml columns, you can constrain the column to allow only single, top-level elements for each instance stored in it. 이렇게 하려면 다음 예에서와 같이 테이블을 만들 때 선택 항목인 DOCUMENT 패싯을 지정합니다.You do this by specifying the optional DOCUMENT facet when a table is created, as shown in the following example:

CREATE TABLE T(Col1 xml   
   (DOCUMENT Production.ProductDescriptionSchemaCollection));  
GO  
DROP TABLE T;  
GO  

기본적으로 형식화된 xml 열에 저장된 인스턴스는 XML 문서가 아닌 XML 콘텐츠로 저장됩니다.By default, instances stored in the typed xml column are stored as XML content and not as XML documents. 이러한 설정은 다음의 경우에 허용됩니다.This allows for the following:

  • 0개 이상의 최상위 요소Zero or many top-level elements

  • 최상위 요소에 있는 텍스트 노드Text nodes in top-level elements

    또한 다음 예에서와 같이 CONTENT 패싯을 추가하여 이 동작을 명시적으로 지정할 수 있습니다.You can also explicitly specify this behavior by adding CONTENT facet, as shown in the following example:

CREATE TABLE T(Col1 xml(CONTENT Production.ProductDescriptionSchemaCollection));  
GO -- Default  

xml 형식(형식화된 xml)을 정의할 때 항상 선택 항목인 DOCUMENT/CONTENT 패싯을 지정할 수 있습니다.Note that you can specify the optional DOCUMENT/CONTENT facets anywhere you define xml type (typed xml). 예를 들어 형식화된 xml 변수를 만들 때 다음과 같이 DOCUMENT/CONTENT 패싯을 추가할 수 있습니다.For example, when you create a typed xml variable, you can add the DOCUMENT/CONTENT facet, as shown in the following:

declare @x xml (DOCUMENT Production.ProductDescriptionSchemaCollection);  

DTD(문서 유형 정의)Document Type Definition (DTD)

xml 데이터 형식의 열, 변수 및 매개 변수는 DTD가 아닌 XML 스키마를 사용하여 형식화될 수 있습니다.The xml data type columns, variables, and parameters can be typed by using XML schema, but not by using DTD. 하지만 인라인 DTD는 형식화되지 않은 XML 및 형식화된 XML에 모두 사용하여 기본값을 제공하고 엔터티 참조를 해당 확장 형식으로 바꿀 수 있습니다.However, inline DTD can be used for both untyped and typed XML to supply default values and to replace entity references with their expanded form.

타사 도구를 사용하여 DTD를 XML 스키마 문서로 변환하고 XML 스키마를 데이터베이스에 로드할 수 있습니다.You can convert DTDs to XML schema documents by using third-party tools, and load the XML schemas into the database.

SQL Server 2005에서 형식화된 XML 업그레이드Upgrading Typed XML from SQL Server 2005

SQL Server 2008SQL Server 2008 에서는 XML 스키마 지원이 여러 가지로 확대되었습니다. 여기에는 lax 유효성 검사에 대한 지원, 향상된 xs:date, xs:timexs:dateTime 인스턴스 데이터 처리, 목록 유형 및 공용 구조체 유형에 대한 추가 지원이 포함됩니다. made several extensions to the XML Schema support, including support for lax validation, improved handling of xs:date, xs:time and xs:dateTime instance data, and added support for list and union types. 대부분의 경우 변경 사항이 업그레이드에 영향을 주지 않습니다.In most cases the changes do not affect the upgrade experience. 그러나 SQL Server 2005SQL Server 2005 xs:date ,xs:time 또는xs:dateTime 형식이나 하위 형식의 값을 사용할 수 있는 의 XML 스키마 컬렉션을 사용한 경우 SQL Server 2005SQL Server 2005 데이터베이스를 그 이상의 SQL ServerSQL Server버전에 연결하면 다음 업그레이드 단계가 진행됩니다.However if you used an XML Schema collection in SQL Server 2005SQL Server 2005 that allowed values of type xs:date, xs:time, or xs:dateTime (or any subtype) then the following upgrade steps occur when you attach your SQL Server 2005SQL Server 2005 database to a later version of SQL ServerSQL Server:

  1. 모든 XML 열의 경우, 이 열이 xs:anyType, xs:anySimpleType, xs:date 또는 해당 하위 유형, xs:time 또는 해당 하위 유형, xs:dateTime 또는 해당 하위 유형으로 형식화되거나 이러한 유형이 포함된 공용 구조체나 목록 유형으로 형식화된 요소나 특성이 들어 있는 XML 스키마 컬렉션으로 형식화되면 다음과 같은 상황이 발생합니다.For every XML column, that is typed with an XML Schema Collection that contains elements or attributes that are typed as either xs:anyType, xs:anySimpleType, xs:date or any of its subtypes, xs:time or any subtype thereof, or xs:dateTime or any of its subtypes, or are union or list types containing any of these types the following occurs:

    1. 열의 모든 XML 인덱스가 사용할 수 없게 됩니다.All XML indices on the column will be disabled.

    2. 모든 SQL Server 2005SQL Server 2005 값이 Z 표준 시간대로 표준화되었으므로 이 값이 Z 표준 시간대로 계속 표시됩니다.All SQL Server 2005SQL Server 2005 values will continue to be represented in the Z timezone, because they have been normalized to the Z timezone.

    3. 일 년 중 1월 1일보다 작은 xs:date 또는 xs:dateTime 값은 인덱스가 다시 작성되거나 XQuery 또는 XML-DML 문이 해당 값을 포함하는 XML 데이터 형식에 대해 실행되면 런타임 오류를 일으킵니다.Any xs:date or xs:dateTime values that are smaller than January 1st of year 1 will lead to a runtime error when the index gets rebuild or an XQuery or XML-DML statements gets executed against the XML data type containing that value.

  2. xs:date 또는 xs:dateTime 패싯의 음수 연도나 XML 스키마 컬렉션의 기본값은 기본 xs:date 또는 xs:dateTime 형식(예: xs:dateTime의 경우 0001-01-01T00:00:00.0000000Z)에 의해 허용되는 최소값으로 자동 업데이트됩니다.Any negative years in xs:date or xs:dateTime facets or default values in an XML Schema collection will automatically be updated to the smallest value allowed by the base xs:date or xs:dateTime type (e.g., 0001-01-01T00:00:00.0000000Z for xs:dateTime).

    간단한 SQL SELECT 문을 계속 사용하면 음수 연도가 포함될 경우에도 전체 XML 데이터 형식을 검색할 수 있습니다.Note that you can still use a simple SQL select statement to retrieve the whole XML data type, even if it contains negative years. 음수 연도를 새로 지원되는 범위에 있는 연도로 대체하거나 해당 요소나 특성의 유형을 xs:string으로 변경하는 것이 좋습니다.It is recommended that you replace negative years with a year within the newly supported range or change the type of the element or attribute to xs:string.

참고 항목See Also

XML 데이터 인스턴스 만들기 Create Instances of XML Data
xml 데이터 형식 메서드 xml Data Type Methods
XML DML(XML 데이터 수정 언어) XML Data Modification Language (XML DML)
XML 데이터(SQL Server) XML Data (SQL Server)