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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.