서버에서 XML 스키마 컬렉션을 사용하는 것에 대한 지침 및 제한 사항

업데이트: 2006년 4월 14일

XSD(XML 스키마 정의 언어) 유효성 검사에는 SQL Server 2005 xml 데이터 형식을 사용하는 SQL 열과 관련하여 몇 가지 제한 사항이 있습니다. 이 항목에서는 이러한 제한 사항과 SQL Server에서 작동할 수 있도록 XSD 스키마를 수정하는 지침도 제공합니다. 다음 표에서는 제한 사항을 나열합니다. 표 다음에 나와 있는 섹션에서는 각 제한 사항을 자세히 설명하고 제한 사항에 따라 작업을 수행하는 방법에 대한 지침을 제공합니다.

항목 제한 사항

anyType

XQuery 사양에 따르면 anyType 형식의 요소에 대해서는 lax 유효성 검사가 권장됩니다. SQL Server에서 lax 유효성 검사를 지원하지 않으므로 anyType 형식의 요소에는 엄격한 유효성 검사가 적용됩니다.

minOccursmaxOccurs

SQL Server에서는 이러한 특성 값의 크기를 제한합니다.

sqltypes:datetimesqltypes:smalldatetime

SQL Server에서는 sqltypes:datetime 또는 sql:smalldatetime 값을 허용하지 않습니다.

<xsd:include>, <xsd:key>, <xsd:keyref>, <xsd:redefine><xsd:unique>

SQL Server에서는 지원하지 않습니다.

<xsd:choice>

파티클의 minOccurs 특성 값이 0으로 정의되어 있지 않은 한 SQL Server에서는 자식이 없는 <xsd:choice> 파티클이 포함된 스키마를 거부합니다.

<xsd:simpleType>

SQL Server에서는 두 번째 구성 요소가 있는 단순 유형에 대해 밀리초 정밀도만 지원하며 인식된 모든 XSD 단순 유형 열거를 제한합니다.

SQL Server에서는 <xsd:simpleType> 선언에 "NaN" 값을 사용할 수 없습니다.

xsi:schemaLocationxsi:noNamespaceSchemaLocation

xml 데이터 형식의 열 또는 변수에 삽입된 XML 인스턴스 데이터에 이러한 특성이 존재할 경우 SQL Server에서는 이 특성을 무시합니다.

xs:QName

SQL Server에서는 XML 스키마 제한 요소를 사용하는 xs:QName에서 파생된 형식을 지원하지 않습니다.

SQL Server에서는 멤버 요소가 xs:QName인 공용 구조체 유형을 지원하지 않습니다.

기존 대체 그룹에 멤버 추가

SQL Server에서는 XML 스키마 컬렉션의 기존 대체 그룹에 멤버를 추가할 수 없습니다.

정규 형식

값의 정식 표현은 해당 형식의 패턴 제한 사항을 위반할 수 없습니다.

열거 패싯

SQL Server에서는 패턴 패싯 형식이나 이러한 패싯을 위반하는 열거형의 XML 스키마를 지원하지 않습니다.

패싯 길이

SQL Server에서는 패싯 길이에 사용할 수 있는 값 범위를 제한합니다.

ID 특성

XML 스키마 구성 요소는 ID 특성을 가질 수 있지만 SQL Server에서 이러한 값을 저장하지 않습니다.

ID 형식

SQL Server에서는 유형이 xs:ID 또는 xs:IDREF인 요소를 사용할 수 없습니다.

lax 유효성 검사

SQL Server에서는 SQL Server에 업로드된 스키마에 대한 lax 유효성 검사를 지원하지 않습니다.

목록 유형 및 공용 구조체 유형

SQL Server에서는 공용 구조체 유형을 목록 항목으로 사용하는 목록 유형을 지원하지 않습니다.

로컬 네임스페이스

SQL Server에서는 빈 문자열("")을 네임스페이스 특성 값으로 사용하는 스키마를 거부합니다.

혼합 형식 및 단순 내용

SQL Server에서는 혼합 형식을 단순 내용으로 제한할 수 없습니다.

NOTATION 형식

SQL Server에서는 NOTATION 형식을 지원하지 않습니다.

메모리 부족 상태

