powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Иерархичная ссылка в XSD
3 сообщений из 3, страница 1 из 1
Иерархичная ссылка в XSD
    #38624909
Migelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть xml примерно такого вида
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<xml>
	<dict>
		<head headId="1">
			<nodes>
				<node nodeId="1"/>
				<node nodeId="2"/>
				<node nodeId="3"/>
			</nodes>
		</head>
		<head headId="2">
			<nodes>
				<node nodeId="3"/>
				<node nodeId="4"/>
			</nodes>
		</head>
	</dict>
	<table>
		<row headRef="1" nodeRef="2"/>
		<row headRef="1" nodeRef="3"/>
		<row headRef="2" nodeRef="5"/>
	</table>
</xml>


Т.е. в table/row ссылки на соответствующие записи в dict

А можно ли через xs:key, xs:keyref описать в схеме связь, чтобы проверить что headRef и nodeRef согласованы?
...
Рейтинг: 0 / 0
Иерархичная ссылка в XSD
    #38625042
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Migelle,

связь headId и headRef реализовать несложно.
Я сгенерировал схему для приведённого xml в Visual Studio и добавил ключ и ссылку.
Код: 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.
<?xml version="1.0" encoding="windows-1251"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="xml">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="dict">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="head">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="nodes">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element maxOccurs="unbounded" name="node">
                            <xs:complexType>
                              <xs:attribute name="nodeId" type="xs:unsignedByte" use="required" />
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="headId" type="xs:unsignedByte" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="table">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="row">
                <xs:complexType>
                  <xs:attribute name="headRef" type="xs:unsignedByte" use="required" />
                  <xs:attribute name="nodeRef" type="xs:unsignedByte" use="required" />
                </xs:complexType>

                <xs:keyref name="ref1" refer="headIdKey">
                  <xs:selector xpath="."/>
                  <xs:field xpath="@headRef"/>
                </xs:keyref>

              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>

    <xs:key name="headIdKey">
      <xs:selector xpath="dict/head"/>
      <xs:field xpath="@headId"/>
    </xs:key>

  </xs:element>
</xs:schema>


Для nodeId дело осложняется тем, что айдишники неуникальны в пределах всего документа. То есть в xpath нужно как-то учесть и группирование в head. Что-то не соображу, как это сделать.
...
Рейтинг: 0 / 0
Иерархичная ссылка в XSD
    #38625345
Migelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petalvikДля nodeId дело осложняется тем, что айдишники неуникальны в пределах всего документа. То есть в xpath нужно как-то учесть и группирование в head. Что-то не соображу, как это сделать.
В том-то дело, что одноуровневую связь реализовать легко, а c двухуровневой начинаются проблемы.
Нашел решение с денормализацией , если ничего другого не найду, сделаю как там описано.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Иерархичная ссылка в XSD
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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