Дерево каталогов
От: Ort США  
Дата: 14.01.02 11:02
Оценка:
Пожалуйста, помогите составить XML структуру для обычного дерева каталогов.

Имеется список каталогов, каждый из каталогов обязан имееть имя, путь, id а также может содержать в себе другой каталог. Я не соображу как в XML структуре показать что один объект может содержать другой объект такого же типа. И что задавать для каталогов у которых нет подкаталогов? Мой Вариант каталога AA с непустым подкаталогом BB и каталога СС без подкаталогов:

<folders_list>
<folder_object>
<folder_name>AA</folder_name>
<r_folder_path>/AA</r_folder_path>
<folder_id>1</folder_id>
<folder_object>
<folder_name>BB</folder_name>
<r_folder_path>/AA/BB</r_folder_path>
<folder_id>2</folder_id>
<folder_object>
</folder_object>
<folder_object>
<folder_name>СС</folder_name>
<r_folder_path>/AA/СС</r_folder_path>
<folder_id>3</folder_id>
<folder_object>
<folder_object></folder_object>
</folders_list>

Т.е. по сути дерево подкаталогов имеет вид:

<folder_object>
<folder_object>
<folder_object>
<folder_object>
</folder_object>
</folder_object>
</folder_object>
</folder_object>

и я не уверен что это правильно и потом будет легко парсировать.
Не нужно ли подкаталог обрамлять в специальный тег, типа:


<folder_object>
...
<subfolder_objects>
<folder_object>
...
</folder_object>
<folder_object>
...
</folder_object>
</subfolder_objects>
"По мне, уж лучше пей, да дело разумей"
Re: Дерево каталогов
От: Lexey Россия  
Дата: 14.01.02 13:16
Оценка:
Здравствуйте Ort, Вы писали:

Ort>Пожалуйста, помогите составить XML структуру для обычного дерева каталогов.


Ort>Имеется список каталогов, каждый из каталогов обязан имееть имя, путь, id а также может содержать в себе другой каталог. Я не соображу как в XML структуре показать что один объект может содержать другой объект такого же типа. И что задавать для каталогов у которых нет подкаталогов? Мой Вариант каталога AA с непустым подкаталогом BB и каталога СС без подкаталогов:


Ort><folders_list>

Ort> <folder_object>
Ort> <folder_name>AA</folder_name>
Ort> <r_folder_path>/AA</r_folder_path>
Ort> <folder_id>1</folder_id>
Ort> <folder_object>
Ort> <folder_name>BB</folder_name>
Ort> <r_folder_path>/AA/BB</r_folder_path>
Ort> <folder_id>2</folder_id>
Ort> <folder_object>
Ort> </folder_object>
Ort> <folder_object>
Ort> <folder_name>СС</folder_name>
Ort> <r_folder_path>/AA/СС</r_folder_path>
Ort> <folder_id>3</folder_id>
Ort> <folder_object>
Ort> <folder_object></folder_object>
Ort></folders_list>

Зачем такие извраты? Все можно сделать гораздо проще.
<folders>
<folder name="AA" path="/AA" id="1">
<folder name="BB" path="/AA/BB" id="2"/>
<folder>
<folder name="CC" path="/CC" id="3"/>
</folders>
Re[2]: Дерево каталогов
От: Ort США  
Дата: 14.01.02 13:49
Оценка:
L>Зачем такие извраты? Все можно сделать гораздо проще.
L><folders>
L> <folder name="AA" path="/AA" id="1">
L> <folder name="BB" path="/AA/BB" id="2"/>
L> <folder>
L> <folder name="CC" path="/CC" id="3"/>
L></folders>

Интересно. Т.е. рекомендуете все прописывать через аттрибуты. В 4 строчке только пропущен закрывающий символ "/" кажется.

Я уже подумывал о таком варианте, но как в этом случае будет выглядеть запрос через
XPath, который выбирает все подкаталоги заданного каталога по заданному пути path?
Чувствую, что он должен быть совсем простым.
"По мне, уж лучше пей, да дело разумей"
Re[3]: Дерево каталогов
От: Lexey Россия  
Дата: 14.01.02 14:15
Оценка:
Здравствуйте Ort, Вы писали:

L>>Зачем такие извраты? Все можно сделать гораздо проще.

L>><folders>
L>> <folder name="AA" path="/AA" id="1">
L>> <folder name="BB" path="/AA/BB" id="2"/>
L>> <folder>
L>> <folder name="CC" path="/CC" id="3"/>
L>></folders>

Ort>Интересно. Т.е. рекомендуете все прописывать через аттрибуты.


Так проще. Не нужно потом отфильтровывать аттрибуты (они ведь по сути именно аттрибуты, а не потомки ноды).

>В 4 строчке только пропущен закрывающий символ "/" кажется.

Да, есть такая буква.

Ort>Я уже подумывал о таком варианте, но как в этом случае будет выглядеть запрос через

Ort>XPath, который выбирает все подкаталоги заданного каталога по заданному пути path?

Что-то типа select="folder[@path='нужный мне путь']", а потом перебор потомков найденного узла.
Re: Дерево каталогов
От: Paranorm Украина www.astakhov.net
Дата: 18.01.02 16:54
Оценка:
А чем не подходит следующий вариант?

<folders_list>

<folder_object name="AA" id="1">
<folder_object name="BB" id="2"/>
<folder_object name="CC" id="3">
<folder_object name="DD" id="4"/>
<folder_object name="EE" id="5"/>
</folder_object>
</folder_object>

<folder_object name="FF" id="6"/>
<folder_object name="GG" id="7"/>
</folders_list>

То есть элементы folder_object, вложенные друг в друга, как это и бывает с обычными папками.

И с XPath не должно быть проблем.
Или я неправильно понял задачу?
Re[2]: Дерево каталогов
От: Ort США  
Дата: 21.01.02 08:25
Оценка:
Да нет, все нормально, так и было задумано я уже все сделал.
Просто я не был тогда уверен, что XPath отработает.

Я все таки решил оставить свой вариант, но слегка его скорректировав:
<folders>
<folder_object>
<folder_name>AA</folder_name>
<r_folder_path>/AA</r_folder_path>
<folder_id>1</folder_id>
<folder_object>
<folder_name>BB</folder_name>
<r_folder_path>/AA/BB</r_folder_path>
<folder_id>2</folder_id>
</folder_object>
</folder_object>
...
</folders>

Преимущество такого подхода, в отличии от подхода все определить в аттрибутах, заключается в том, что я могу одним выражением XPath
сразу вытащить все мне необходимое, а именно, интересующий меня фолдер плюс все его субфолдеры. В качестве водного параметра должен служить r_folder_path (как уникальный для каждого фолдера) или folder_id. Тогда Xpath выглядит так:
XPath = "//folder_object[folder_path = '...']";
"По мне, уж лучше пей, да дело разумей"
Re[3]: Дерево каталогов
От: Аноним  
Дата: 23.01.02 15:23
Оценка:
Здравствуйте Ort, Вы писали:

Ort>Преимущество такого подхода, в отличии от подхода все определить в аттрибутах, заключается в том, что я могу одним выражением XPath

Ort>сразу вытащить все мне необходимое, а именно, интересующий меня фолдер плюс все его субфолдеры. В качестве водного параметра должен служить r_folder_path (как уникальный для каждого фолдера) или folder_id. Тогда Xpath выглядит так:
Ort>XPath = "//folder_object[folder_path = '...']";

или XPath = "//folder_object[@folder_path = '...']";
для сучая с атрибутом
Re[4]: Дерево каталогов
От: Ort США  
Дата: 23.01.02 15:32
Оценка:
А>или XPath = "//folder_object[@folder_path = '...']";
А>для сучая с атрибутом

Это не совсем так. Субфолдеры имеют другой folder_path, отличный по значению
от фолдера родителя. Именно поэтому субфолдеры при линейной иерархии не будут
выбраны. Именно поэтому я и решил организовать гранение субфолдеров как:
<folder_object>
<folder_name>
</folder_name>
<folder_path>
</folder_path>
<folder_object>
Этот субфолдер будет вытащен XPath автоматически при совпадении folder_path родителя заданному значению, даже если его folder_path другой
</folder_object>
</folder_object>
"По мне, уж лучше пей, да дело разумей"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.