대형 XML 스키마 컬렉션을 사용할 경우 메모리가 부족해질 수 있습니다. 해결책이 지원됩니다.

반복 값

SQL Server에서는 block 또는 final 특성에 반복되는 값이 있는 스키마를 거부합니다.

스키마 구성 요소 식별자

SQL Server에서는 스키마 구성 요소 식별자의 최대 길이를 1000자(유니코드)로 제한합니다. 또한 식별자 내에 서로게이트 문자 쌍을 사용할 수 없습니다.

표준 시간대 정보

표준 시간대 정보는 항상 UTC(그리니치 표준시)로 표준화됩니다.

공용 구조체 유형

SQL Server에서는 공용 구조체 유형의 제한 사항을 지원하지 않습니다.

가변 정밀도 10진수

SQL Server에서는 가변 정밀도 10진수를 지원하지 않습니다.

xsi:schemaLocation 및 xsi:noNamespaceSchemaLocation

xml 데이터 형식의 열이나 변수에 삽입된 XML 인스턴스 데이터에 다음과 같은 특성이 있을 경우 SQL Server에서는 이러한 특성을 무시합니다.

  • xsi:schemaLocation
  • xsi:noNamespaceSchemaLocation

&lt;xsd:include&gt;

W3C(World-Wide Web Consortium) XSD include 요소는 XML 스키마를 두 개 이상의 실제 파일로 분할할 수 있는 스키마 모듈화를 지원합니다. 현재 SQL Server에서는 이 요소를 지원하지 않습니다. 이 요소를 포함하는 XML 스키마는 서버에서 거부됩니다.

이러한 문제를 해결하기 위해 <xsd:include> 지시어를 포함하고 있는 XML 스키마는 전처리하여 포함된 모든 스키마의 내용을 하나의 스키마로 복사 및 병합해서 서버에 업로드할 수 있습니다. 자세한 내용은 XML 스키마에 대한 전처리기 도구를 참조하십시오.

&lt;xsd:unique&gt;, &lt;xsd:key&gt; 및 &lt;xsd:keyref&gt;

현재 SQL Server에서는 고유성을 적용하거나 키 및 키 참조를 설정하는 다음과 같은 XSD 기반 제약 조건을 지원하지 않습니다.

  • <xsd:unique>
  • <xsd:key>
  • <xsd:keyref>

이러한 요소를 포함하고 있는 XML 스키마는 등록할 수 없습니다.

정규 형식 및 패턴 제한 사항

XSD 패턴 패싯을 사용하면 단순 유형의 어휘 영역을 제한할 수 있습니다. 어휘 표현이 둘 이상 있는 형식에 패턴 제한을 적용한 경우 일부 값으로 인해 유효성 검사 후 예기치 않은 동작이 발생할 수 있습니다. 이러한 동작은 이러한 값의 어휘 표현이 데이터베이스에 저장되지 않기 때문에 발생합니다. 따라서 출력으로 직렬화될 때 값이 해당 정규 표현으로 변환됩니다. 문서에 있는 값의 정규 형식이 값 형식에 대한 패턴 제한을 준수하지 않는 경우 사용자가 이 값을 다시 삽입하려고 하면 해당 문서는 거부됩니다.

이 문제를 방지하기 위해 SQL Server 2005에서는 값의 정규 형식에서 패턴 제한 사항을 위반하기 때문에 다시 삽입할 수 없는 값이 포함된 XML 문서를 거부합니다. 예를 들어 "33.000"이라는 값은 "33\.0+"이라는 패턴 제한이 있는 xs:decimal에서 파생된 형식에 대해 유효성이 확인되지 않습니다. "33.000"은 이 패턴을 준수하지만 정규 형식인 "33"은 이 패턴을 준수하지 않습니다.

따라서 boolean, decimal, float, double, dateTime, time, date, hexBinarybase64Binary와 같은 기본 유형에서 파생된 유형에 패턴 패싯을 적용할 때는 주의해야 합니다. 스키마 컬렉션에 이러한 구성 요소를 추가하면 SQL Server에서 경고가 발생합니다.

