LINUX.ORG.RU
ФорумTalks

[жабоборчество] Лисперы, нужна ваша помощь!


0

0
Всем привет!

Возникла на работе задачка. Есть огромное количество зазипованного XML (документы OpenOffice), тысячи их. Надо пробежаться по всей куче и подправить XML в соответствии с правилами. Правила выглядят так:

для_файлов <путь>/docs/**/naklad/*.odt:
удалить_ноду /abc/def/gh[@zxc=$var1]
вставить_ноду ... перед_нодой ...
установить_значение /qwe/rty/iop/@asd = $var2

и так далее, переменные $var1 и $var2 задаются извне.

Я просто интуитивно чую, что это задача для LISP'а. Да и не столько интуитивно, сколько объективно, смотрите: обработка нестандартных wildcard'ов (**), специализированный язык правил - типичный же DSL! Плюс обработка текстов (XML).

У нас, правда, всё пишут на Java, жабокодеры получают кучу бабок ни за что и понтуются, достали уже... есть мысль утереть им нос :) Начальство вменяемое, если им продемонстрировать эффективное решение, то пойдут навстречу.

Времени дали до понедельника, половину выходных потратил на девушку, время поджимает, надеюсь на помощь коллективного ЛОРовского разума :) Я в лиспе сравнительно новичок, подскажите, куда копать вообще? Есть один знакомый лисп-гуру из Англии, попробую его попросить. Но - одна голова хорошо, а десять лучше! Спасибо :)
добавить ноду/удалить ноду/установить значение - может лучше XSLT использовать? что такое **? может там просто find справится?
cobold ★★★★★
()
Задача, ортогональная свойствам языка совершенно, имхо.

> специализированный язык правил


Ну да, есть реализации Xpath для лиспов.

Знающий хакер сделает это на shell + XSLT и пойдёт
пить пиво, а ты будешь в своих скобках ковыряться, хах :)
Sphinx ★★☆☆
()
man sed

Ну и xslt, как уже говорили.
Igron ★★★★★
()
> Форум 1
> Комментарии 0


Кука, ты?
Sphinx ★★☆☆
()
Не язык выбирает задачу, а задача выбирает язык...
Gregon
()
Всем спасибо! XSLT мне кажется тут немножко не то... всё-таки семантика другая. XSLT - язык шаблонов, он для преобразования между сильно различающимися структурами документов. Плюс жутко медленный, даже на Си.

И ещё, меня, кажется, недопоняли, правила даются извне в текстовом виде, как я написал выше:

FOR <files>:
    INSERT ... AFTER /node/...
    UPDATE /node/.../@attr
    DELETE /node

то есть это такой типа SQL для XML, с использованием XPath. То есть по-любому надо писать парсер для этого DSL, а потом либо вручную его обрабатывать, либо транслировать в XSLT?

И да, шелла там нету, и никаких sed и find никто не даст, это не UNIX, я в первую очередь подумал про find, bash и так далее...
Что обидно, джавщики напыщенно заявили, что всё это сделают на pure Java за пару часов... значит, LISP сюда не годится? обидно :(
Ignatik
() автор топика
Ответ на: комментарий от cobold
> добавить ноду/удалить ноду/установить значение - может лучше XSLT использовать?

см. выше, XSLT немножко из пушки по воробьям ИМХО

> что такое **? может там просто find справится?


** - это "любое количество директорий в иерархии", это из Ant'а пришло (аналог make для Java), там используется оно

> может там просто find справится?


может, и справится, но там нету find'а :(
Ignatik
() автор топика
Ответ на: комментарий от Sphinx
> Задача, ортогональная свойствам языка совершенно, имхо.

Поясните, почему? Совершенно искренне интересуюсь. Я считал, что LISP очень универсальный и мультипарадигменный язык, разве не так?

> Ну да, есть реализации Xpath для лиспов.


Имя, сестра!^W^WСсылку, брат :)

> Знающий хакер сделает это на shell + XSLT и пойдёт


там нету shell :( и XSLT не то совсем! потом, ещё надо получить XSLT из задаваемых правил, а они каждый раз разные, и известны только в рантайме!

> а ты будешь в своих скобках ковыряться, хах :)


Вообще-то LISP как раз хороший инструмент для быстрой разработки, мы ещё посмотрим, кто кого :)
Ignatik
() автор топика
Ответ на: комментарий от bioreactor
> прозреваю банальный троллинг

Лучше б подсказали чего, а? чем прозревать всякое :) Вы ж вроде лиспом занимались как раз...
Вообще, как известно, лучший способ выведать что-то у опенсоурс сообщества - начать троллинг на тему :) хотя мне совершенно не до этого сейчас
Ignatik
() автор топика
Купи программерам вашим пива и пусть они на джаве напишут всё.
Legioner ★★★★★
()
Ответ на: комментарий от Ignatik
> И да, шелла там нету, и никаких sed и find никто не даст, это не UNIX, я в первую очередь подумал про find, bash и так далее...
так может проще поставить туда шелл? а то потом окажется, что лиспа там тоже нет, и вы будете искать его реализацию на джаве (так еще что-то помимо нее есть?)
val-amart ★★★★★
()

[лисподрочерство]Java, нужна твоя помощь.

Почему бы не реализовать требуемый функционал на знакомом языке?
Camel ★★★★★
()
Ответ на: комментарий от Ignatik
>Поясните, почему? Совершенно искренне интересуюсь. Я считал, что LISP очень универсальный и мультипарадигменный язык, разве не так?

потому что задача тривиально решается на любом языке, имеющем библиотеку для ковыряния xml

>> Ну да, есть реализации Xpath для лиспов. >Имя, сестра!^W^WСсылку, брат :)

http://common-lisp.net/project/cxml/ в принципе лоровское комьюнити довольно миролюбиво, потому эту ссылку тебе могут повторить еще пару раз, если и в этот раз незаметишь, анонимусов то, к сожалению, выгнали

cvb
()
Ответ на: комментарий от cvb
>потому что задача тривиально решается на любом языке, имеющем библиотеку для ковыряния xml

Тогда зачем ваши лиспы нужны? Все задачи решаются банально на любом языке, главное найти соответствующий компонент^W библиотеку и бросить на TForm1

Karapuz ★★★★★
()
Ответ на: комментарий от Karapuz
>Тогда зачем ваши лиспы нужны? Все задачи решаются банально на любом языке, главное найти соответствующий компонент^W библиотеку и бросить на TForm1

вот представь, придешь ты в приличное общество со своим питоном, да на тебя ниодна приличная девушка даже не взглянет, а так упомянешь невзначай, что пишешь на лиспе и у всех сразу сложится верное впечатление, что разговаривают они с образованным, приличным человеком, а всякие питоны и прочие джавы, это как в кругу любителей классической литературы хвастаться прочтением какой-нибудь Дарьи Донцовы

cvb
()
Ответ на: комментарий от Karapuz
> Все задачи решаются банально на любом языке, главное найти соответствующий компонент

не все. есть пласт сложных задач, для которых "соответсвуюшщие компоненты" не написали, а мощности "любых других языков" банально не хватает.

Ну и стоит отметить, что многие стандартные задачи решаются в лиспе быстрее - сравни за сколько (по времени) и сколько людей писало perl regexp, и сколько и кем писался соответствующая библиотека под cl - cl-pccre.

paranonymous
()
> Я просто интуитивно чую, что это задача для LISP'а.

А я интуитивно чую, что эта задача для брейнфака. Потому что я брейнфака не знаю.

kkw
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.