|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
Наиболее быстрый маппинг между XML(FB2) форматом электронной книги. Как? Сама спецификация описана здесь http://www.fictionbook.org/index.php/Документы Образец книжки я - приаттачиваю. Из того что я разработал нет пока что нифига. Только вот такой кусок. Код: java 1. 2. 3. 4. 5. 6. 7. 8.
Дальнейшее - под вопросом. Давно я этим XML не занимался. Последний раз использовал Apache Digester и Stax ( в сыром виде. Тоесть в виде хендлера событий. Оба способа кажутся мне не очень удобными с точки зрения внесения изменений. Некто Баелдунг предлагает аж 8(!) способов замапить XML на объекты. https://www.baeldung.com/java-xml Сомнительно что я успею опробовать все. Ищу нечто очень быстрое наподобие SAX/Stax но более удобное в разработке. Есть надежда что JAXB мне подойдет. Но очень не хотелось-бы иметь под капотом XMLDocument. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 21:02 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
maytonНаиболее быстрый маппинг по какому критерию? временя выполнения, расход памяти или ...уяк-...уяк и в продакшн :) maytonНекто Баелдунг предлагает аж 8 бери любое из того, что больше нравится/подходит. так-то на github и готовые парсеры есть, но качество под вопросом. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 21:15 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
chpashamaytonНаиболее быстрый маппинг по какому критерию? временя выполнения, расход памяти или ...уяк-...уяк и в продакшн :) По времени выполнения. Продакшена нет. Это - песочница. Но если она будет грузить документы 3 суток - нахер-нахер ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 21:18 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
chpashamaytonНекто Баелдунг предлагает аж 8 бери любое из того, что больше нравится/подходит. так-то на github и готовые парсеры есть, но качество под вопросом. Взял JAXB пока. Напрягает то что в ебуках встречаются namespaces. С ними - вечно какие-то неоднозначности. Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 21:20 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
Почитал про XStream http://x-stream.github.io/index.html В целом понравилось. Быстрая. Повисли вопросы? Маппинг в специфичные имена тегов? Как? Код: xml 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 00:36 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
maytonПродакшена нет. Это - песочница. Но если она будет грузить документы 3 суток - нахер-нахер Поскольку размер любого файла FB2 не превышает нескольких МБ, то при любом способе будет загружаться не более чем за секунды и расходовать не более десятков мегабайт памяти. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 09:36 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
mayton, там есть достаточная документация. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 09:37 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
Partisan MmaytonПродакшена нет. Это - песочница. Но если она будет грузить документы 3 суток - нахер-нахер Поскольку размер любого файла FB2 не превышает нескольких МБ, то при любом способе будет загружаться не более чем за секунды и расходовать не более десятков мегабайт памяти. Да мне не жалко памяти. 270 Гигов zip-архивов. Просто хочется чтоб процессинг прошёл быстрее. Возможно будут читать в несколько потоков. За вчерашний день я нарисовал для себя шпаргалку по 8 XML-технологиям. Опробовал 4 штуки. Пока в фаворе остается Stax. Возможно на нем и будут всё делать. В простейшем случае буду игнорировать неизвестные теги. Индексировать собственно есть интерес только такие поля как Автор, Название, и собственно тело текста. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 10:27 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
Если кратко, то для разбора XML используются библиотеки, работающие с DOM, или с потоком данных (stream parser) или вызов XSLT скрипта. Для крупного XML файла, состоящего из большого количества записей простой структуры, больше подходят stream parser-ы,которые делятся на StAX и SAX (спецификации). StAX несколько проще в использовании. Можно рассмотреть библиотеку FasterXML Jackson, поддерживающую разные методы работы с XML (и JSON), в том числе работу как StAX-parser (которая реализована дополнительной библиотекой Woodstox, к которой обращается Jackson). ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 10:48 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
Partisan M, нет нет. С DOM я не хочу связываться. Я с ним имел дело еще в 2000х. Это овер-проектирование для меня. FasterXML Jackson Вот это хорошая тема. Почитаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 10:50 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
mayton, XFire тоже подойдёт. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 10:50 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
maytonНаиболее быстрый маппинг между XML(FB2) форматом электронной книги. Как? Перебирая мапперы. То есть когда хочется точно взять инфу из xml, то возникают нюансы, которые разные мапперы по разному обходят. Ну и надо выбрать, что там больше нравится в плане точности отображения. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 11:26 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
Чтоб быть честным я попробую реализовать хотя-бы 2 streamable маппера за фасадом своего приложения. И сделаю минимум 2 бенчмарка. Будет StaxFb2Mapper + еще один неизвестный из серии таких-же быстрых. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 12:09 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
maytonЧтоб быть честным я попробую реализовать хотя-бы 2 streamable маппера за фасадом своего приложения. И сделаю минимум 2 бенчмарка. Будет StaxFb2Mapper + еще один неизвестный из серии таких-же быстрых. сделай фасад, выложи проект, расшарь его нам) мы допишем, перехватим твою идею и продадим! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 12:13 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
Это будет прелестно. Я не против. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 12:21 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
Хм... мне еще и быстрый JSon конвертер понадобится. Обычно я юзал гугловый GSon и какой-то fasterxml.jackson. Но быстрые он или нет - хрен ево знает. Поищу бенчмарки. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 16:18 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
maytonНо быстрые он или нет - хрен ево знает там примерно такая же ситуация. чем более низкоуровнево, тем быстрее. чем более удобно и декларативно, тем медленнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 17:29 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
Вот буквально 5 минут назад запилил. На Джаксоне. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
В Кибану должный пойти put-реквесты в таком формате HTTP. Там соотв. формат полей - произвольный. Код: sql 1. 2. 3. 4. 5. 6.
Вот эта штука movies - это по идее название текстового индекса. Его я должен по протоколу сначала создать отдельной командой Кибаны. Еще не придумал как это всё завязать в последовательность действий. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 17:47 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
Ну там не мувис понятное дело а books. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 18:00 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
mayton270 Гигов zip-архивов - если не сложно, поделитесь ссылочкой) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 18:33 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
Рутрекер. В поиске: Флибуста. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 18:44 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
Кажется вот этот линк https://rutracker.org/forum/viewtopic.php?t=5462398 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2019, 00:07 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
maytonВот буквально 5 минут назад запилил. На Джаксоне. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Криво. В смысле нормальная последовательность такая: FB2 -> XmlToJava -> POJO -> JavaToJson И обратно через тот же POJO можно. То есть один дата-объект и две конвертации, обе заточены (замаплены) на один набор классов. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2019, 13:29 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
Да. Промежуточная фаза Java-object мне 100% нужна. Возможно надо будет втолкнуть объект Книга не в Elastic-endpoint а в какую-нибудь SQLite. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2019, 13:31 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
не проще взять xml schema fb2 формат и через мавен/gradle плагин нагенерить по ней модельки ? или могут быть нестандартные теги ? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2019, 13:36 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
lleming, это мысль. Дайте больше ключевых слов. Как называется этот плагин которые сделат мне модельки. И потом по ссылке выше http://www.fictionbook.org/index.php/Документы представлен аж целый список форматов. Тоесть я буду озабочен новой задачей. Детектировать собственно версию документа. Это как? Применять к документу все модели последовательно? Пока не возникнет Exception? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2019, 13:44 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
Чорт бы подрал этот Стакс. Говно-говняцкое вышло. Я уже думаю что идея использовать Dom не так плоха. По крайней мере рутину пока отодвину. Останется перформанс но это можно потом довести. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2019, 18:25 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
maytonЯ уже думаю что идея использовать Dom не так плоха. Особенно если проект для поигрушек. JAXB содержит в себе инструменты для генерации классов по XSD. Другие либы тоже иногда так могут. И для пет-прожектов на производительность обычно плевать, поэтому генерим классы и по быстрому получаем результат. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2019, 12:26 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
maytonДетектировать собственно версию документа. Это как? Это значит прочитать в файле некий ключ. Обычное чтение из потока с этим легко справится. Быстро и несложно. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2019, 12:27 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
alex55555maytonЯ уже думаю что идея использовать Dom не так плоха. Особенно если проект для поигрушек. JAXB содержит в себе инструменты для генерации классов по XSD. Другие либы тоже иногда так могут. И для пет-прожектов на производительность обычно плевать, поэтому генерим классы и по быстрому получаем результат. Это мысль. Я попробую с помощью тулза xjc нагенерить API. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2019, 19:45 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
Хм... я чудесным образом ее снес или сломал. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2019, 23:01 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
И чего это они через пень-колоду... Через 2 уровня симлинков протащили. Странный вариант поставлять продукт. Ну ладно. Вобщем JDK какая-то урезанная. Что-то есть. Чего-то нет. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2019, 23:17 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
Двенадцатка такая-же коцаная. Вобщем приблизительное решение моей беды описано здесь https://www.jesperdj.com/2018/09/30/jaxb-on-java-9-10-11-and-beyond/ Всё пошел спать. Всем спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2019, 00:35 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
могу ошибаться но вроде начиная с 9 версии всякую аля jee хрень выпилили из jdk ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2019, 10:41 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
По самой первой ссылке в начале топика можно качнуть 4 файла. Код: java 1. 2. 3. 4.
Щас я временно на другой конфигурации. Win10+JDK8. Пока - неудача. Три файла сгенерировали варнинг локации. И один - что-то непонятно. Надо разбираться. Скрипт Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Лог. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
Успешно отработал только справочник жанров (FictionBookGenres). Был сгенерировано 2 сущности. Все остально проигнорировано. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2019, 10:47 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
Да. Спул java -version попал в поток ошибок. Код: java 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2019, 10:48 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
maytonУспешно отработал только справочник жанров (FictionBookGenres). Был сгенерировано 2 сущности. Все остально проигнорировано. Успешны все, кроме первой схемы. Видимо в последних двух какие-то специфические фичи объявлены, не мапятся на классы. А в первой схеме два разных элемента body - схема некошерная. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2019, 11:57 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
А в чем успех если ничего не сгенерировано? Утилита молча отработала. Выхода нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2019, 12:18 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
Хм... по идее FictionBook это родительский документ. Все остальные в него включены. Наверное правильный путь - это собрать его. Код: xml 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2019, 18:14 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
Выкинул 99% контента из главного документа. Оставил только теги stylesheet, binary. Работает. ДжаксБи сгенерил мне сущность FictionBook и справочник GenreType. Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
Дальнейше направление мне ясно. Такими мелкики шажками можно добить этот Fb2 mapper. Вот только не хочется залипнуть на неделю. Кто знаток jaxb и кто возьмётся пофиксить эту рутину? Буду респектовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2019, 18:30 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
вроде пару мест всего нужно пофиксить, надеюсь идея понятна Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2019, 18:55 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
З.Ы. по приатаченным схемам классы генерятся, саму де-сериализацию уже не проверял ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2019, 18:57 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
chpasha , спасибо большое. Вот этот биндинг файл мне был и нужен. А сборка проекта у меня на основе градла. Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
Поэтму я пока оставлю свой баш скриптик. Код: java 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2019, 19:04 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
maytonА в чем успех если ничего не сгенерировано? В отсутствии ошибок. Надо смотреть, что там внутри и как оно вяжется с основной схемой. Далее надо понять, поддерживает ли генератор такой тип связей. В общем надо подробно разбираться со схемой и JAXB, убить часик-другой. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2019, 14:56 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
ИМХО гораздо проще работать с INPX файлом коллекции, а не парсить fb2 файлы, если конечно, работа с fb2 не является самоцелбю. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2019, 20:31 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
kolchanovИМХО гораздо проще работать с INPX файлом коллекции, а не парсить fb2 файлы, если конечно, работа с fb2 не является самоцелбю. По INPX я ничего релевантного не нахожу. Можете прояснить этот термин? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2019, 21:45 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
maytonkolchanovИМХО гораздо проще работать с INPX файлом коллекции, а не парсить fb2 файлы, если конечно, работа с fb2 не является самоцелбю. По INPX я ничего релевантного не нахожу. Можете прояснить этот термин? - погуглил за тебя: INPX ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2019, 22:01 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
Kachalovmaytonпропущено... По INPX я ничего релевантного не нахожу. Можете прояснить этот термин? - погуглил за тебя: INPX Дружище. Я не понимаю как это мне поможет? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2019, 22:38 |
|
Быстрый маппинг FB2=>JavaObject
|
|||
---|---|---|---|
#18+
mayton, Ну как, это описание формата внутри zip файла, в котором находится структурированная информация по каждой книге. Парсить эту структуру на несколько порядков проще и быстрее чем все fb2 файлы Скачать актуальную версию для флибусты можно тут https://booktracker.org/viewtopic.php?t=64690 Contains book description. One per line. Line delimiter - \r\n. Line fileds should be the same as in structure.info except delimiter is 0x04 instead of ;. Field can be empty, i.e. have zero length. Fields description: AUTHOR string One or more authors in format Surname,Name,Middlename: without spaces. GENRE string One or more genres in format genre_id:. Can be found in Genres.cs. TITLE string Book title. SERIES string Book series. SERNO integer Book number in series. FILE string Filename without extension. SIZE integer File size in bytes. LIBID integer Book id in library. Likely to be unique across one .inpx file. DEL integer? Empty - book is present. 1 - book is deleted. EXT string File extension without front dot. DATE string Date of book publication or adding to library. Should be in format YYYY-MM-DD. LANG string Book's language. en, ru, etc... KEYWORDS string Format keyword:. FOLDER string Folder relative to library root. (this one isn't implemented yet in DotOPDS) Example: Shakespeare,William,:<0x04>tragedy:<0x04>Hamlet<0x04><0x04>0<0x04>shakespeare_haml ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2019, 22:49 |
|
|
start [/forum/topic.php?all=1&fid=59&tid=2121313]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
144ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
87ms |
get tp. blocked users: |
2ms |
others: | 23ms |
total: | 300ms |
0 / 0 |