Генерация XSD на лету

Раньше создать схему на лету можно было только в формате XDR с помощью конструкции for xml, xmldata. Так как спецификация XRD, которая никогда не была официальным стандартом, уже давно устарела, разработчики, наконец, ввели поддержку генерации схемы в формате XSD по результатам выборки. Например, нехитрый запрос:

select top 4 name, object_id from sys.indexes for xml auto, xmlschema, elements xsinil

возвращает следующий, довольно хитрый, результат:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://schemas.microsoft.com/sql/2002/types"> <xsd:simpleType name="nvarchar"> <xsd:restriction base="xsd:string"/> </xsd:simpleType> <xsd:simpleType name="int"> <xsd:restriction base="xsd:int"/> </xsd:simpleType></xsd:schema><xsd:schema targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet8" xmlns:schema="urn:schemas-microsoft-com:sql:SqlRowSet8" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sql/2002/types" elementFormDefault="qualified"> <xsd:import namespace="http://schemas.microsoft.com/sql/2002/types"/> <xsd:element name="sys.indexes"> <xsd:complexType> <xsd:sequence> <xsd:element name="name" nillable="1"> <xsd:simpleType> <xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="1049" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth"> <xsd:maxLength value="128"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="object_id" type="sqltypes:int" nillable="1"/> </xsd:sequence> </xsd:complexType> </xsd:element></xsd:schema><sys.indexes xmlns="urn:schemas-microsoft-com:sql:SqlRowSet8" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <name>pk_dtproperties</name> <object_id>133575514</object_id></sys.indexes><sys.indexes xmlns="urn:schemas-microsoft-com:sql:SqlRowSet8" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <name xsi:nil="1"/> <object_id>677577452</object_id></sys.indexes><sys.indexes xmlns="urn:schemas-microsoft-com:sql:SqlRowSet8" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <name>IX_composite</name> <object_id>677577452</object_id></sys.indexes><sys.indexes xmlns="urn:schemas-microsoft-com:sql:SqlRowSet8" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <name xsi:nil="1"/> <object_id>693577509</object_id></sys.indexes>

Вложенные запросы не могут генерировать схему. Это может делать только запрос верхнего уровня. Все вложенные XML-фрагменты такого многоуровневого запроса представляются типом xsd:anyType. Кроме этого, нельзя генерировать XSD-схему на лету в режиме explicit.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: