LINUX.ORG.RU

Всегда ли оправдан XSLT для трансформаций из XML в XML?

 ,


0

1

Есть задача преобразования XML, описываемых большими и сложными схемами. Суммарное количество строк во всех файлах (около 500) одной схемы больше 20 000. Другая схема заметно покороче, но там тоже около 4000 строк.

Это именно размер описаний, а не самих файлов.

Нужно конвертировать из одного в другое и наоборот. Сейчас автоматически сгенерированные xslt занимают около 15 000 строк кода. И их работа происходит с ошибками, результат зачастую не проходит даже валидацию по схеме.

Собственно потому и возник сабжевый вопрос. Есть идея явно построить DOM для исходного документа, а потом по нему генерировать заведомо валидные документы. Однако, де-факто, при этом будет повторена заметная часть функциональности xslt-процессора.

★★★★★

Последнее исправление: anonymous_incognito (всего исправлений: 1)

И их работа происходит с ошибками, результат зачастую не проходит даже валидацию по схеме.

Проблема ли в XSLT это?

есть идея явно построить DOM для исходного документа, а потом

А не проще тогда сразу сделать правильный XSLT?

anonymous
()

На каком языке пишете? Не на Java? Если на ней и вы не проч отъесть ресурсов DOM'ом, то почему бы не посмотреть и в сторону JAXB? В поставке с jre или jdk (уже не помню, честно говоря) есть удобные утилиты schemagen и xjc. Вторая позволяет на основе существующей схемы сгенерировать JAXB классы для мапинга на xml на основе xsd.
А чем вам так xslt не угодил?

Insomnium ★★★★
()
Последнее исправление: Insomnium (всего исправлений: 1)

Я не спец по XML, но считал, что xslt менее ресурсоемки, чем полностью в памяти строить дом. Если у тебя ее конечно несколько десятков гигабайт, тогда попробуй. Но я б не рискнул с такими объемами возиться

marvin_yorke ★★★
()

Поддержу мнение первого комментатора ITT: то, что проверку не проходит и ошибки кидает - это сугубо проблемы криворуко созданного XSLT. Уверен, что эти ваши 15кстрок после ревью и рефактора (с применение JS - опц.) сократят код раз в 5, если не больша, ну и качество преобразования улучшится.

PS

автоматически сгенерированные xslt

Все беды - от метапрограммирования в любом его проявлении :)

d_Artagnan ★★
()

увеличиваю предложение починить генератор xslt

stevejobs ★★★★☆
()
Ответ на: комментарий от d_Artagnan

Все беды - от метапрограммирования в любом его проявлении

Я всегда знал, что во всём виноват дедушка Кольт, а не те утырки, которые стреляют куда ни попадя! :)

yyk ★★★★★
()

Случаем не Altova MapForce ли использовалось для генерации XSLT?

Если да то это оно нагадило.

И да, чини генератор

NixU
()

Ну вообще-то XSLT документ не сохраняет, а поточно обрабатывает (правда есть xsl:variable). Т.е. построение DOM может отожрать сильно больше памяти.

Все беды - от метапрограммирования в любом его проявлении :)

+1

snizovtsev ★★★★★
()
Ответ на: комментарий от Insomnium

На каком языке пишете?

На C#

Не на Java? Если на ней и вы не проч отъесть ресурсов DOM'ом, то почему бы не посмотреть и в сторону JAXB? В поставке с jre или jdk (уже не помню, честно говоря) есть удобные утилиты schemagen и xjc. Вторая позволяет на основе существующей схемы сгенерировать JAXB классы для мапинга на xml на основе xsd.

Насколько это сложно?

А чем вам так xslt не угодил?

Не столько xslt, сколько результат генерации

anonymous_incognito ★★★★★
() автор топика
Ответ на: комментарий от NixU

Случаем не Altova MapForce ли использовалось для генерации XSLT?

Оно.

И да, чини генератор

Генерировал вообще не я. Я на эту проблему обратил внимание, потому что задолбали постоянные глюки сгенерированного xslt, хотя его вроде и правят даже.

Какие есть хорошие генераторы?

anonymous_incognito ★★★★★
() автор топика
Ответ на: комментарий от anonymous_incognito

Я уверен, что у вас есть подобный инструментарий. По поводу сложности - всё предельно просто: указываете путь до схемы и output файл. Класс будет сгенерирован со всеми необходимыми аннотациями и прочим стафом.

Insomnium ★★★★
()

Есть идея явно построить DOM для исходного документа, а потом по нему генерировать заведомо валидные документы.

я как-то делал преобразование xml1->s-exp1->s-exp2->xml2 в моём случае это оказалось сильно проще и быстрее, но там структура была достаточно простой

lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

делал преобразование xml1->s-exp1->s-exp2->xml2
в моём случае это оказалось сильно проще и быстрее

Если не владеешь XSLT, то, конечно, будет быстрее.

archimag ★★★
()
Ответ на: комментарий от anonymous_incognito

Ничего не нашли вменяемого, Если более менее сложный маппинг приходится его пилить напильником и только после QA.

Как вариант - писать свои фун-ии на чистом XSLT (альтова позволяет подключать его как либу) и загонять туда куски (или даже полностью) схемы. Но это теория, еще не пробывали, в остальных случаях костылинг.

NixU
()
Последнее исправление: NixU (всего исправлений: 1)
Ответ на: комментарий от archimag

Если не владеешь XSLT, то, конечно, будет быстрее.

это и был мой случай

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