Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Иерархичная ссылка в XSD / 3 сообщений из 3, страница 1 из 1
24.04.2014, 16:34
    #38624909
Migelle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархичная ссылка в XSD
Есть 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
24.04.2014, 18:34
    #38625042
petalvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархичная ссылка в XSD
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
25.04.2014, 07:56
    #38625345
Migelle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Иерархичная ссылка в XSD
petalvikДля nodeId дело осложняется тем, что айдишники неуникальны в пределах всего документа. То есть в xpath нужно как-то учесть и группирование в head. Что-то не соображу, как это сделать.
В том-то дело, что одноуровневую связь реализовать легко, а c двухуровневой начинаются проблемы.
Нашел решение с денормализацией , если ничего другого не найду, сделаю как там описано.
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Иерархичная ссылка в XSD / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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