![]() |
XML-форумы |
Обсуждение XML и связанных с ним технологий |
Автор | Сообщение | |
---|---|---|
kite Новичок Зарегистрирован: 20.01.2003 Сообщения: 6 Откуда: Москва |
[2945]
Пн Янв 20, 2003 00:00
Всем привет!
ссылка на другой документ Я тут слегка запутался... А проблема, вроде бы простая. Есть два конфигурационных файла: menu.xml и actions.xml. В первом определена структура меню приложения, в таком духе: <MENU name="mnuHelp" title="Help"> <MENU-ITEM name="itemHelpHome" action="HelpHome" title="Home".../> </menu> Во втором - "команды", более абстрактно: <ACTION id="HelpHome"... /> Как сделать так, чтобы атрибут "action" из первого документа ссылался на элемент с тем же id из второго документа? Через XLink или можно как-то проще? (PS: для обоих документов имеются DTD). |
|
olpa Любитель Зарегистрирован: 23.04.2002 Сообщения: 981 Откуда: Санкт-Петербург ![]() |
[2946]
Пн Янв 20, 2003 00:00
В XML поддерживаются ID/IDREF-ссылки внутри документа, для ссылок между документами надо использовать надстройки, например, XLink.
Re: ссылка на другой документ Можно ещё объединить все документы в один примерно таким способом: Код:
(Знак "?" - на самом деле амперсанд). |
|
kite Новичок Зарегистрирован: 20.01.2003 Сообщения: 6 Откуда: Москва |
[2947]
Вт Янв 21, 2003 00:00
Спасибо, я понял.
Re: ссылка на другой документ Интересно, а кроме XLink какие другие надстройки можно было бы для этого использовать? |
|
taler Аспирант ![]() Зарегистрирован: 28.04.2002 Сообщения: 113 |
[2948]
Вт Янв 21, 2003 00:00
Заданный вопрос относится к супер-интересным, но, вероятно, пока еще нерешенным.
Re: ссылка на другой документ 1. Часть постановки с длинным списком дебатов см., например, здесь (Nov, 2001) http://weblogs.userland.com/eclectic/stories/storyReader$291 2. пока такие межсвязи, имхо, обычно (раз)решают "на уровне приложения" - прямым кодом (напр., XSLT) или, скажем, отдельным словарем связей или синонимов; однако в чисто вашей проблеме последний, вероятно, оказался бы неким вырожденным и потому ненужным, типа списка: [ file menu "menu.xml" file command "command.xml" menu..action SYN command..action ..] etc. |
|
kite Новичок Зарегистрирован: 20.01.2003 Сообщения: 6 Откуда: Москва |
[2949]
Вт Янв 21, 2003 00:00
Ну да, в голову приходили мысли насчет XSLT: можно было бы взять actions.xml и с помощью двух разных стилей сгенерировать на его основе menu.xml и, скажем, toolbar.xml. Сделать это достаточно один раз при инсталляции приложения. Пожалуй, для такой скромной задачи как конфигурация программы это стрельба из пушки по воробьям. Хотя, позволяет попутно решить проблему локализации -- исходя из установок локала, xsl будет делать заголовки меню на нужном языке.
Re: ссылка на другой документ |
|
olpa Любитель Зарегистрирован: 23.04.2002 Сообщения: 981 Откуда: Санкт-Петербург ![]() |
[2950]
Вт Янв 21, 2003 00:00
Re: ссылка на другой документ
Например, Hytime Links, которые были в эпоху SGML; было ещё что-то. На сегодня, для создания ссылок в XML, XLInk - лучший выбор. В данном примере, XSLT - это тоже неплохо. |
|
kite Новичок Зарегистрирован: 20.01.2003 Сообщения: 6 Откуда: Москва |
[2951]
Ср Янв 22, 2003 00:00
Я как раз сижу, пробую вариант с XSLT -- ничего, вроде получается.
Re: ссылка на другой документ Правда, пока не удается придумать изящное решение для локализации. А именно: каким способом xsl может узнавать, для какого локала ему генерировать заголовки. Не делать же для каждого языка свой XSL. Наверное, надо из программы добавлять в XSL новый узел, например, такой: <xsl:variable name="LOCALE">ru_RU</xsl:variable>, а потом использовать переменную $LOCALE в инструкциях обработки? Не подскажете, есть способы для передачи параметров XSL-файлу (вроде, где-то попадалась инструкция xsl:param)? |
|
taler Аспирант ![]() Зарегистрирован: 28.04.2002 Сообщения: 113 |
[2952]
Ср Янв 22, 2003 00:00
Re: ссылка на другой документ Инструкция-то такая (xsl:param) действительно имеется, но с т.з. XSLT она "вроде обычной переменной" - т.е. XSLT (как язык) может ее значение лишь обрабатывать, а как оно самое туда кладется - иногда вопрос, с которым вам придется чуть-чуть самому разобраться (передача данных "извне внутрь" xsl:param - дело вашего процессора, т.е. procerssor-dependent). Но, поскольку вы уже умеете, как вы говорите, "из программы добавлять в XSL новый узел..", то эквивалентно для вас не должно быть проблем и "модифицировать старый" (узел xsl:param). К примеру, для msxml это делается через vbscript/jscript; для процессоров с командной строки - по соглашению о передаче параметров, для других сред - еще как-то по-ихнему... |
|
olpa Любитель Зарегистрирован: 23.04.2002 Сообщения: 981 Откуда: Санкт-Петербург ![]() |
[2953]
Ср Янв 22, 2003 00:00
По поводу многоязычности в XSLT: посмотри на http://xmlhack.ru/articles/02/11/09/langsubst.html.
Re: ссылка на другой документ |
|
kite Новичок Зарегистрирован: 20.01.2003 Сообщения: 6 Откуда: Москва |
[2954]
Ср Янв 22, 2003 00:00
Re: ссылка на другой документ
Ясно. Наверное, все-таки правильнее с т.зр. "document-driven" идеологии не вмешиваться в содержание документа. Пускай лучше приложение при первом старте генерирует XML-документ с установками, среди которых может быть: <locale>ru_RU</locale>, а XSLT потом к нему обращается. |
|
taler Аспирант ![]() Зарегистрирован: 28.04.2002 Сообщения: 113 |
[2955]
Ср Янв 22, 2003 00:00
это уж как виднее: на самом деле ведь "подстановка xslt-параметров" - дело run-time, к примеру, для msxml формально она в любом случае выполняется уже "в памяти", через DOM-дерево узлов, без какого-либо влияния на исходный XSLT-документ;
Re: ссылка на другой документ И как лучше - через файлы или напрямую через память - все индивидуально, no recipe ![]() |
|
kite Новичок Зарегистрирован: 20.01.2003 Сообщения: 6 Откуда: Москва |
[2956]
Чт Янв 23, 2003 00:00
Получилось! Всем, кто откликнулся, огромное спасибо.
Re: ссылка на другой документ Схема такая: XSLT берет actions.xml и делает menu.xml. При этом используется конфигурационный файл, где прописано, среди прочего: <PARAM name="language">ru</PARAM> или другой нужный язык. В отдельном каталоге лежат файлы под названием ru.xml, en.xml и под., которые выглядят примерно так: <RES id="File">Файл</RES> <RES id="Window">Окно</RES> Атрибуты id совпадают с id "команд" из файла actions.xml. Таким образом, решается вопрос с локализацией. Приложение отдыхает! |
Страница 1 из 1 |