|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
SOFT FOR YOU, Я Вам показываю реальный XML, а Вы мне говорите: "Этот не подходит, давайте другой". Ну нет, так нет. Т.к. я не увидел ответа ни на один свой вопрос, то я прекращаю дискуссию ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 21:50 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
что за новая манера дискуссии ? :) скорость будет в разы быстрее чем Вы показали Вы абсолютно не поняли алгоритм распасивания по XSD. И для того чтобы его продемонстрировать я прошу "побольше различающихся в имени элементов, лучше с иерархией, и несколько разных атрибутов". Я могу сам придумать, но Вы так хуже поймёте. А в том примере, который Вы привели - всего 1 разновидность элемента. Это мало ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 21:59 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
XML-Binding заново изобретаешь ? Он уже есть ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 13:32 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
Дважды КулибинXML-Binding заново изобретаешь ? Он уже естьв нем есть критический недостаток: его пейсал не софт фор ю ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 13:44 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
SOFT FOR YOUя не ставлю под вопрос твой ... досвиданья. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 14:13 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
Дважды КулибинXML-Binding заново изобретаешь ? Он уже есть ссылки на библиотеки, утилиты, статьи ? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 14:56 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
XML-Binding заново изобретаешь ? Он уже есть Он есть даже в Дельфи. ну.... как бы это сказать.... идеи похожие, только XML-Binding мегатормозной по сравнению с предложенной мной идеей ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 15:39 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
SOFT FOR YOU, в последнее время мне немало приходится работать с xml, посему заинтересовался темой. Бегло просмотрев, хочу высказаться. Т. к. я пишу в основном под .NET, то сравню вашу задумку с имеющимся в этой платформе. То что вы изобретаете, отчасти похоже на сериализатор xml. В частности, в .NET есть такой класс - XmlSerializer. Есть утилита xsd.exe, которая по имеющейся схеме генерирует набор классов (c# или vb.net). Дальше всё просто: читаем xml в сгенерированные классы одной строкой. Валидация, строгая типизация - всё присутствует. Дальше работаем уже не с xml, а с объектами c#. Это намного быстрей и удобней любого хранилища DOM. DOM - не нужен! Вообще. Ибо сложно представить более неудобный API. Единственное оправдание его существования - легаси-код. То ли дело API LINQ to xml - ну, тут можно долго петь дифирамбы (хотя и недостатки есть) :) Почему именно SAX? Гляньте это: Сравнение XmlReader и SAX Reader . Упомянутый XmlReader позволяет читать данные строготипизировано. Например, имеются методы ReadContentAsBoolean, ReadContentAsDateTime, ReadContentAsDouble и т. п. Для ускорения работы XmlReader'а предусмотрена специальная возможность: сравнение имён элементов/атрибутов/неймспейсов не как строк, а как указателей. Для этого есть класс NameTable, куда заранее заносятся те имена, которые мы желаем читать (ведь как я понял, ваша идея скорости основана на знании структуры (схемы) документа xml). Напоследок. Как я понимаю, весь код пишется вручную? Это во втором десятилетии XXI века?? Имхо, кодогенераторы рулят. Когда вся грамматика распарсиваемого языка описывается в виде РФБН в несколько десятков строк, и код парсера генерируется автоматически. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 17:34 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
petalvik Второй достойный собеседник в ветке Надеюсь наше общение пойдёт более удачно чем с _Vasilisk_ :) > Бегло просмотрев, хочу высказаться. > Т. к. я пишу в основном под .NET, то сравню вашу задумку с имеющимся в этой платформе. ну что я могу сказать C# (.NET) для людей делается. Тут действительно применили более удобный подход С другой стороны он не так далеко ушёл от принципа XML-Binding > Напоследок. Как я понимаю, весь код пишется вручную? > Это во втором десятилетии XXI века?? Имхо, кодогенераторы рулят. > Когда вся грамматика распарсиваемого языка описывается в виде РФБН > в несколько десятков строк, и код парсера генерируется автоматически. ни в коем случае не вручную! всё кодогенератором (утилитой, которая на входе берёт XSD) > Почему именно SAX? Гляньте это: Сравнение XmlReader и SAX Reader. > Упомянутый XmlReader позволяет читать данные строготипизировано. > Например, имеются методы ReadContentAsBoolean, ReadContentAsDateTime, ReadContentAsDouble и т. п. Почему речь вообще пошла о SAX Дело в том, что существуют 2 основные схемы распознавания XML: SAX и DOM Собственно что я говорю, Вы и так знаете. Так вот, существуют различные задачи по обработке больших XML (100Мб и выше) с высокой скорость. И здесь SAX нет равных. По крайней мере не было. И здесь родилась моя гениальная идея (да, я скромный). Что имея XSD мы можем существенно оптимизировать парсинг (сгенерировать конечный автомат), который будет автоматически определять идентификаторы элементов и атрибутов, и вызывать element_start() и attribute() уже не со строками в качестве имени, а уже с определёнными ID-константами, который определил парсер. Кроме того такой парсер (конечный автомат) очень легко может отслеживать неправильно или не в том порядке указанные элементы и атрибуты (валидация). Потом я подумал, что значения атрибутов лучше тоже не всегда передавать строкой, а в случае определённого типа (числа, строковой константы, булеана, даты) - просто автоматически приводить данные к нужному типу и уже полученное значение передавать в калбек. Одновременно с этим вполне можно проводить валидацию значений! И это тоже будет проходить легко и непренуждённо! Уже несколько суток я думаю следующее. Нафига вообще вызывать калбеки по атрибутам ? Когда человек распарсивает элемент с атрибутами, элемент для него представляется некоей структурой. И XSD-утилита может генерировать описание такой структуры, и парсер будет в стеке выделять память под неё, заполнять все поля (в том числе по умолчанию), и в калбек уже передавать ID-структуры с указателем на данные структуры. Это мегаудобно. Кроме того это быстрее, чем дёргать калбек для каждого атрибута и заставлять пользователя его обрабатывать. Ну и последние сутки я думаю, что на основе этого "SAX"-парсера, можно вполне сделать и DOM-парсер. Иначе говоря один парсер-"конечный автомат" одинаково хорошо может подходить и для SAX и для DOM. Фактически отличие только одно. Для SAX память под элементы будет выделяться в стеке, но для них будут вызываться калбеки. Для DOM память будет выделяться в пуле (такой способ менеджмента памяти) и наводить связи между Child-Parent ами. Серьёзными выигрышными сторонами такого DOM-решения по сравнению с тем же PugiXML и XML-Binding я считаю: 1) Максимально возможная производительность (из-за специально заточенной архитектуры парсера) 2) Практически бесплатная валидация (вообще это считается очень тяжёлой операцией). Но просто представьте, что вообще не надо будет заботиться о правильности введённых данных 3) Минимальное потребление памяти. Потому что не будет необходимости хранить в ОЗУ многочисленные строки 4) Супер удобство P.S. надо заботиться о пользователе 3 секунды значительно лучше, чем 10 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 18:43 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
Что имея XSD мы можем существенно оптимизировать парсингТолько сначала придется распарсить xsd, проверяя валидность его самого. а в случае определённого типа (числа, строковой константы, булеана, даты)А что если определенный тип — комплексный? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 19:15 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
AntonariyТолько сначала придется распарсить xsd, проверяя валидность его самого. нет, читать ты всё-таки не научился ) AntonariyА что если определенный тип — комплексный? комплексный тип - это и есть элемент(узел) с атрибутами один элемент = одна структура дочерние элементы(узлы) парсятся аналогично в случае SAX - у элемента виден ID элемента-отца (без значений атрибутов) в случае DOM - видно не только ID, но и значения атрибутов элемента-отца Кстати я накидал объявления типов. Можешь начать изучать благородный язык Delphi Хотя для *.h/*.c будут аналоги Код: pascal 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. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 21:41 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
SOFT FOR YOUКстати я накидал объявления типов. Можешь начать изучать благородный язык Delphi КГ/АМ object и ^ - однозначно в топку. Замучаешься искать ошибки в подобных write-only монстрах. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 22:08 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
тебя послать или ты сам знаешь дорогу ? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 22:12 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
Тащемта, уже очевидно, что не взлетит. Но ты поиграйся, тебе полезно. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 22:31 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
SOFT FOR YOU, Я не ищу людей в проект. И дорогу знаю. Удачи в поисках ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 22:35 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
а можно поинтересоваться, на основе каких данных ты сделал столь мудрые умозаключения ? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 22:36 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
Дважды Кулибин, я надеюсь ты не работаешь программистом ? потому что мне уже жалко твоих юзеров ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 22:37 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
SOFT FOR YOUа можно поинтересоваться, на основе каких данных ты сделал столь мудрые умозаключения ?Что тебе полезно поиграться? На основании впечатлений об общей вменяемости. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 22:40 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
Antonariy, тебя удивляет, что в России есть профессионалы своего дела, которые не только способны генерировать достойные идеи, но и реализовывать их ? Ты бы лучше не завидовал, а сам попробовал. Глядишь - и из тебя толковый специалист получится ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 22:47 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
Пока что ты реализовал лишь название. Кстати ни слова про xsl не было. Нафига этот сакс без xsl? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 22:53 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
SOFT FOR YOU, Ну так и реализовывай, а не гни пальцы на форумах. Пока от тебя кроме ламерского выпендрежа ничего не видно ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 22:54 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
Antonariy, ну так я не первый день живу и не только XML-парсеры программирую ) ну и потом мы оба решили, что ты нам не подходишь так что досвидания ) Дважды Кулибин, о да фраза о том что автор использования указателей му**к - поистине крутая фраза ) а фразой "ну так реализовывай" ты вообще меня убил ) человек без аккаунта на форуме будет ходить раздавать всем вокруг ценные указания ) смешно :) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2013, 23:03 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
SOFT FOR YOUДело в том, что существуют 2 основные схемы распознавания XML: SAX и DOM Таки это разные вещи. В основе всех API для работы с xml лежит парсер. SAX (зажигающий события) и такого типа, что реализован в дотнете (назову его pull-парсер, т. к. он не выталкивает данные, а их нужно вытягивать). Но не суть важно, какой тип у парсера, важно, что он, и только он читает поток текста, представляющего собой xml, и выдаёт наверх готовые элементы дерева xml. Все остальные API для работы с xml (сериализаторы, DataSet'ы, DOM, и прочие) используют парсер (sax или pull) для чтения xml и загрузки данных в себя. Так что неверно смешивать SAX и DOM в одно целое. SOFT FOR YOUЧто имея XSD мы можем существенно оптимизировать парсинг (сгенерировать конечный автомат) Да, если нам заранее известна схема документа, то можно сгенерировать либо набор классов, куда сериализатором загрузим данные из xml, либо сгенерировать типизированный класс с иерархическим деревом, представляющим xml в том или ином виде (например, в .NET их аж три штуки разных), либо сгенерировать типизированный DataSet - набор таблиц (датасет может обходиться и без схемы, но при этом данные в нём будут нетипизированные - просто строки). SOFT FOR YOUНафига вообще вызывать калбеки по атрибутам ? Верно, нафига их вызывать? И для элементов нафига? Pull-парсер будет чуточку быстрее именно потому, что не тратит время на вызов колбеков. SOFT FOR YOUНу и последние сутки я думаю, что на основе этого "SAX"-парсера, можно вполне сделать и DOM-парсер. Ещё раз: DOM - это не парсер! Это объектная модель документа. Когда весь документ целиком хранится в памяти, и благодаря этому мы получаем очень быстрый доступ к его узлам, с помощью того или иного API (например, XPath). Наиболее известен именно API W3C DOM (в дотнете есть ещё API navigator, имитирующий курсорную модель, знакомую всем, кто работает с БД). SOFT FOR YOUДля SAX память под элементы будет выделяться в стеке, но для них будут вызываться калбеки. Потоковый парсер тратит память лишь на один только что прочитанный элемент, и как только отдаст его дальше, тут же можно освободить память. Однако, память будет тратиться на хранение информации о стартовых тэгах (до тех пор, пор не будет прочитан закрывающий тег этого элемента), о пространствах имён (до тех пор, пока не закончится область действия этого пространства имён), также нужно хранить информацию о дефолтных и фиксированных значениях элементов и атрибутов, о сущностях. Опять же, приведу в пример дотнетовский pull-парсер - он тщательно вылизан, с кучей ручных оптимизаций, и работает настолько быстро (бьюсь об заклад, вам его не побить ;) ), что зачастую клиентский код не успевает обрабатывать выдаваемый им распарсенный xml. Чтобы ускорить клиентский код, имеется таблица имён (NameTable), куда можно занести заранее имена элементов, которые будут в xml, и в итоге сравнивать уже не строки (что медленно), а ссылки. К сожалению, размер этой таблицы может стать очень большим, т. к. парсер заносит в неё все имена встреченных элементов. То есть опять же размениваем скорость на память. SOFT FOR YOUДля DOM память будет выделяться в пуле (такой способ менеджмента памяти) и наводить связи между Child-Parent ами. Да. Чтобы обеспечить быстрый доступ ко всем узлам, нужно всё дерево хранить в том или ином виде в памяти целиком. Таким образом, SAX и DOM напрямую не связаны. Парсер лишь читает поточные данные в один проход, без возможности возврата назад. Ведь чтобы вернуться назад к любому произвольному узлу, нужно хранить всю информацию о всех ранее прочитанных узлах. Прыгнуть вперёд к произвольному элементу парсер тоже не может, т. к. у него ещё нет информации, где этот элемент (и есть ли он вообще). ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2013, 10:21 |
|
|
start [/forum/topic.php?fid=14&msg=38134449&tid=1332571]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
147ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 260ms |
total: | 510ms |
0 / 0 |