Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / XSD для чтение XML в пакете SSIS / 5 сообщений из 5, страница 1 из 1
29.09.2019, 19:02
    #39868685
хорошо я согласен
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD для чтение XML в пакете SSIS
У меня был вполне краткий 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
30.09.2019, 09:06
    #39868890
PsyMisha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD для чтение XML в пакете SSIS
хорошо я согласен,

Попробуйте создать схему через консольную утилиту xsd.exe, идущую вместе с Visual Studio, лежит в рабочем каталоге VS.
У меня ни разу ни одной проблемы с работой не было после той схемы, которую выплевывала эту тулза
...
Рейтинг: 0 / 0
03.10.2019, 17:54
    #39871292
хорошо я согласен
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD для чтение XML в пакете SSIS
не помогло. Ни одна из его опций не позволяет добавлять ограничения на длину строк.
Указывается просто тип "string".
Вопрос в том, как создать свой тип и использовать его?
...
Рейтинг: 0 / 0
03.10.2019, 18:11
    #39871305
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD для чтение XML в пакете SSIS
хорошо я согласенне помогло. Ни одна из его опций не позволяет добавлять ограничения на длину строк.
Указывается просто тип "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
03.10.2019, 18:12
    #39871307
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSD для чтение XML в пакете SSIS
хорошо я согласен,

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


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