부동 소수점 값을 부정확하게 직렬화할 경우 비슷한 문제가 발생합니다. SQL Server 2005에서 사용되는 부동 소수점 직렬화 알고리즘으로 인해 유사한 값들이 동일한 정규 형식을 공유할 수 있습니다. 부동 소수점 값을 직렬화하고 다시 삽입하면 값이 약간 변경될 수도 있습니다. 드물지만 이로 인해 값을 다시 삽입한 경우 값이 해당 형식에 대해 enumeration, minInclusive, minExclusive, maxInclusive 또는 maxExclusive와 같은 패싯 중 하나를 위반할 수 있습니다. 이 문제를 방지하기 위해 SQL Server 2005에서는 직렬화 및 다시 삽입할 수 없는 xs:float 또는 xs:double에서 파생되는 형식의 값을 모두 거부합니다.

와일드카드 문자 및 콘텐츠 유효성 검사

와일드카드 문자는 콘텐츠 모델에 나타나는 형식의 유연성을 향상시키는 데 사용됩니다. 이러한 문자는 XSD 언어에서 다음과 같은 방식으로 지원됩니다.

  • 요소 와일드카드 문자 이러한 문자는 <xsd:any> 요소로 표시됩니다.
  • 특성 와일드카드 문자 이러한 문자는 <xsd:anyAttribute> 요소로 표시됩니다.

<xsd:any><xsd:anyAttribute> 와일드카드 문자 요소는 모두 processContents 특성의 사용을 지원합니다. 따라서 이렇게 하면 XML 응용 프로그램에서 이러한 와일드카드 문자 요소와 관련된 문서 내용에 대한 유효성 검사를 처리하는 방법을 나타내는 값을 지정할 수 있습니다. 다음은 다양한 값과 해당 기능에 대한 설명입니다.

  • strict 값은 콘텐츠의 유효성을 완전히 검사하도록 지정합니다.
  • skip 값은 콘텐츠의 유효성을 검사하지 않도록 지정합니다.
  • lax 값은 스키마 정의가 사용 가능한 요소와 특성의 유효성만 검사하도록 지정합니다.

lax 유효성 검사

SQL Server에 업로드된 스키마의 경우 lax 유효성 검사가 지원되지 않습니다. 따라서 와일드카드 문자 요소에서 processContents 특성을 지정하는 경우 skip이나 strict 중 하나로 설정해야 합니다. **processContents="lax"**를 지정하면 서버에서 스키마를 거부합니다.

이러한 동작으로 인해 xsd:anyType으로 형식화된 요소는 모두 엄격한 처리를 통해 유효성이 검사됩니다. 따라서 인스턴스 문서의 유효성이 검사되는 스키마 컬렉션에서 해당 자식 요소와 특성이 정의되어야 합니다.

anyType 요소

XQuery 사양에 따르면 anyType 형식의 요소에 대해서는 lax 유효성 검사가 권장됩니다. SQL Server에서 lax 유효성 검사를 지원하지 않으므로 anyType 형식의 요소에는 엄격한 유효성 검사가 적용됩니다.

다음 예에서는 엄격한 유효성 검사를 보여 주고 XML 스키마 컬렉션을 만듭니다. 스키마 요소 중 하나의 형식은 anyType입니다. 그런 다음 형식화된 xml 변수를 만들고 anyType 형식 요소의 엄격한 유효성 검사에 대해 보여 줍니다.

CREATE XML SCHEMA COLLECTION SC AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
        targetNamespace="http://ns">
   <element name="e" type="anyType"/>
   <element name="a" type="byte"/>
   <element name="b" type="string"/>
 </schema>'
GO

<e>의 엄격한 유효성 검사가 성공하므로 다음 예도 성공합니다.

DECLARE @var XML(SC)
SET @var = '<e xmlns="http://ns"><a>1</a><b>data</b></e>'
GO

다음 예는 실패합니다. <e> 요소의 엄격한 유효성 검사에서 스키마에 정의된 <c> 요소를 찾지 못하므로 인스턴스가 거부됩니다.

DECLARE @var XML(SC)
SET @var = '<e xmlns="http://ns"><a>1</a><c>Wrong</c><b>data</b></e>'
GO

마찬가지로 다음 예의 XML 인스턴스는 http://whatever 네임스페이스에 <c> 요소에 대한 선언이 없기 때문에 거부됩니다. 즉 네임스페이스가 없습니다.

DECLARE @var XML(SC)
SET @var = '<e xmlns="http://ns"><a>1</a><c xmlns="http://whatever">Wrong</c><b>data</b></e>'
SELECT @var
GO

&lt;xsd:redefine&gt;

W3C XSD redefine 요소를 사용하면 스키마 구성 요소를 다시 정의할 수 있습니다. 그러나 이러한 지시어를 지원하려면 성능 비용이 많이 들 수 있으며 또한 SQL Server에서 다시 정의된 스키마와 연결된 xml 데이터 형식의 모든 인스턴스에 대해 유효성을 다시 검사해야 합니다. 따라서 SQL Server에서는 이 요소를 지원하지 않습니다. <xsd:redefine> 요소를 포함하는 XML 스키마는 서버에서 거부됩니다.

스키마나 해당 구성 요소를 업데이트하려면 대신 다음을 수행합니다.

  1. 스키마 컬렉션을 사용하여 xml 데이터 형식(XML DT) 열의 형식을 제거합니다.
  2. 영향을 받는 네임스페이스에 대한 기존의 XML 스키마 컬렉션을 삭제합니다.
  3. 수정한 스키마 구성 요소를 사용하여 해당 네임스페이스에 대해 XML 스키마 컬렉션을 새로 만듭니다.
  4. 새 컬렉션을 사용하여 1단계에서 형식을 제거한 모든 열의 형식을 XML DT로 지정합니다.

xs:QName

SQL Server에서는 XML 스키마 제한 요소를 사용하는 xs:QName에서 파생된 형식을 지원하지 않습니다.

현재 SQL Server에서는 멤버 유형이 QName인 공용 구조체 유형을 사용할 수 없습니다. 다음 CREATE XML SCHEMA COLLECTION 문은 공용 구조체의 멤버 유형으로 xs:QName 유형을 지정하므로 XML 스키마를 로드할 수 없습니다.

CREATE XML SCHEMA COLLECTION QNameLimitation1 AS N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:simpleType name="myUnion">
        <xs:union memberTypes="xs:int xs:QName"/>
    </xs:simpleType>
</xs:schema>'
GO

CREATE XML SCHEMA COLLECTION QNameLimitation2 AS N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:simpleType name="myUnion">
        <xs:union memberTypes="xs:integer">
   <xs:simpleType>
    <xs:list itemType="xs:QName"/>
   </xs:simpleType>
  </xs:union>
    </xs:simpleType>
</xs:schema>'
GO

두 문은 오류를 발생시키며 실패합니다.

목록 항목으로서 공용 구조체 유형

현재 SQL Server에서는 항목으로 공용 구조체 유형을 포함하는 목록 유형이 있는 스키마를 지원하지 않습니다. 다음 예에서는 목록 항목 유형 내에서 공용 구조체 유형의 사용을 지원하려는 시도를 보여 줍니다.

CREATE XML SCHEMA COLLECTION MySampleCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ns" xmlns:ns="http://ns">
   <simpleType name="unionType">
      <union memberTypes="string byte"/>
   </simpleType>
   <simpleType name="listType">
      <list itemType="ns:unionType"/>
   </simpleType>
</schema>'
GO

다음 오류와 함께 서버에서 스키마가 거부됩니다.

"목록 유형 'http://ns:listType'의 항목 유형이 잘못되었습니다. 목록의 항목 유형 자체는 목록이 될 수 없으며 이 릴리스에서는 공용 구조체 유형 및 ID에서 파생된 유형을 항목 유형으로 사용할 수 없습니다."

&lt;xsd:simpleType&gt;의 값

SQL Server에서는 초 구성 요소를 가진 단순 유형에 대해 밀리초 정밀도만 지원합니다. 또한 표준 시간대가 없는 dateTime 값을 가진 XML 인스턴스는 서버에서 거부됩니다. 다음 표에서는 인식된 모든 XSD 단순 유형 열거를 기반으로 적용되는 제한 사항에 대해 간단하게 설명합니다.

또한 SQL Server에서는 <xsd:simpleType> 선언에 "NaN" 값을 사용할 수 없습니다. "NaN" 값이 포함된 스키마는 서버에서 거부됩니다.

단순 유형 제한 사항

duration

연도 부분은 -2^31에서 2^31-1 사이여야 합니다. 월, 일, 시, 분, 초는 모두 0에서 9999 사이여야 합니다. 초 부분은 소수점 이하 셋째 자릿수까지 추가할 수 있습니다.

dateTime

표준 시간대 하위 필드에서 시간 부분은 -14에서 +14 사이여야 합니다. 연도 부분은 -9999에서 9999 사이여야 하고 월 부분은 1에서 12 사이여야 하며 일 부분은 1에서 31 사이여야 하고 올바른 날짜여야 합니다. 예를 들어 SQL Server에서는 1974-02-31과 같은 잘못된 날짜(2월에는 31일이 없음)를 검색하고 오류를 반환합니다.

date

연도 부분은 -9999에서 9999 사이여야 하고 월 부분은 1에서 12 사이여야 하며 일 부분은 1에서 31 사이여야 하고 올바른 날짜여야 합니다. 예를 들어 SQL Server에서는 1974-02-31과 같은 잘못된 날짜(2월에는 31일이 없음)를 검색하고 오류를 반환합니다.

gYearMonth

연도 부분은 -9999에서 9999 사이여야 합니다.

gYear

연도 부분은 -9999에서 9999 사이여야 합니다.

gMonthDay

월 부분은 1에서 12 사이여야 하고 일 부분은 1에서 31 사이여야 합니다.

gDay

일 부분은 1에서 31 사이여야 합니다.

gMonth

월 부분은 1에서 12 사이여야 합니다.

decimal

이 유형의 값은 SQL 숫자 유형에 대한 형식을 따라야 합니다. 이 형식은 내부적으로 10개 자릿수가 소수 자릿수에 사용되도록 예약된 총 38개 자릿수까지의 숫자에 대한 지원을 나타냅니다.

float

이 유형의 값은 SQL real 유형에 대한 형식을 따라야 합니다.

double

이 유형의 값은 SQL float 유형에 대한 형식을 따라야 합니다.

string

이 유형의 값은 SQL nvarchar(max) 유형에 대한 형식을 따라야 합니다.

anyURI

이 유형의 값은 길이가 4000자(유니코드)를 초과할 수 없습니다.

가변 정밀도 10진수

xs:decimal 형식은 임의 자릿수의 10진수를 나타냅니다. XML 프로세서는 적어도 최소값이 totalDigits=18인 10진수를 지원해야 합니다. SQL Server에서는 totalDigits=38,을 지원하지만 소수 자릿수를 10으로 제한하며 가변 정밀도 10진수는 지원하지 않습니다. 서버에서는 모든 xs:decimal의 인스턴스화된 값을 내부적으로 SQL 유형 숫자(38, 10)를 사용하여 나타냅니다.

표준 시간대 정보

date, timedateTime 단순 유형의 경우 표준 시간대 정보는 항상 GMT(그리니치 표준시)라고도 하는 UTC(Coordinated Universal Time)로 표준화됩니다.

예를 들어 다음 스키마에서는 <e>라는 dateTime 형식 요소를 선언합니다.

CREATE XML SCHEMA COLLECTION MySampleCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ns" xmlns:ns="http://ns">
   <element name="e" type="dateTime"/>
</schema>'
GO

dateTime 형식 요소의 경우 서버는 오프셋 값("-05:00")을 사용하고 해당 GMT 시간을 반환하여 제공되는 시간을 GMT로 변환합니다.

DECLARE @var XML(MySampleCollection)
SET @var = '<e xmlns="http://ns">1999-05-31T13:20:00-05:00</e>'
SELECT @var
-- time zone is specified. Value is converted to Zulu before being stored
-- will come back as <e xmlns="http://ns">1999-05-31T18:20:00Z</e>
GO

패싯 길이

length, minLengthmaxLength 패싯은 long 형식으로 저장됩니다. 이 형식은 32비트 형식입니다. 따라서 이러한 값에 허용되는 값 범위는 2^31입니다.

minOccurs 및 maxOccurs

minOccursmaxOccurs 특성 값은 4바이트 정수로 구성해야 합니다. 이러한 형식을 따르지 않는 스키마는 서버에서 거부됩니다.

스키마 구성 요소 식별자

SQL Server에서는 스키마 구성 요소 식별자의 최대 길이를 1000자(유니코드)로 제한하고 이 최대 길이를 초과하는 식별자를 가진 스키마를 거부합니다. 또한 식별자 내에 서로게이트 문자 쌍을 사용할 수 없습니다.

열거 패싯

SQL Server는 패턴 패싯 형식이나 이러한 패싯을 위반하는 열거형의 XML 스키마를 거부합니다. 예를 들어 다음 스키마는 주요 열거 값이 대/소문자 값을 포함하기 때문에 거부됩니다. 또한 이 값이 소문자로만 값을 제한하는 패턴 값을 위반하기 때문에 거부됩니다.

CREATE XML SCHEMA COLLECTION MySampleCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ns" xmlns:ns="http://ns">
    <simpleType name="MyST">
       <restriction base="string">
          <pattern value="[a-z]*"/>
       </restriction>
    </simpleType>

    <simpleType name="MyST2">
       <restriction base="ns:MyST">
           <enumeration value="mYstring"/>
       </restriction>
    </simpleType>
</schema>'
GO

&lt;xsd:choice&gt;

파티클의 minOccurs 특성 값이 0으로 정의되어 있지 않은 한 SQL Server에서는 자식이 없는 <xsd:choice> 파티클이 포함된 스키마를 거부합니다.

Final 또는 Block 특성에서 반복되는 값

block 특성을 사용하면 인스턴스에서 형식과 요소의 대체를 방지할 수 있습니다. final 특성을 사용하면 유형에서 다른 복합 유형을 파생할 수 없습니다.

SQL Server에서는 block 또는 final 특성에 "restriction restriction" 및 "extension extension" 같은 반복되는 값이 있는 스키마를 거부합니다.

로컬 네임스페이스

<xsd:any> 요소에 로컬 네임스페이스가 명시적으로 지정되어야 합니다. SQL Server에서는 빈 문자열("")을 네임스페이스 특성 값으로 사용하는 스키마를 거부합니다. 대신 "##local"을 명시적으로 사용하여 비정규화된 요소 또는 특성을 와일드카드 문자의 인스턴스로 표시해야 합니다.

ID 특성

각 XML 스키마 구성 요소마다 ID 특성이 하나씩 있을 수 있습니다. SQL Server에서는 ID 형식의 <xsd:attribute> 선언에 대한 고유성을 적용하지만 이러한 값을 저장하지는 않습니다. 고유성을 적용할 범위는 {CREATE | ALTER} XML SCHEMA COLLECTION 문입니다.

ID 형식

SQL Server에서는 유형이 xs:ID, xs:IDREF 또는 xs:IDREFS인 요소를 사용할 수 없습니다. 스키마는 이 유형의 요소나 이 유형의 제한 또는 확장에 의해 파생된 요소를 선언하지 않을 수 있습니다.

NOTATION 형식

현재 SQL Server에서는 NOTATION 형식을 지원하지 않습니다. 표기법(notation)에 대한 정의가 포함된 스키마는 서버에서 거부됩니다.

혼합 형식 및 단순 내용

아래의 XML 스키마 컬렉션에서 myComplexTypeA는 혼합 형식으로 비워둘 수 있습니다. 즉 해당 요소의 minOccurs가 모두 0으로 설정됩니다. myComplexTypeB 선언에서처럼 혼합 형식을 단순 내용으로 제한하려는 시도는 지원되지 않습니다. 다음과 같은 XML 스키마 컬렉션을 만들 수 없습니다.

CREATE XML SCHEMA COLLECTION SC AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ns" xmlns:ns="http://ns"
xmlns:ns1="http://ns1">

    <complexType name="myComplexTypeA" mixed="true">
        <sequence>
            <element name="a" type="string" minOccurs="0"/>
            <element name="b" type="string" minOccurs="0" maxOccurs="23"/>
        </sequence>
    </complexType>


    <complexType name="myComplexTypeB">
        <simpleContent>
            <restriction base="ns:myComplexTypeA">
                <simpleType>
                    <restriction base="int">
                        <minExclusive value="25"/>
                    </restriction>
                </simpleType>
            </restriction>
        </simpleContent>
    </complexType>
</schema>
'
GO

sqltypes:datetime 및 sqltypes:smalldatetime

SQL Server 2005에서는 xs:date, xs:timexs:dateTime에서 파생된 모든 형식에 표준 시간대가 있어야 합니다. 이러한 두 형식으로는 Sqltypes:datetimesqltypes:smalldatetime이 있습니다. 그러나 SQL datetimesmalldatetime 형식에는 표준 시간대가 없습니다. sqltypes:datetimesqltypes:smalldatetime에 대한 패턴 패싯에서 표준 시간대를 허용하지 않기 때문입니다. 따라서 SQL Server에서는 sqltypes:datetime 또는 sql:smalldatetime 값을 허용하지 않습니다.

사용자 정의 스키마에서 sqltypes:datetimesqltypes:smalldatetime을 참조할 수는 있어도 이러한 형식의 값이 있는 XML 문서의 유효성은 검사할 수 없습니다. 유효성을 검사하면 해당 문서를 사용할 수 없게 됩니다. 다음 예에서 XML 스키마 컬렉션은 sqltypes.datetime 형식의 <c> 요소를 정의합니다.

CREATE XML SCHEMA COLLECTION SC_datetime AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
targetNamespace="myNS"
xmlns:ns="myNS"
xmlns:s="https://schemas.microsoft.com/sqlserver/2004/sqltypes"
>       <import namespace="http://www.w3.org/XML/1998/namespace"/>
      <import namespace="https://schemas.microsoft.com/sqlserver/2004/sqltypes"/>
       <element name="root">
            <complexType>
                  <sequence>
                        <element name="c" type="s:datetime"/>
                  </sequence>
            </complexType>
      </element>
</schema>'
GO

다음 할당은 실패합니다.

DECLARE @var xml(SC_datetime)
SET @var = '<x:root xmlns:x="myNS"><c>1953-01-01T00:00:00.000</c></x:root>'
GO

기존 대체 그룹에 멤버 추가

XML 스키마 컬렉션에서는 기존 대체 그룹에 멤버를 추가할 수 없습니다. XML 스키마의 대체 그룹은 머리글 요소와 이 요소의 모든 멤버 요소를 같은 {CREATE | ALTER} XML SCHEMA COLLECTION 문에서 정의해야 한다는 점에서 제한적입니다. 예를 들어 다음을 수행할 수 있습니다.

CREATE XML SCHEMA COLLECTION col AS N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="e1"/>
    <xs:element name="e2" substitutionGroup="e1"/>
</xs:schema>'

그러나 e1이라는 머리글 요소가 CREATE XML SCHEMA COLLECTION 문에서 정의되고 e2라는 대체 멤버가 다른 ALTER XML SCHEMA COLLECTION 문에서 정의된 경우에는 다음을 수행할 수 없습니다.

CREATE XML SCHEMA COLLECTION col AS N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="e1"/>
</xs:schema>'
GO

ALTER XML SCHEMA COLLECTION col add N'
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="e2" substitutionGroup="e1"/>

</xs:schema>'
GO

공용 구조체 유형

공용 구조체 유형의 제한 사항은 지원되지 않습니다. 예를 들어 다음 CREATE XML SCHEMA COLLECTION 문은 실패합니다.

CREATE XML SCHEMA COLLECTION particlesIk026valid AS N'<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://xsdtesting" xmlns:x="http://xsdtesting" elementFormDefault="qualified">
    <xsd:simpleType name="U1">
        <xsd:union>
            <xsd:simpleType>
                <xsd:restriction base="xsd:integer" />
            </xsd:simpleType>
            <xsd:simpleType>
                <xsd:restriction base="xsd:string" />
            </xsd:simpleType>
        </xsd:union>
    </xsd:simpleType>
    <xsd:simpleType name="U2">
        <xsd:restriction base="x:U1" />
    </xsd:simpleType>
    <xsd:complexType name="B">
        <xsd:choice>
            <xsd:element name="c1" type="x:U1" />
            <xsd:element name="c2" />
        </xsd:choice>
    </xsd:complexType>
    <xsd:complexType name="R">
        <xsd:complexContent>
            <xsd:restriction base="x:B">
                <xsd:choice>
                    <xsd:element name="c1" type="x:U2" />
                    <xsd:element name="c2" />
                </xsd:choice>
            </xsd:restriction>
        </xsd:complexContent>
    </xsd:complexType>
    <xsd:element name="doc">
        <xsd:complexType>
            <xsd:choice>
                <xsd:element name="elem" type="x:R" />
            </xsd:choice>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>'

대형 XML 스키마 컬렉션 및 메모리 부족 상태

대형 XML 스키마 컬렉션에서 기본 제공 XML_SCHEMA_NAMESPACE() 함수를 호출하거나 대형 XML 스키마 컬렉션을 삭제하려고 하면 메모리가 부족해질 수 있습니다. 이러한 문제를 처리할 수 있는 해결책은 다음과 같습니다.

  • 시스템 로드가 많지 않은 경우 DROP_XML_SCHEMA_COLLECTION 명령을 사용합니다. 이 명령이 실패하면 ALTER DATABASE 문을 사용하고 DROP XML SCHEMA COLLECTION을 다시 시도하여 데이터베이스를 단일 사용자 모드로 설정합니다. 해당 XML 스키마 컬렉션이 master, model 또는 tempdb에 있을 경우 단일 사용자 모드로 설정하려면 서버를 다시 시작해야 합니다.
  • XML_SCHEMA_NAMESPACE를 호출할 경우 하나의 XML 스키마 네임스페이스만 검색하거나 시스템 로드가 더 적을 때 호출을 시도하거나 단일 사용자 모드로 호출을 시도할 수 있습니다.

비결정적 콘텐츠 모델

SQL Server에서는 비결정적 콘텐츠 모델이 있는 XML 스키마를 거부합니다.

다음 예에서는 비결정적 콘텐츠 모델이 있는 XML 스키마를 만들려고 시도합니다. <root> 요소에 <a> 요소가 두 개 포함된 하나의 시퀀스가 있는지 또는 <root> 요소에 각각 <a> 요소가 하나씩 포함된 두 개의 시퀀스가 있는지가 명확하지 않기 때문에 이 코드는 실패합니다.

CREATE XML SCHEMA COLLECTION MyCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema">
    <element name="root">
        <complexType>
            <sequence minOccurs="1" maxOccurs="2">
                <element name="a" type="string" minOccurs="1" maxOccurs="2"/>
            </sequence>
        </complexType>
    </element>
</schema>
'
GO

발생빈도 제약 조건을 고유한 위치로 이동하여 스키마를 수정할 수 있습니다. 예를 들어 이 제약 조건을 포함하는 시퀀스 파티클로 이동할 수 있습니다.

<sequence minOccurs="1" maxOccurs="4">
    <element name="a" type="string" minOccurs="1" maxOccurs="1"/>
</sequence>

또는 이 제약 조건을 포함된 요소로 이동할 수 있습니다.

<sequence minOccurs="1" maxOccurs="1">
     <element name="a" type="string" minOccurs="1" maxOccurs="4"/>
</sequence>

SQL Server 2005 서비스 팩 1 동작

비결정적 콘텐츠 모델은 발생빈도 제약 조건이 0 또는 1이거나 해제된 경우 허용됩니다.

다음 예는 SQL Server 2005에서는 거부되지만 SQL Server SP1을 실행하는 서버에서는 허용됩니다.

CREATE XML SCHEMA COLLECTION MyCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema">
    <element name="root">
        <complexType>
            <sequence minOccurs="0" maxOccurs="unbounded">
                <element name="a" type="string" minOccurs="0" maxOccurs="1"/>
                <element name="b" type="string" minOccurs="1" maxOccurs="unbounded"/>
            </sequence>
        </complexType>
    </element>
</schema>
'
GO

참고 항목

참조

서버에서 XML 스키마 컬렉션을 사용하는 것에 대한 지침 및 제한 사항
XML 스키마 컬렉션에 대한 사용 권한
서버에서 XML 스키마 컬렉션 관리

개념

xml 데이터 형식
형식화된 XML과 형식화되지 않은 XML
UNIQUE PARTICLE ATTRIBUTION 제약 조건 이해

도움말 및 정보

SQL Server 2005 지원 받기

변경 내역

릴리스 내역

2006년 4월 14일

새로운 내용
  • SP1에서 비결정적 콘텐츠 모델이 처리되는 방법을 설명하는 섹션을 추가했습니다.