인라인 XSD 스키마 생성Generate an Inline XSD Schema

FOR XML 절에서는 쿼리가 쿼리 결과와 함께 인라인 스키마를 반환하도록 요청할 수 있습니다.In a FOR XML clause, you can request that your query return an inline schema together with the query results. XDR 스키마가 필요한 경우 FOR XML 절에 XMLDATA 키워드를 사용합니다.If you want an XDR schema, you use the XMLDATA keyword in the FOR XML clause. XSD 스키마가 필요한 경우 XMLSCHEMA 키워드를 사용합니다.If you want an XSD schema, you use the XMLSCHEMA keyword.

이 항목에서는 XMLSCHEMA 키워드에 대해 설명하고 결과 인라인 XSD 스키마의 구조를 설명합니다.This topic describes the XMLSCHEMA keyword and explains the structure of the resulting inline XSD schema. 인라인 스키마를 요청하는 경우 다음과 같은 제한 사항이 있습니다.Following are the limitations when you are requesting inline schemas:

  • XMLSCHEMA는 RAW 및 AUTO 모드에서만 지정할 수 있으며 EXPLICIT 모드에서는 지정할 수 없습니다.You can specify XMLSCHEMA only in RAW and AUTO mode, not in EXPLICIT mode.

  • 중첩 FOR XML 쿼리에 TYPE 지시어를 지정하는 경우 쿼리 결과는 xml 형식이 되며 형식화되지 않은 XML 데이터의 인스턴스로 취급됩니다.If a nested FOR XML query specifies the TYPE directive, the query result is of xml type, and this result is treated as an instance of untyped XML data. 자세한 내용은 XML 데이터(SQL Server)를 참조하세요.For more information, see XML Data (SQL Server).

    FOR XML 쿼리에 XMLSCHEMA를 지정하는 경우 스키마와 XML 데이터를 모두 쿼리 결과로 수신합니다.When you specify XMLSCHEMA in a FOR XML query, you receive both a schema and XML data, the query result. 데이터의 각 최상위 요소는 기본 네임스페이스 선언을 사용하여 이전 스키마를 참조하며, 이 선언은 인라인 스키마의 대상 네임스페이스를 참조합니다.Each top-level element of the data refers to the previous schema by using a default namespace declaration that, in turn, refers to the target namespace of the inline schema.

    예를 들어For example:

<xsd:schema targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet1" xmlns:schema="urn:schemas-microsoft-com:sql:SqlRowSet1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" elementFormDefault="qualified">  
  <xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />  
  <xsd:element name="Production.ProductModel">  
    <xsd:complexType>  
      <xsd:attribute name="ProductModelID" type="sqltypes:int" use="required" />  
      <xsd:attribute name="Name" use="required">  
        <xsd:simpleType sqltypes:sqlTypeAlias="[AdventureWorks2012].[dbo].[Name]">  
          <xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="1033" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth" sqltypes:sqlSortId="52">  
            <xsd:maxLength value="50" />  
          </xsd:restriction>  
        </xsd:simpleType>  
      </xsd:attribute>  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  
<Production.ProductModel xmlns="urn:schemas-microsoft-com:sql:SqlRowSet1" ProductModelID="1" Name="Classic Vest" />  

결과에는 XML 스키마와 XML 결과가 포함됩니다.The result includes XML schema and the XML result. 결과에서 <ProductModel> 최상위 요소는 기본 네임스페이스 선언 xmlns="urn:schemas-microsoft-com:sql:SqlRowSet1"을 사용하여 스키마를 참조합니다.The <ProductModel> top-level element in the result refers to the schema by using the default namespace declaration, xmlns="urn:schemas-microsoft-com:sql:SqlRowSet1" .

결과의 스키마 부분에는 여러 네임스페이스를 기술하는 여러 스키마 문서가 포함될 수 있습니다.The schema part of the result may contain multiple schema documents that describe multiple namespaces. 최소한 다음 두 스키마 문서가 반환됩니다.At a minimum, the following two schema documents are returned:

  • 한 스키마 문서는 Sqltypes 네임스페이스에 대한 문서이며 기본 SQL 유형이 반환되는 문서입니다.One schema document for the Sqltypes namespace, and for which the base SQL types are being returned.

  • 다른 스키마 문서는 FOR XML 쿼리 결과의 셰이프를 기술합니다.Another schema document that describes the shape of the FOR XML query result.

    또한 형식화된 xml 데이터 형식이 쿼리 결과에 포함된 경우 형식화된 해당 xml 데이터 형식과 연결된 스키마가 포함됩니다.Also, if any typed xml data types are included in the query result, the schemas associated with those typed xml data types are included.

    FOR XML 결과의 셰이프를 기술하는 스키마 문서의 대상 네임스페이스에는 고정 부분과 자동으로 증가하는 숫자 부분이 포함됩니다.The target namespace of the schema document that describes the shape of the FOR XML result contains a fixed portion and a numeric portion that increments automatically. 이 네임스페이스의 형식은 다음과 같으며 여기서 n 은 양의 정수입니다.The format of this namespace is shown in the following where n is a positive integer. 예를 들어 이전 쿼리에서 urn:schemas-microsoft-com:sql:SqlRowSet1은 대상 네임스페이스입니다.For example, in the previous query, urn:schemas-microsoft-com:sql:SqlRowSet1 is the target namespace.

urn:schemas-microsoft-com:sql:SqlRowSetn  

결과의 대상 네임스페이스는 실행될 때마다 내용이 변경되지 않는 것이 좋습니다.The change in the target namespaces in the result that occurred from one execution to another may not be desirable. 예를 들어 결과 XML을 쿼리하는 경우 대상 네임스페이스에 변경된 내용이 있으면 해당 쿼리를 업데이트해야 합니다.For example, if you query the resulting XML, the change in target namespace will require that you update your query. FOR XML 절에 XMLSCHEMA 옵션을 추가할 때 선택적으로 대상 네임스페이스를 지정할 수 있습니다.You can optionally specify a target namespace when the XMLSCHEMA option is added in the FOR XML clause. 결과 XML에는 제공한 네임스페이스가 포함되며 쿼리 실행 회수에 관계없이 동일하게 유지됩니다.The resulting XML will include the namespace you provided and will remain the same, regardless of how many times you run the query.

SELECT ProductModelID, Name  
FROM   Production.ProductModel  
WHERE ProductModelID=1  
FOR XML AUTO, XMLSCHEMA ('MyURI')  

엔터티 요소Entity Elements

쿼리 결과에 대해 생성된 XSD 스키마 구조의 세부 내용을 다루기 전에 엔터티 요소에 대해 먼저 이해해야 합니다.In order to discuss the details of the XSD schema structure generated for the query result, the entity element has to first be described

FOR XML 쿼리에 의해 반환된 XML 데이터에 있는 엔터티 요소는 열이 아닌 테이블로부터 생성된 요소입니다.An entity element in the XML data returned by FOR XML query is an element that is generated from a table and not from a column. 예를 들어 다음 FOR XML 쿼리는 Person 데이터베이스에 있는 AdventureWorks2012 테이블의 연락처 정보를 반환합니다.For example, the following FOR XML query returns contact information from the Person table in the AdventureWorks2012 database.

SELECT BusinessEntityID, FirstName  
FROM Person.Person  
WHERE BusinessEntityID = 1  
FOR XML AUTO, ELEMENTS  

다음은 결과입니다.This is the result:

<Person>

<BusinessEntityID>1</BusinessEntityID>

<FirstName>Ken</FirstName>

</Person>

이 결과에서 <Person>은 엔터티 요소입니다.In this result, <Person> is the entity element. XML 결과에는 여러 엔터티 요소가 포함될 수 있으며 이러한 각 요소에는 인라인 XSD 스키마의 전역 선언이 포함됩니다.There can be multiple entity elements in the XML result and each of these has a global declaration in the inline XSD schema. 예를 들어 다음 쿼리는 판매 주문 제목과 특정 주문에 대한 세부 정보를 검색합니다.For example, the following query retrieves sales order header and detail information for a specific order.

SELECT  SalesOrderHeader.SalesOrderID, ProductID, OrderQty  
FROM    Sales.SalesOrderHeader, Sales.SalesOrderDetail  
WHERE   SalesOrderHeader.SalesOrderID = SalesOrderDetail.SalesOrderID  
AND     SalesOrderHeader.SalesOrderID=5001  
FOR XML AUTO, ELEMENTS, XMLSCHEMA  

이 쿼리는 ELEMENTS 지시어를 지정하기 때문에 결과 XML은 요소 중심입니다.Because the query specifies the ELEMENTS directive, the resulting XML is element-centric. 이 쿼리는 또한 XMLSCHEMA 지시어를 지정합니다.The query also specifies the XMLSCHEMA directive. 따라서 인라인 XSD 스키마가 반환됩니다.Therefore, an inline XSD schema is returned. 다음은 결과입니다.This is the result:

<xsd:schema targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet1" xmlns:schema="urn:schemas-microsoft-com:sql:SqlRowSet1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" elementFormDefault="qualified">

<xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />

<xsd:element name="Sales.SalesOrderHeader">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="SalesOrderID" type="sqltypes:int" />

<xsd:element ref="schema:Sales.SalesOrderDetail" minOccurs="0" maxOccurs="unbounded" />

</xsd:sequence>

</xsd:complexType>

</xsd:element>

<xsd:element name="Sales.SalesOrderDetail">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="ProductID" type="sqltypes:int" />

<xsd:element name="OrderQty" type="sqltypes:smallint" />

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:schema>

이전 쿼리에서 다음을 유의하세요.Note the following from the previous query:

  • 결과에서 <SalesOrderHeader> 및 <SalesOrderDetail>은 엔터티 요소입니다.In the result, <SalesOrderHeader> and <SalesOrderDetail> are entity elements. 따라서 이러한 요소는 스키마에서 전역으로 선언됩니다.Because of this, they are globally declared in the schema. 즉, 선언이 <Schema> 요소 내부의 최상위에 표시됩니다.That is, the declaration appears at the top level inside the <Schema> element.

  • <SalesOrderID>, <ProductID> 및 <OrderQty>는 열로 매핑되므로 엔터티 요소가 아닙니다.The <SalesOrderID>, <ProductID>, and <OrderQty> are not entity elements, because they map to columns. 열 데이터는 ELEMENTS 지시어로 인해 XML의 요소로 반환됩니다.The column data is returned as elements in the XML, because of the ELEMENTS directive. 이러한 데이터는 엔터티 요소의 복합 유형에 대한 로컬 요소로 매핑됩니다.These are mapped to local elements of the entity element's complex type. ELEMENTS 지시어를 지정하지 않으면 SalesOrderID, ProductIDOrderQty 값이 해당 엔터티 요소의 복합 유형에 대한 로컬 특성으로 매핑됩니다.Note that if the ELEMENTS directive is not specified, the SalesOrderID, ProductID and OrderQty values are mapped to local attributes of the corresponding entity element's complex type.

특성 이름 충돌Attribute Name Clashes

다음 설명에서는 CustOrderCustOrderDetail 테이블을 기준으로 설명합니다.The following discussion is based on the CustOrder and CustOrderDetail tables. 다음 예제를 테스트하려면 아래와 같이 테이블을 만들고 자신의 예제 데이터를 추가합니다.To test the following samples, create these tables and add your own sample data:

CREATE TABLE CustOrder (OrderID int primary key, CustomerID int)  
GO  
CREATE TABLE CustOrderDetail (OrderID int, ProductID int, Qty int)  
GO  

FOR XML에서 일부 경우에는 동일 이름을 사용하여 서로 다른 속성과 특성을 나타냅니다.In FOR XML, the same name is sometimes used to indicate different properties, attributes. 예를 들어 다음 특성 중심 RAW 모드 쿼리는 이름이 OrderID로 같은 두 개의 특성을 생성합니다.For example, the following attribute-centric RAW mode query generates two attributes that have the same name, OrderID. 이렇게 하면 오류가 발생합니다.This generates an error.

SELECT CustOrder.OrderID,   
       CustOrderDetail.ProductID,   
       CustOrderDetail.OrderID  
FROM   dbo.CustOrder, dbo.CustOrderDetail  
WHERE  CustOrder.OrderID = CustOrderDetail.OrderID  
FOR XML RAW, XMLSCHEMA  

하지만 같은 이름의 두 요소를 사용할 수 있기 때문에 ELEMENTS 지시어를 추가하여 문제를 해결할 수 있습니다.However, because it is acceptable to have two elements that have the same name, you can eliminate the problem by adding the ELEMENTS directive:

SELECT CustOrder.OrderID,  
       CustOrderDetail.ProductID,   
       CustOrderDetail.OrderID  
from   dbo.CustOrder, dbo.CustOrderDetail  
where  CustOrder.OrderID = CustOrderDetail.OrderID  
FOR XML RAW, XMLSCHEMA, ELEMENTS  

다음은 결과입니다.This is the result. 인라인 XSD 스키마에서 OrderID 요소는 두 번 정의됩니다.Note in the inline XSD schema, the OrderID element is defined two times. 선언 중 하나에서는 CustOrderDetail 테이블의 OrderID에 따라 minOccurs가 0으로 설정되어 있으며 다른 하나는 minOccurs가 기본적으로 1인 CustOrder 테이블의 OrderID 기본 키 열로 매핑됩니다.One of the declarations has minOccurs set to 0, corresponding to the OrderID from the CustOrderDetail table, and the second one maps to the OrderID primary key column of the CustOrder table where minOccurs is 1 by default.

<xsd:schema targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" elementFormDefault="qualified">

<xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />

<xsd:element name="row">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="OrderID" type="sqltypes:int" />

<xsd:element name="ProductID" type="sqltypes:int" minOccurs="0" />

<xsd:element name="OrderID" type="sqltypes:int" minOccurs="0" />

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:schema>

요소 이름 충돌Element Name Clashes

FOR XML에서는 동일한 이름을 사용하여 두 개의 하위 요소를 나타낼 수 있습니다.In FOR XML, the same name can be used to indicate two subelements. 예를 들어 다음 쿼리는 제품의 ListPrice 및 DealerPrice 값을 검색하지만 두 열에 대해 Price라는 동일한 별칭을 지정합니다.For example, the following query retrieves ListPrice and DealerPrice values of products, but the query specifies the same alias, Price, for these two columns. 따라서 결과 행 집합에는 이름이 같은 두 열이 포함됩니다.Therefore, the resulting rowset will have two columns with same name.

사례 1: 두 하위 요소 모두 같은 유형의 키가 아닌 열이며 NULL일 수 있습니다.Case 1: Both subelements are nonkey columns of the same type and can be NULL

다음 쿼리에서 두 하위 요소는 모두 같은 유형의 키가 아닌 열이며 NULL일 수 있습니다.In the following query, both subelements are nonkey columns of the same type and can be NULL.

DROP TABLE T  
go  
CREATE TABLE T (ProductID int primary key, ListPrice money, DealerPrice money)  
go  
INSERT INTO T values (1, 1.25, null)  
go  

SELECT ProductID, ListPrice Price, DealerPrice Price  
FROM   T  
for    XML RAW, ELEMENTS, XMLSCHEMA  

이것은 생성된 해당 XML입니다.This is the corresponding XML generated. 인라인 XSD의 일부만 표시됩니다.Only a fraction of the inline XSD is shown:

<xsd:schema targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" elementFormDefault="qualified">

<xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" />

<xsd:element name="row">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="ProductID" type="sqltypes:int" />

<xsd:element name="Price" type="sqltypes:money" minOccurs="0" maxOccurs="2" />

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:schema>

<row xmlns="urn:schemas-microsoft-com:sql:SqlRowSet1">

<ProductID>1</ProductID>

<Price>1.2500</Price>

</row>

인라인 XSD 스키마에서 다음을 유의하십시오.Note the following in the inline XSD schema:

  • ListPrice 및 DealerPrice 모두 같은 money 유형이며 두 요소 모두 테이블에서 NULL일 수 있습니다.Both the ListPrice and DealerPrice are of the same type, money, and both can be NULL in the table. 따라서 두 요소는 결과 XML에 반환되지 않을 수도 있기 때문에 minOccurs=0 및 maxOccurs=2로 지정된 <row> 요소의 복합 유형 선언에는 <Price> 자식 요소가 하나만 있습니다.Therefore, because they may not be returned in the resulting XML, there is only one <Price> child element in the complex type declaration of the <row> element that has minOccurs=0 and maxOccurs=2.

  • 결과에서는 DealerPrice 값이 테이블에서 NULL이기 때문에 ListPrice만 <Price> 요소로 반환됩니다.In the result, because the DealerPrice value is NULL in the table, only ListPrice is returned as a <Price> element. XSINIL 매개 변수를 ELEMENTS 지시어로 추가하는 경우 DealerPrice에 해당하는 <Price> 요소에 대해 xsi:nil 값이 TRUE로 설정된 두 요소가 모두 수신됩니다.If you add the XSINIL parameter to the ELEMENTS directive, you will receive both of the elements that have the xsi:nil value set to TRUE for the<Price> element that corresponds to DealerPrice. 또한 nillable 특성이 모두 TRUE로 설정된 인라인 XSD 스키마에서 <row> 복합 유형 정의에 있는 두 개의 <Price> 자식 요소가 수신됩니다.You will also receive two <Price> child elements in the <row> complex type definition in the inline XSD schema with the nillable attribute set to TRUE for both. 다음은 결과의 일부입니다.This fragment is a partial result:

    <xsd:schema targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" elementFormDefault="qualified">

    <xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" />

    <xsd:element name="row">

    <xsd:complexType>

    <xsd:sequence>

    <xsd:element name="ProductID" type="sqltypes:int" nillable="1" />

    <xsd:element name="Price" type="sqltypes:money" nillable="1" />

    <xsd:element name="Price" type="sqltypes:money" nillable="1" />

    </xsd:sequence>

    </xsd:complexType>

    </xsd:element>

    </xsd:schema>

    <row xmlns="urn:schemas-microsoft-com:sql:SqlRowSet1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <ProductID>1</ProductID>

    <Price>1.2500</Price>

    <Price xsi:nil="true" />

    </row>

사례 2: 유형이 같은 하나의 키 열과 하나의 키가 아닌 열Case 2: One key and one nonkey column of the same type

다음 쿼리는 유형이 같은 하나의 키 열과 하나의 키가 아닌 열을 보여 줍니다.The following query illustrates one key and one nonkey column of the same type.

CREATE TABLE T (Col1 int primary key, Col2 int, Col3 nvarchar(20))  
go  
INSERT INTO T VALUES (1, 1, 'test')  
go   

테이블 T 에 대한 다음 쿼리는 Col1 및 Col2에 대해 같은 별칭을 지정하며, 여기서 Col1은 기본 키이며 Null일 수 없고 Col2는 Null일 수 있습니다.The following query against table T specifies the same alias for Col1 and Col2, where Col1 is a primary key and cannot be null, and Col2 can be null. 이 쿼리는 <row> 요소의 자식인 두 개의 형제 요소를 생성합니다.This generates two sibling elements that are children of the <row> element.

SELECT Col1 as Col, Col2 as Col, Col3  
FROM T  
FOR XML RAW, ELEMENTS, XMLSCHEMA  

다음은 결과입니다.This is the result. 인라인 XSD 스키마의 조각만 표시됩니다.Only a fragment of the inline XSD schema is shown.

<xsd:schema targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" elementFormDefault="qualified">

<xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" />

<xsd:element name="row">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="Col" type="sqltypes:int" />

<xsd:element name="Col" type="sqltypes:int" minOccurs="0" />

<xsd:element name="Col3" minOccurs="0">

<xsd:simpleType>

