powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / xml - дерево или сеть?
21 сообщений из 21, страница 1 из 1
xml - дерево или сеть?
    #37066236
pol-d-nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Вопрос только начал знакомиться с xml, но очень срочно нужно решить ряд вопросов. Поэтому хотелось бы узнать мнение более опытных:

То что я видел в xml является древовидной структурой (у каждого узла 1 предок). Возможно ли с помощью xml смоделировать сеть - когда внутри дерева возможны ссылки из одного узла на другой? Есть ли какие-либо варианты?


Заранее спасибо!
...
Рейтинг: 0 / 0
xml - дерево или сеть?
    #37066491
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Физически xml это дерево, без вариантов. Логически же ничто не мешает добавить в узел ссылки на другие узлы в виде новых узлов с xpath-текстом, описывающим путь от текущего узла к тому, на который ссылаемся.
...
Рейтинг: 0 / 0
xml - дерево или сеть?
    #37067836
pol-d-nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!

Если делать это с помощью XPath, то если строить запросы к этому xml с помощью того же XPath или XQuery, то получить значения по ссылкам, конечно не удастся. Тогда получается надо дублировать узлы, на которые ссылаешься и которые находятся в другом месте дерева... Но надо отлавливать циклы и растет размер дерева...
...
Рейтинг: 0 / 0
xml - дерево или сеть?
    #37067859
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pol-d-nikесли строить запросы к этому xml с помощью того же XPath или XQuery, то получить значения по ссылкам, конечно не удастсяПочему это вдруг?
...
Рейтинг: 0 / 0
xml - дерево или сеть?
    #37067908
pol-d-nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
то есть хотите сказать, удастся? и он будет извлекать узлы по ссылкам...

интересно, надо попробовать...
...
Рейтинг: 0 / 0
xml - дерево или сеть?
    #37068273
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не какой-то непонятный "он", а вы. Вы должны будете написать программную логику, которая находила бы узлы по таким ссылкам.
...
Рейтинг: 0 / 0
xml - дерево или сеть?
    #37070132
pol-d-nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Просто подумал, что есть способ заставить XPath переходить по этой ссылке без внешнего вмешательства - воспринимать как продолжение дерева. видимо нельзя и надо программировать переход по ним?
...
Рейтинг: 0 / 0
xml - дерево или сеть?
    #37070158
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы все еще надеетесь, что нет?
Лучше поставьте конкретную задачу, которая требовала бы для решения такой логики, а мы попробуем ее решить в рамках XML.
...
Рейтинг: 0 / 0
xml - дерево или сеть?
    #37070265
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
/root/b[id = /root/b[ 1 ]/id]/data
...
Рейтинг: 0 / 0
xml - дерево или сеть?
    #37073147
pol-d-nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну например вот такой хмл:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<?xml version="1.0" encoding="utf-8"?>
<root>
	<Type1 name='Obj1'>
		<Prop1>a</Prop1>
		<Prop1>b</Prop1>
	</Type1>
	<Type2 name='Obj2'>
		<Prop1>c</Prop1>
		<Prop1>d</Prop1>
		<Type1 name='Obj2'>
			<Prop1>e</Prop1>
			<Prop1>f</Prop1>
		</Type1>
		<Type1>
			../../Type1[@name="Obj1"]
		</Type1>
	</Type2>
</root>


Надеюсь, правильно прописал путь к объекту <Type1 name='Obj1'>. Необходимо найти все значения узла <Prop1> для элементов Type1, вложенных в <Type2 name='Obj2'>. Значение XPath обозначает ссылку на другой элемент. XPath для извлечения использовал вот такой:
Код: plaintext
/root/Type2[@name="Obj2"]/Type1/Prop1
и конечно не работает. Вопрос - можно ли как-то это сделать в 1 выражении XPath?
...
Рейтинг: 0 / 0
xml - дерево или сеть?
    #37073486
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pol-d-nikНеобходимо найти все значения узла <Prop1> для элементов Type1, вложенных в <Type2 name='Obj2'>.
..........
XPath для извлечения использовал вот такой:
Код: plaintext
/root/Type2[@name="Obj2"]/Type1/Prop1
и конечно не работает.Этот запрос возвращает в точности то, что Вы написали
...
Рейтинг: 0 / 0
xml - дерево или сеть?
    #37073524
pol-d-nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Он возвращает элементы Prop со значениями f и e. Но все началось с того, чтобы обращаться с помощью ссылок, хранящихся в узлах, к другим узлам дерева. То есть в примере выше надо еще перейти по ссылке и получить значения f, e, a и b. Есть ли какие-нибудь мысли как это можно сделать в 1м XPath запросе? Буду благодарен за любую помощь...
...
Рейтинг: 0 / 0
xml - дерево или сеть?
    #37073636
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pol-d-nikВопрос - можно ли как-то это сделать в 1 выражении XPath?Приведу пример, пока ты еще какие-нибудь условия не придумал...
Например: черное, белое не называть; да, нет не говорить; и самое главное не танцевать...

Итак, XML:
Код: plaintext
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.
<root>
	<Type1 name="Obj1" id="110">
		<Prop1>a110</Prop1>
		<Prop1>b110</Prop1>
	</Type1>
	<Type1 name="Obj1" id="111">
		<Prop1>a111</Prop1>
		<Prop1>b111</Prop1>
	</Type1>
	<Type1 name="Obj1" id="112">
		<Prop1>a112</Prop1>
		<Prop1>b112</Prop1>
	</Type1>
	<Type2 name="Obj2">
		<Prop1>c</Prop1>
		<Prop1>d</Prop1>
		<Type1 name="Obj2">
			<Prop1>e</Prop1>
			<Prop1>f</Prop1>
		</Type1>
		<Type1>
			<TypeRef id="110"/>
		</Type1>
		<Type1>
			<TypeRef id="111"/>
		</Type1>
	</Type2>
</root>

XSL, c XPath в 1 строку:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" exclude-result-prefixes="xsl">
	<xsl:output method="xml" indent="yes"/>
	<xsl:template match="/">
		<root>
			<xsl:for-each select="for $x in /root/Type2[@name='Obj2']/Type1 return ($x/Prop1,/root/Type1[@id=$x/TypeRef/@id]/Prop1)/text()">
				<i>
					<xsl:copy-of select="."/>
				</i>
			</xsl:for-each>
		</root>
	</xsl:template>
</xsl:stylesheet>
PS. Что XPath 2.0 использовать нельзя в условии не было
...
Рейтинг: 0 / 0
xml - дерево или сеть?
    #37073691
pol-d-nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! Только вопрос - а какой смысл использовать именно XPath 2.0? Я написал вот так:

Код: plaintext
/root/Type2/Type1/Prop1/text() | //Type1[@id=/root/Type2/Type1/TypeRef/@id]/Prop1/text()

и вполне работает.

И минус в таком решении получается, что если в xml большая вложенность и ссылки могут быть на любом уровне, то надо прописывать возможность перехода по ссылке в любом месте, где она может быть. Длина запроса будет расти катастрофически. Но по-другому видимо не сделаешь...
...
Рейтинг: 0 / 0
xml - дерево или сеть?
    #37073730
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pol-d-nik,

Почитайте в описании DTD про аттрибуты типов ID и IDREF, а в описании XSLT --- про id() и key() . И будет вам счастье.
...
Рейтинг: 0 / 0
xml - дерево или сеть?
    #37073755
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pol-d-nikСпасибо! Только вопрос - а какой смысл использовать именно XPath 2.0? Я написал вот так:

Код: plaintext
/root/Type2/Type1/Prop1/text() | //Type1[@id=/root/Type2/Type1/TypeRef/@id]/Prop1/text()

и вполне работает.

И минус в таком решении получается, что если в xml большая вложенность и ссылки могут быть на любом уровне, то надо прописывать возможность перехода по ссылке в любом месте, где она может быть. Длина запроса будет расти катастрофически. Но по-другому видимо не сделаешь...А то что порядок нарушился, тя не беспокоит? Но... вообще не о том речь...
...
Рейтинг: 0 / 0
xml - дерево или сеть?
    #37073757
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще, ощути разницу с таким XML:
Код: plaintext
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.
<root>
	<Type1 name="Obj1" id="110">
		<Prop1>a110</Prop1>
		<Prop1>b110</Prop1>
	</Type1>
	<Type1 name="Obj1" id="111">
		<Prop1>a111</Prop1>
		<Prop1>b111</Prop1>
	</Type1>
	<Type1 name="Obj1" id="112">
		<Prop1>a112</Prop1>
		<Prop1>b112</Prop1>
	</Type1>
	<Type2 name="Obj2">
		<Prop1>c</Prop1>
		<Prop1>d</Prop1>
		<Type1 name="Obj2">
			<Prop1>e</Prop1>
			<Prop1>f</Prop1>
		</Type1>
		<Type1>
			<TypeRef id="110"/>
		</Type1>
		<Type1>
			<TypeRef id="110"/>
		</Type1>
	</Type2>
</root>
...
Рейтинг: 0 / 0
xml - дерево или сеть?
    #37073762
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refreg,

При правильном DTD,
//Type1[@id=чего-то_глобальное]
вместо
id(чего-то_глобальное)[name()='Type1']
является, мягко говоря, тормозом.

При неправильном DTD xsl:key c успехом заменяет id, только перевычисляется при каждом применении стайлшита к одному и тому же документу.
...
Рейтинг: 0 / 0
xml - дерево или сеть?
    #37073934
pol-d-nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, разницу ощутил...
...
Рейтинг: 0 / 0
xml - дерево или сеть?
    #37087482
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Случайно натолкнулся:
Языки описания и средства визуализации графов

И из этой статьи узнал, что для работы с графами придумана спецификация:
GraphML Specification
GraphML Primer
...
Рейтинг: 0 / 0
xml - дерево или сеть?
    #37088722
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregСлучайно натолкнулся:
Языки описания и средства визуализации графов
Gephi ещё посмотрите. Обязательно. Когда Щербак писал ту заметку, Gephi был ещё не так хорош, как сейчас, потому, вероятно, и не упомянут.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / xml - дерево или сеть?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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