powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как описать в схеме?
19 сообщений из 19, страница 1 из 1
Как описать в схеме?
    #35580485
Sslimx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Искал по форуму, но так ничего вращумительного и не нашел.

Есть XML и схема к нему:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
	<xsd:element name="MainElement">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref="Element1" minOccurs="0" maxOccurs="unbounded"/>				
				<xsd:element ref="Element2" minOccurs="0" maxOccurs="unbounded"/>
				<xsd:element ref="Element3" minOccurs="0" maxOccurs="unbounded"/>
				<xsd:element ref="Element4" minOccurs="0" maxOccurs="unbounded"/>
				<xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>				
			</xsd:sequence>
			<xsd:attribute name="extends" type="xsd:string" use="optional"/>
		</xsd:complexType>
	</xsd:element>

Тоесть согласно схеме в Главном элементе могут встречаться описаные элементы строго в порядке описания. Однако возникла необходимость чтобы элемент "Variable" мог встречаться в произвольном месте произвольное количество раз.
Как это описать? Что то у меня не выходит :(
...
Рейтинг: 0 / 0
Как описать в схеме?
    #35581791
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если <xsd:all> не подходит (все элементы в произвольном порядке), то никак

С уважением, Vasilisk
...
Рейтинг: 0 / 0
Как описать в схеме?
    #35583772
Sslimx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне кажется, что должен быть способ, иначе схема ущербная какая-то.
...
Рейтинг: 0 / 0
Как описать в схеме?
    #35584361
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если вот так попробовать?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<xsd:element name="MainElement">
  <xsd:complexType>
    <xsd:all>
      <xsd:group ref="elements" minOccurs="0" maxOccurs="unbounded">
      <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:all>
    <xsd:attribute name="extends" type="xsd:string" use="optional"/>
  </xsd:complexType>
</xsd:element>

<xsd:group name="elements">
  <xsd:sequence>
    <xsd:element ref="Element1" minOccurs="0" maxOccurs="unbounded"/>
    <xsd:element ref="Element2" minOccurs="0" maxOccurs="unbounded"/>
    <xsd:element ref="Element3" minOccurs="0" maxOccurs="unbounded"/>
    <xsd:element ref="Element4" minOccurs="0" maxOccurs="unbounded"/>
  </xsd:sequence>
</xsd:group>
...
Рейтинг: 0 / 0
Как описать в схеме?
    #35587496
Sslimx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, не получается... :(
...
Рейтинг: 0 / 0
Как описать в схеме?
    #35589169
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну значит не судьба. . Вы определитесь, что Вам нужно <xsd:sequence> или <xsd:all>

С уважением, Vasilisk
...
Рейтинг: 0 / 0
Как описать в схеме?
    #35590779
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возможно, можно сделать через ключи.
...
Рейтинг: 0 / 0
Как описать в схеме?
    #35591197
Sslimx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уточните как?
...
Рейтинг: 0 / 0
Как описать в схеме?
    #35592356
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoвозможно, можно сделать через ключи.
Нельзя. Ключи задают уникальность и ссылочную целостность, а ему нужен порядок
...
Рейтинг: 0 / 0
Как описать в схеме?
    #35593347
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Ключи задают уникальность и ссылочную целостностьвсё можно использовать через жопу
...
Рейтинг: 0 / 0
Как описать в схеме?
    #35594649
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo_Vasilisk_Ключи задают уникальность и ссылочную целостностьвсё можно использовать через жопу
Тут мне стало интересно. Можно пример ключа или ссылки, который валидирует не только уникальность полей и ссылочную целостность?
...
Рейтинг: 0 / 0
Как описать в схеме?
    #35595230
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пример
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<xsd:element name="MainElement">
  <xsd:complexType>
    <xsd:all>
      <xsd:element name="First">
        <xsd:key name="SequenceSimulator">
          <xsd:selector xpath="."/>
          <xsd:field xpath="not(preceding-sibling::Second)"/>
        </xsd:key>
      </xsd:element>
      <xsd:element name="Second"/>
    </xsd:all>
  </xsd:complexType>
</xsd:element>
...
Рейтинг: 0 / 0
Как описать в схеме?
    #35595251
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой, немножко не так…

Ну да идея, думаю, должна быть понятна :)
...
Рейтинг: 0 / 0
Как описать в схеме?
    #35595255
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так, кажется…
Код: plaintext
1.
<xsd:field xpath=".[not(preceding-sibling::Second)]"/>
...
Рейтинг: 0 / 0
Как описать в схеме?
    #35597080
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoНу да идея, думаю, должна быть понятна :)
Согласен Идея красивая. Никогда не думал в этом направлении
...
Рейтинг: 0 / 0
Как описать в схеме?
    #35831406
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итак, сегодня понадобилась эта фича. Оказалось, что все не так просто.

Постановка задачи - требуется обеспечить наличие элемента, в зависимости от значения другого элемента. Например в следующем XML требуется наличие элемента B в том случае, если элемент A = 10
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<root>
  <item>
    <A> 0 </A>
  </item>
  <item>
    <A> 10 </A>
    <B> 6 </B>
  </item>
  <item>
    <B> 8 </B>
  </item>
  <item>
    <A> 10 </A>
  </item>
</root>
последний item должен быть невалидным. Пишу такую схему
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<xsd:element name="item">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element name="A" type="xsd:integer" minOccurs="0"/>
      <xsd:element name="B" type="xsd:integer" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:key name="check1">
    <xsd:selector xpath=".[A = 10]"/>
    <xsd:field xpath="B"/>
  </xsd:key>
</xsd:element>
на, что получаю отлуп - XPath выражение в XML Schema не может содержать подзапросов.

Вариант
Код: plaintext
1.
2.
3.
  <xsd:key name="check1">
    <xsd:selector xpath="."/>
    <xsd:field xpath="B[../A = 10]"/>
  </xsd:key>
и подобные дают те же результаты. Как только в XPath появляются операторы [] или .. сразу получаю ошибку.

Так все таки можно ли XSD схемой валидировать XML по значению, а не по структуре?

С уважением, Vasilisk
...
Рейтинг: 0 / 0
Как описать в схеме?
    #35833541
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну раз она не поддерживает XPath, тогда никак.
...
Рейтинг: 0 / 0
Как описать в схеме?
    #35835280
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoну раз она не поддерживает XPath, тогда никак.
А жаль. Ты меня так обнадежил. Думал, что-то знаешь
...
Рейтинг: 0 / 0
Как описать в схеме?
    #35841399
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще не работаю со схемой.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как описать в схеме?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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