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

Откуда:
Сообщений: 767
Предположим, есть некая xsd-схема, например, одного из файлов ФИАС:

+

<?xml version="1.0" encoding="utf-8"?>
<!-- edited with XMLSpy v2009 sp1 (http://www.altova.com) by Буравцев_А (EMBRACE) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:sch="http://purl.oclc.org/dsdl/schematron" xmlns:usch="http://www.unisoftware.ru/schematron-extensions" xmlns:sql="urn:schemas-microsoft-com:mapping-schema" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:element name="AddressObjects">
		<xs:annotation>
			<xs:documentation>Состав и структура файла с информацией классификатора адресообразующих элементов БД ФИАС</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Object" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>Классификатор адресообразующих элементов</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:attribute name="AOGUID" use="required">
							<xs:annotation>
								<xs:documentation>Глобальный уникальный идентификатор адресного объекта </xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:length value="36"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="FORMALNAME" use="required">
							<xs:annotation>
								<xs:documentation>Формализованное наименование</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:minLength value="1"/>
									<xs:maxLength value="120"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="REGIONCODE" use="required">
							<xs:annotation>
								<xs:documentation>Код региона</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:length value="2"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="AUTOCODE" use="required">
							<xs:annotation>
								<xs:documentation>Код автономии</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:length value="1"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="AREACODE" use="required">
							<xs:annotation>
								<xs:documentation>Код района</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:length value="3"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="CITYCODE" use="required">
							<xs:annotation>
								<xs:documentation>Код города</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:length value="3"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="CTARCODE" use="required">
							<xs:annotation>
								<xs:documentation>Код внутригородского района</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:length value="3"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="PLACECODE" use="required">
							<xs:annotation>
								<xs:documentation>Код населенного пункта</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:length value="3"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="PLANCODE" use="required">
							<xs:annotation>
								<xs:documentation>Код элемента планировочной структуры</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:length value="4"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>									
						<xs:attribute name="STREETCODE" use="optional">
							<xs:annotation>
								<xs:documentation>Код улицы</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:length value="4"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="EXTRCODE" use="required">
							<xs:annotation>
								<xs:documentation>Код дополнительного адресообразующего элемента</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:length value="4"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="SEXTCODE" use="required">
							<xs:annotation>
								<xs:documentation>Код подчиненного дополнительного адресообразующего элемента</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:length value="3"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="OFFNAME" use="optional">
							<xs:annotation>
								<xs:documentation>Официальное наименование</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:minLength value="1"/>
									<xs:maxLength value="120"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="POSTALCODE" use="optional">
							<xs:annotation>
								<xs:documentation>Почтовый индекс</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:length value="6"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="IFNSFL" use="optional">
							<xs:annotation>
								<xs:documentation>Код ИФНС ФЛ</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:length value="4"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="TERRIFNSFL" use="optional">
							<xs:annotation>
								<xs:documentation>Код территориального участка ИФНС ФЛ</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:length value="4"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="IFNSUL" use="optional">
							<xs:annotation>
								<xs:documentation>Код ИФНС ЮЛ</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:length value="4"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="TERRIFNSUL" use="optional">
							<xs:annotation>
								<xs:documentation>Код территориального участка ИФНС ЮЛ</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:length value="4"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="OKATO" use="optional">
							<xs:annotation>
								<xs:documentation>OKATO</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:length value="11"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="OKTMO" use="optional">
							<xs:annotation>
								<xs:documentation>OKTMO</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:minLength value="8"/>
									<xs:maxLength value="11"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="UPDATEDATE" type="xs:date" use="required">
							<xs:annotation>
								<xs:documentation>Дата  внесения записи</xs:documentation>
							</xs:annotation>
						</xs:attribute>
						<xs:attribute name="SHORTNAME" use="required">
							<xs:annotation>
								<xs:documentation>Краткое наименование типа объекта</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:minLength value="1"/>
									<xs:maxLength value="10"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="AOLEVEL" use="required">
							<xs:annotation>
								<xs:documentation>Уровень адресного объекта </xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:integer">
									<xs:totalDigits value="10"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="PARENTGUID" use="optional">
							<xs:annotation>
								<xs:documentation>Идентификатор объекта родительского объекта</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:length value="36"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="AOID" use="required">
							<xs:annotation>
								<xs:documentation>Уникальный идентификатор записи. Ключевое поле.</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:length value="36"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="PREVID" use="optional">
							<xs:annotation>
								<xs:documentation>Идентификатор записи связывания с предыдушей исторической записью</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:length value="36"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="NEXTID" use="optional">
							<xs:annotation>
								<xs:documentation>Идентификатор записи  связывания с последующей исторической записью</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:length value="36"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="CODE" use="optional">
							<xs:annotation>
								<xs:documentation>Код адресного объекта одной строкой с признаком актуальности из КЛАДР 4.0. </xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:minLength value="0"/>
									<xs:maxLength value="17"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="PLAINCODE" use="optional">
							<xs:annotation>
								<xs:documentation>Код адресного объекта из КЛАДР 4.0 одной строкой без признака актуальности (последних двух цифр)</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:minLength value="0"/>
									<xs:maxLength value="15"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="ACTSTATUS" use="required">
							<xs:annotation>
								<xs:documentation>Статус актуальности адресного объекта ФИАС. Актуальный адрес на текущую дату. Обычно последняя запись об адресном объекте.
0 – Не актуальный
1 - Актуальный
</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:integer">
									<xs:totalDigits value="10"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="CENTSTATUS" use="required">
							<xs:annotation>
								<xs:documentation>Статус центра</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:integer">
									<xs:totalDigits value="10"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="OPERSTATUS" use="required">
							<xs:annotation>
								<xs:documentation>Статус действия над записью – причина появления записи (см. описание таблицы OperationStatus):
01 – Инициация;
10 – Добавление;
20 – Изменение;
21 – Групповое изменение;
30 – Удаление;
31 - Удаление вследствие удаления вышестоящего объекта;
40 – Присоединение адресного объекта (слияние);
41 – Переподчинение вследствие слияния вышестоящего объекта;
42 - Прекращение существования вследствие присоединения к другому адресному объекту;
43 - Создание нового адресного объекта в результате слияния адресных объектов;
50 – Переподчинение;
51 – Переподчинение вследствие переподчинения вышестоящего объекта;
60 – Прекращение существования вследствие дробления;
61 – Создание нового адресного объекта в результате дробления
</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:integer">
									<xs:totalDigits value="10"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="CURRSTATUS" use="required">
							<xs:annotation>
								<xs:documentation>Статус актуальности КЛАДР 4 (последние две цифры в коде)</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:integer">
									<xs:totalDigits value="10"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="STARTDATE" type="xs:date" use="required">
							<xs:annotation>
								<xs:documentation>Начало действия записи</xs:documentation>
							</xs:annotation>
						</xs:attribute>
						<xs:attribute name="ENDDATE" type="xs:date" use="required">
							<xs:annotation>
								<xs:documentation>Окончание действия записи</xs:documentation>
							</xs:annotation>
						</xs:attribute>
						<xs:attribute name="NORMDOC" use="optional">
							<xs:annotation>
								<xs:documentation>Внешний ключ на нормативный документ</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:length value="36"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
						<xs:attribute name="LIVESTATUS" use="required">
							<xs:annotation>
								<xs:documentation>Признак действующего адресного объекта</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:byte">
									<xs:enumeration value="0"/>
									<xs:enumeration value="1"/>
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
            <xs:attribute name="DIVTYPE" use="required">
              <xs:annotation>
                <xs:documentation>
                  Тип адресации:
                  0 - не определено
                  1 - муниципальный;
                  2 - административно-территориальный
                </xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:int">
                  <xs:enumeration value="0"/>
                  <xs:enumeration value="1"/>
                  <xs:enumeration value="2"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:attribute>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>


Нужно получить из нее таблицу:
attribute name
use
documentation
restriction base
minLength value
maxLength value

Обламываюсь даже просто на получении attribute name:
;WITH XMLNAMESPACES(DEFAULT 'xmlns:xs="http://www.w3.org/2001/XMLSchema"')
Select t.n.value('(./@name)[1]', 'nvarchar(4000)')
	from @x.nodes('/schema/element/complexType/sequence/element/complexType/attribute') t(n) 

Не извлекается, хоть убейся!
29 апр 19, 15:25    [21874487]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сделать Select из xsd схемы  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
uaggster,
а если так - поможет? (без WITH)
SELECT
  t.n.value('(./@name)[1]', 'nvarchar(4000)')
FROM
  @x.nodes('//xs:attribute') t(n) 
29 апр 19, 16:02    [21874555]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сделать Select из xsd схемы  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1172
uaggster,

;WITH XMLNAMESPACES(DEFAULT 'http://www.w3.org/2001/XMLSchema')
Select t.n.value('(./@name)[1]', 'nvarchar(4000)')
	from @x.nodes('/schema/element/complexType/sequence/element/complexType/attribute') t(n) 
29 апр 19, 16:08    [21874562]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сделать Select из xsd схемы  [new]
uaggster
Member

Откуда:
Сообщений: 767
Коллеги, спасибо.
С намспейсами не часто имею дело, не сообразил как.
Руслан Дамирович, отдельное спасибо, а то я что-то совсем зачпокался!

Коллеги, чтобы да раза не вставать!
А что делать, если намспейса два или более.
Их же в ;WITH XMLNAMESPACES(DEFAULT 'http://www.w3.org/2001/XMLSchema') не засунешь, я так понимаю?
30 апр 19, 09:03    [21875192]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сделать Select из xsd схемы  [new]
aleks222
Member

Откуда:
Сообщений: 852
uaggster
Коллеги, спасибо.
С намспейсами не часто имею дело, не сообразил как.
Руслан Дамирович, отдельное спасибо, а то я что-то совсем зачпокался!

Коллеги, чтобы да раза не вставать!
А что делать, если намспейса два или более.
Их же в ;WITH XMLNAMESPACES(DEFAULT 'http://www.w3.org/2001/XMLSchema') не засунешь, я так понимаю?

не понимаешь

;WITH XMLNAMESPACES(DEFAULT 'http://www.w3.org/2001/XMLSchema'
                                    , sch 'http://purl.oclc.org/dsdl/schematron'
                                    )
30 апр 19, 09:06    [21875197]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сделать Select из xsd схемы  [new]
uaggster
Member

Откуда:
Сообщений: 767
aleks222, всё, понял, спасибо, заработало!
30 апр 19, 09:57    [21875242]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить