powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / XSD для чтение XML в пакете SSIS
5 сообщений из 5, страница 1 из 1
XSD для чтение XML в пакете SSIS
    #39868685
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня был вполне краткий XSD, сгенерированный с помощью SSIS

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
<?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
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
<?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" или типа того.

Например, добавляю
Код: xml
1.
2.
3.
4.
5.
6.
<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?
...
Рейтинг: 0 / 0
XSD для чтение XML в пакете SSIS
    #39868890
Фотография PsyMisha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо я согласен,

Попробуйте создать схему через консольную утилиту xsd.exe, идущую вместе с Visual Studio, лежит в рабочем каталоге VS.
У меня ни разу ни одной проблемы с работой не было после той схемы, которую выплевывала эту тулза
...
Рейтинг: 0 / 0
XSD для чтение XML в пакете SSIS
    #39871292
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не помогло. Ни одна из его опций не позволяет добавлять ограничения на длину строк.
Указывается просто тип "string".
Вопрос в том, как создать свой тип и использовать его?
...
Рейтинг: 0 / 0
XSD для чтение XML в пакете SSIS
    #39871305
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо я согласенне помогло. Ни одна из его опций не позволяет добавлять ограничения на длину строк.
Указывается просто тип "string".
Вопрос в том, как создать свой тип и использовать его?

sql:datatype="nvarchar(4000)"

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<?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)" />
...
Рейтинг: 0 / 0
XSD для чтение XML в пакете SSIS
    #39871307
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо я согласен,

Вам обязательно валидировать данные? Настройте типы и размеры колонок входов и выходов в расширенном редакторе.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / XSD для чтение XML в пакете SSIS
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]