<xsd:restriction base="sqltypes:nvarchar"

sqltypes:localeId="1033"

sqltypes:sqlCompareOptions="IgnoreCase

IgnoreKanaType IgnoreWidth"

sqltypes:sqlSortId="52">

<xsd:maxLength value="20" />

</xsd:restriction>

</xsd:simpleType>

</xsd:element>

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:schema>

<row xmlns="urn:schemas-microsoft-com:sql:SqlRowSet1">

<Col>1</Col>

<Col>1</Col>

<Col3>test</Col3>

</row>

인라인 XSD 스키마에서 Col2에 해당하는 <Col> 요소는 minOccurs가 0으로 설정됩니다.Note in the inline XSD schema that the <Col> element corresponding to the Col2 has minOccurs set to 0.

사례 3: 유형이 다른 요소와 해당 열은 모두 NULL일 수 있습니다.Case 3: Both elements of different types and corresponding columns can be NULL

다음 쿼리는 사례 2에 표시된 예제 테이블에 대해 지정됩니다.The following query is specified against the sample table shown in case 2:

SELECT Col1, Col2 as Col, Col3 as Col  
FROM T  
FOR XML RAW, ELEMENTS, XMLSCHEMA  

다음 쿼리에서 Col2 및 Col3에는 같은 별칭이 지정됩니다.In the following query, Col2 and Col3 are given the same aliases. 이 쿼리는 이름이 같고 결과에서 모두 <raw> 요소의 자식인 두 개의 형제 요소를 생성합니다.This generates two sibling elements that have the same name and that are both children of the <raw> element in the result. 이 열은 모두 유형이 다르며 모두 NULL일 수 있습니다.Both of these columns are of different types and both can be NULL. 다음은 결과입니다.This is the result. 인라인 XSD 스키마의 일부만 표시됩니다.Only partial inline XSD schema is shown.

<xsd:schema targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" elementFormDefault="qualified">

<xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" />

<xsd:simpleType name="Col1">

<xsd:restriction base="sqltypes:int" />

</xsd:simpleType>

<xsd:simpleType name="Col2">

<xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="1033"

sqltypes:sqlCompareOptions="IgnoreCase

IgnoreKanaType IgnoreWidth" sqltypes:sqlSortId="52">

<xsd:maxLength value="20" />

</xsd:restriction>

</xsd:simpleType>

<xsd:element name="row">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="Col1" type="sqltypes:int" />

<xsd:element name="Col" minOccurs="0" maxOccurs="2" type="xsd:anySimpleType" />

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:schema>

<row xmlns="urn:schemas-microsoft-com:sql:SqlRowSet1">

<Col1>1</Col1>

<Col xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:type="Col1">1</Col>

<Col xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:type="Col2">test</Col>

</row>

인라인 XSD 스키마에서 다음을 유의하십시오.Note the following in the inline XSD schema:

  • Col2 및 Col3이 모두 NULL일 수 있기 때문에 <Col> 요소 선언은 minOccurs를 0으로 설정하고 maxOccurs를 2로 설정합니다.Because both Col2 and Col3 can be NULL, the <Col> element declaration specifies the minOccurs as 0 and maxOccurs as 2.

  • 두 <Col> 요소가 모두 형제이기 때문에 스키마에는 하나의 요소 선언이 있습니다.Because both the <Col> elements are siblings, there is one element declaration in the schema. 두 요소 모두 간단한 유형이지만 또한 두 요소의 유형이 모두 다르기 때문에 스키마의 요소 유형은 xsd:anySimpleType입니다.Also, because both of the elements are also of different types, though both are simple types, the type of the element in the schema is xsd:anySimpleType. 결과에서 각 인스턴스 유형은 xsi:type 특성에 의해 식별됩니다.In the result, each instance type is identified by the xsi:type attribute.

  • 결과에서 <Col> 요소의 각 인스턴스는 xsi:type 특성을 사용하여 해당 인스턴스 유형을 참조합니다.In the result, every instance of the <Col> element refers to its instance type by using the xsi:type attribute.