Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 XSD для чтение XML в пакете SSIS  [new]
хорошо я согласен
Member

Откуда:
Сообщений: 337
У меня был вполне краткий XSD, сгенерированный с помощью SSIS

+
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="metadata">
        <xs:complexType>
            <xs:sequence>
                <xs:element minOccurs="0" name="ShopData">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element minOccurs="0" maxOccurs="unbounded" name="item">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element minOccurs="0" name="staffKey" type="xs:unsignedInt" />
                                        <xs:element minOccurs="0" name="staffDepartment" type="xs:string" />
                                        <xs:element minOccurs="0" name="shoperKey" type="xs:unsignedInt" />
                                        <xs:element minOccurs="0" name="shoperName" type="xs:string" />
                                        <xs:element minOccurs="0" name="yogurtKey" type="xs:unsignedInt" />
                                        <xs:element minOccurs="0" name="yogurtName" type="xs:string" />
                                        <xs:element minOccurs="0" name="yogurtCategory" type="xs:string" />
                                        <xs:element minOccurs="0" name="vyruchkaValuta" type="xs:string" />
                                        <xs:element minOccurs="0" name="date" type="xs:string" />
                                        <xs:element minOccurs="0" name="vyruchkaType" type="xs:string" />
                                        <xs:element minOccurs="0" name="vyruchkaFull" type="xs:decimal" />
                                        <xs:element minOccurs="0" name="usluga" type="xs:string" />
                                        <xs:element minOccurs="0" name="uslugaAlt" type="xs:string" />
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>


Но сам же SSIS на эту же схему "ругался" на то, что не задано ограничение на длину строки.
Пришлось впихать везде, где стоит тип string один и тот же блок simple type, в результате чего xsd раздулся:
+
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="metadata">
        <xs:complexType>
            <xs:sequence>
                <xs:element minOccurs="0" name="ShopData">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element minOccurs="0" maxOccurs="unbounded" name="item">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element minOccurs="0" name="staffKey" type="xs:unsignedInt" />
                                        <xs:element minOccurs="0" name="staffDepartment">
                                            <xs:simpleType>
                                                <xs:restriction base="xs:string">
                                                    <xs:maxLength value="200" />
                                                </xs:restriction>
                                            </xs:simpleType>
                                        </xs:element>
                                        <xs:element minOccurs="0" name="shoperKey" type="xs:unsignedInt" />
                                        <xs:element minOccurs="0" name="shoperName">
                                            <xs:simpleType>
                                                <xs:restriction base="xs:string">
                                                    <xs:maxLength value="200" />
                                                </xs:restriction>
                                            </xs:simpleType>
                                        </xs:element>
                                        <xs:element minOccurs="0" name="yogurtKey" type="xs:unsignedInt" />
                                        <xs:element minOccurs="0" name="yogurtName">
                                            <xs:simpleType>
                                                <xs:restriction base="xs:string">
                                                    <xs:maxLength value="200" />
                                                </xs:restriction>
                                            </xs:simpleType>
                                        </xs:element>
                                        <xs:element minOccurs="0" name="yogurtCategory">
                                            <xs:simpleType>
                                                <xs:restriction base="xs:string">
                                                    <xs:maxLength value="200" />
                                                </xs:restriction>
                                            </xs:simpleType>
                                        </xs:element>
                                        <xs:element minOccurs="0" name="vyruchkaValuta">
                                            <xs:simpleType>
                                                <xs:restriction base="xs:string">
                                                    <xs:maxLength value="200" />
                                                </xs:restriction>
                                            </xs:simpleType>
                                        </xs:element>
                                        <xs:element minOccurs="0" name="date">
                                            <xs:simpleType>
                                                <xs:restriction base="xs:string">
                                                    <xs:maxLength value="200" />
                                                </xs:restriction>
                                            </xs:simpleType>
                                        </xs:element>
                                        <xs:element minOccurs="0" name="vyruchkaType">
                                            <xs:simpleType>
                                                <xs:restriction base="xs:string">
                                                    <xs:maxLength value="200" />
                                                </xs:restriction>
                                            </xs:simpleType>
                                        </xs:element>
                                        <xs:element minOccurs="0" name="vyruchkaFull" type="xs:decimal" />
                                        <xs:element minOccurs="0" name="usluga">
                                            <xs:simpleType>
                                                <xs:restriction base="xs:string">
                                                    <xs:maxLength value="200" />
                                                </xs:restriction>
                                            </xs:simpleType>
                                        </xs:element>
                                        <xs:element minOccurs="0" name="uslugaAlt">
                                            <xs:simpleType>
                                                <xs:restriction base="xs:string">
                                                    <xs:maxLength value="200" />
                                                </xs:restriction>
                                            </xs:simpleType>
                                        </xs:element>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

Оно работает отлично. Вот только нельзя ли как-то по-короче?

Любые попытки создать отдельный тип "LimitedString" и использовать его приводили к ошибке "не найден тип LimitedString" или типа того.

Например, добавляю
<xs:simpleType name="LimitedString">     
   <xs:restriction base="xs:string">
	  <xs:pattern value="[0-9]{0,10}" />
	  <xs:maxLength value="10" />
   </xs:restriction> 
</xs:simpleType> 

сразу после <xs:sequence> в пятой строке и заменяю все xs:string на LimitedString. Получаю то, что на скриншоте.
Как правильно сформатировать XSD?

К сообщению приложен файл. Размер - 23Kb
29 сен 19, 19:02    [21982072]     Ответить | Цитировать Сообщить модератору
 Re: XSD для чтение XML в пакете SSIS  [new]
PsyMisha
Member

Откуда: другая столица
Сообщений: 383
хорошо я согласен,

Попробуйте создать схему через консольную утилиту xsd.exe, идущую вместе с Visual Studio, лежит в рабочем каталоге VS.
У меня ни разу ни одной проблемы с работой не было после той схемы, которую выплевывала эту тулза
30 сен 19, 09:06    [21982337]     Ответить | Цитировать Сообщить модератору
 Re: XSD для чтение XML в пакете SSIS  [new]
хорошо я согласен
Member

Откуда:
Сообщений: 337
не помогло. Ни одна из его опций не позволяет добавлять ограничения на длину строк.
Указывается просто тип "string".
Вопрос в том, как создать свой тип и использовать его?
3 окт 19, 17:54    [21986128]     Ответить | Цитировать Сообщить модератору
 Re: XSD для чтение XML в пакете SSIS  [new]
aleks222
Member

Откуда:
Сообщений: 747
хорошо я согласен
не помогло. Ни одна из его опций не позволяет добавлять ограничения на длину строк.
Указывается просто тип "string".
Вопрос в том, как создать свой тип и использовать его?


sql:datatype="nvarchar(4000)"

<?xml version="1.0" encoding="utf-8"?>
<xs:schema 

           xmlns:sql="urn:schemas-microsoft-com:mapping-schema"

>

  <xs:element name="HotelExportFullDtoApi"
              sql:relation="[mouzenidis_IL_HotelExportFullDtoApi]" 
              sql:key-fields="loadKey Id"
              sql:overflow-field="OverflowColumn"
  >
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Beaches" type="xs:string" minOccurs="0" sql:datatype="nvarchar(4000)" />
3 окт 19, 18:11    [21986145]     Ответить | Цитировать Сообщить модератору
 Re: XSD для чтение XML в пакете SSIS  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6788
хорошо я согласен,

Вам обязательно валидировать данные? Настройте типы и размеры колонок входов и выходов в расширенном редакторе.
3 окт 19, 18:12    [21986147]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить