|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
Доброе время суток всем Пишу здесь, потому что посетила мою голову навязчивая идея. Я подумал, что если изложу свои мысли здесь, то вполне возможно, что из идеи в итоге выйдет достойный проект Пара слов об XML Я думаю ни для кого не секрет, что XML плотно засел в современные информационные технологии. Его используют везде. Раньше я видел только одно предназначение XML - файлы настроек. Однако сегодня его используют в Веб, тех же самых мессенджерах, форматы файлов стали активно строить на XML. Немалый вклад в укоренение XML на мой взгляд стала технология Office Open XML, разработанная компанией Microsoft. Да что тут говорить, даже старый добрый HTML всё чаще и чаще заменяют XHTML. Совсем недавно обнаружил, что мой любимый "MindManager" тоже использует OOXML для своих файлов. Пара слов обо мне Программирую 14 лет. Люблю Delphi, неплохо знаю ассемблер x86, С/C++ тоже немного знаю (2.5 года официальной работы). Моя стихия - это оптимизации и удобный пользовательский интерфейс (тоже в некотором роде оптимизация - эффективности деятельности пользователя). Имею опыт генерации и распарсивания XML/HTML с очень хорошей скоростью. Тестировали с разными парсерами - получилось что-то между pugiXML и Expat, ближе к pugi. С другой стороны парсер понимал только Ansi и Utf8, не мог обрабатывать CDATA. В общем достаточно неуниверсальный парсер Зачем ещё один парсер Я думаю многие со мной согласятся. Несмотря на обилие достойных SAX и DOM парсеров, вопрос идентификации элементов/атрибутов, производительности, валидации, удобства использования - по прежнему остаётся актуальным. Проект который я предлагаю сделать - максимально упрощает жизнь вышеописанную рутинную работу В чём состоит идея Идея проста и гениальна. В большинстве случаев, распарсивая сложный (или простой) XML, мы уже разумеется знаем его строение. По умному - если предполагается обмениваться XML, то к нему существует XSD-схема (или схема в другом формате). Для идентификации имён элементов и атрибутов мы используем различные алгоритмы, чтобы в конечном счёте строку-идентификатор преобразовать к целочисленной константе. Достаточно эффективен поиск таких идентификаторов в хеш-таблице. Но это накладные расходы: хеш-функция, поиск в массиве, коллизии, перераспределение массива, надо делать сверки строк. Лично я для подобных случаев разработал более эффективный способ. Я написал утилиту, которая имеет на входе ряд идентификаторов, а на выходе выдаёт оптимальную функцию на ЯВУ, позволяющую однозначно определять идентификаторы. К примеру если я знаю, что элемент имеет одно из имён: "sheet","row","cell","data","value","style" - то код позволяющий мне определить элемент, будет выглядеть так. TAnsiPointer - это мой внутренний тип, хранящий длину строки и указатель на её символы. Мне очень нравится :) Код: 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.
Но суть не в том. Суть в том, что 1) идентифицировать элементы и атрибуты можно на лету 2) генерировать целочисленные константы можно на лету 3) вся эта информация уже хранится в XSD 4) существует возможность проводить валидацию документа и преобразовывать данные к нужному формату тоже на лету. Например если ожидается число - то преобразовывать к числу, если дата - то к дате. Если нужно оставить строкой - ради бога. 5) в конкретный момент парсинга ожидается ограниченно малое количество идентификаторов: элементов/атрибутов. Это позволяет существенно сократить время идентификации очередного элемента/атрибута 6) ну и наконец, как человек таки написавший парсер, заявлю. С точки зрения производительности намного эффективнее парсить очередной элемент, когда ты знаешь, как он может называться. Это значительно эффективнее поиска скобочек, кавычек, спец знаков и тд. ... с дальнейшей их универсальной идентификацией В целом я предлагаю разработать утилиту, которая позволяет открывать XSD-схему (или другие), выставлять им специфичные опции (например какие элементы/атрибуты пропускать или к каким типам приводить), а на выходе получать специально заточенные модули-парсеры *.pas (для Delphi/FreePascal) или *.h/*.c (для C/C++). В модулях будут объявлены все необходимые константы, а так же главная функция-парсер. Для Delphi она будет реализована в виде дампов машинного кода для платформ x86, x64, ARM. Для С/C++ будет реализация на ЯВУ, но тоже мега запутанная. Главное в этих функциях не читабильность, а стабильная эффективная работа и компилируемость. Парсер по сути состоит из двух частей: модуль-парсер, заточенный по конкретному XSD, и один универсальный модуль, в котором будут располагаться вспомогательные функции и так же рутина для потокового чтения. Под потоковым чтением я подразумеваю эффективное чтение данных например из файла (или того же zip) и автоматическое переконвертирование в случае необходимости в нужную кодировку На кого ориентировано 1) кому нужно обрабатывать огромные XML файлы с максимально возможной скоростью 2) кому очень хочется комфортного распарсивания с автоматической валидацией 3) кто хочет сделать DOM-чтение по конкретному XSD Кто нужен в проект один-два фаната XML, которые знают все его правила, знают подходы для парсинга, знают несколько эффективных реализаций один знаток XSD который способен адекватно и в полной мере консультировать по всем особенностям схем один-два классных специалиста, способных написать просмотрщик XSD (с возможностью выставлять наши специфические опции), с приятным и удобным пользовательским интерфейсом один-два скептика, которые захотят на конкретных примерах доказывать, что наш парсер работает медленно и некорректно я буду заниматься генерацией pas/h-c и вспомогательным модулем Разумеется всё на энтузиазме Хотя если у кого то возникнет желание разработать проект на материальной основе - буду рад продать свою идею и свой труд на его реализацию ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 02:29 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
SOFT FOR YOUЛюблю DelphiДальше не читал. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 09:41 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
Дя, я умею читать только до Delphi, дальше как отрубает. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 09:56 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
тогда Вы нам не подходите низкий уровень профессиональных и социальных навыков ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 09:59 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
Искренне рад, что не подхожу. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 10:02 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
мне кажется Вам следует описывать свои личные предпочтения, недостатки и впечатления в более подходящем месте. Можете завести блог, повысить активность в социальной сети, если Вас беспокоят фобии, расстройства, ощущения одиночества - обратитесь к соответствующим специалистам. Прошу больше не излагать Ваши ценные (но не в данном месте) мысли. Иначе буду вынужден обратиться к администрации с просьбой применить санкции злостному офтоперу и флудеру. Надеюсь мы друг друга поняли ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 10:10 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
Вам был нужен скептик? Я как бы выразил скептицизм по поводу выбранного инструмента. Просьбу удовлетворяю, больше писать не буду. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 10:16 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
рад, что с моей подачи на одного читающего человека стало больше правда с логикой проблема. скептицизм должен быть связан с парсером, продемонстрирован конкретными примерами могу порекомендовать почитать эти материалы: http://googletohelp.ru/?q=%D1%80%D0%B0%D0%B7%D0%B2%D0%B8%D1%82%D0%B8%D0%B5+%D0%BB%D0%BE%D0%B3%D0%B8%D0%BA%D0%B8+%D1%83+%D0%B4%D0%B5%D1%82%D0%B5%D0%B9 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 10:24 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
Говорю как человек немного понимающий в XML. И, который, работает со 100 мегабайтными файлами 1) Быстрее, чем SAX вы ничего не найдете (если мы говорим об XML, а не от текстовом файле). Выигрывать на 100 мегабайтах пару секунд - это не интересно. 2) Схема для чтения и записи, по большому счету не нужна. Всегда известно, что мы пишем строку, число или дату. Аналогично при чтении. 3) DOM тормозной, не спорю, но зато он позволяет осуществлять произвольный доступ к дереву 4) Возможно было бы интересно реализовать потоковую запись. Это было бы быстрее, чем DOM, но лично мне это не интересно. Я такое написал года три назад и месяц назад допилил его до использования юникода. 5) Писать валидатор по схеме - это тысячи человекочасов. Основное время уйдет на реализацию SOM или его аналога ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 16:04 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
_Vasilisk_ спасибо за мнение 1) предложенный мной проект - это по сути и есть SAX. Вы почему то не учитываете время идентификации полученных строк, время перевода строк к интам/датам/булеанам/флоатам. Все эти вещи могут проходить автоматически и с очень высокой скоростью. Кроме бешеной скорости, объективный плюс - гигантское удобство. Можно вообще сделать так, чтобы element_start() приходил не просто со своим ID (обычно вообще указывается строка), а вместе с ID сразу же будет даваться заполненная структура согласно описанию в схеме (т.е. описание структуры генерирует утилита, а автоматическое её заполнение происходит в парсере) 2) для записи - да. А вот когда читаем - надо понимать, что мы можем встретить, в какой последовательности, какого рода данные будут указаны 3) я не против DOM. Кстати можно реализовать специфичный DOM-reader на основе этого SAX, где уже будут распарсеные элементы со всеми атрибутами 4) ну... меня вообще в данном случае интересует чтение. Мне представляет интерес удобно и быстро читать любые общедоступные XML. Будь то документы Excel например, или отчёты Oracle. Просто встречается в твоей жизни новый XML - и это добавляет сразу много рутины. А если схему через утилиту и получить парсер - миллион проблем просто исчезает 5) почему тысячи человекочасов ? я согласен что это сложная задача. поэтому я её "перераспределил" на отдельного человека но в целом почему валидация будет простой - объясню в конкретный момент времени парсер будет знать, что ожидается например либо такой элемент, либо такой элемент, либо такой. Если ни одного из ожидаемых элементов не встретили - значит ошибка. Аналогично с атрибутами. В определённый момент времени будет ожидаться один из нескольких атрибутов. Если не встретился ни один из них - значит ошибка. Если встретился целочисленный атрибут, то нужно преобразовать символы к числу и заполнить определённое поле структуры. Если не получается преобразование - значит вызываем ошибку. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 17:49 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
SOFT FOR YOUВы почему то не учитываете время идентификации полученных строк, время перевода строк к интам/датам/булеанам/флоатам. Все эти вещи могут проходить автоматически и с очень высокой скоростьюСкорость будет медленнее. Пример Код: xml 1.
Стандартный вариант Код: pascal 1. 2. 3. 4. 5. 6. 7. 8.
т.е. программа знает какой тип она получает. Ваш вариант Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9.
Стандартный вариант побыстрее будет. Еще посмотрите реализацию TField.AsXXX SOFT FOR YOUа вместе с ID сразу же будет даваться заполненная структураКоторая будет разной для каждого элемента. Еще раз - для распарсивание произвольного XML это может и имеет смысл, но в 99% программа знает структуру файла и схема ей нужна исключительно для валидации. Вообще говоря Ваша идея у меня реализована. Правда не на SAX, а на DOM. У меня XML, на основании схемы, трансформируется в набор датасетов. При этом 1) Схема должна быть довольно жесткого формата 2) Каждый модуль все равно работает с конкретной схемой и сама технология просто инкапсулирует работу с DOM, выставляя наружу работу с датасетами SOFT FOR YOUА вот когда читаем - надо понимать, что мы можем встретить, в какой последовательности, какого рода данные будут указаныЭто учитывается не в момент чтения, а в момент написания кода читателя, путем анализа программистом схемы. Максимум, что делается - это произвидится валидация SOFT FOR YOUспецифичный DOM-readerЕсли только reader. Но все равно не имеет смысла. Вам придется все дерево хранить в памяти. Память будет жраться в огромных количествах, что и дает стандартный DOM. Да, за счет Read-Only можно будет, что-то заоптимизировать, но тогда лучше SAX с памятью. только под текущую запись SOFT FOR YOU5) почему тысячи человекочасов ?Вы знакомы с XSD схемами? С наследованием, расширением, ограничением типов? С импортом пространства имен? Со ссылками и группами? Я парсил XSD стандартным SOM - даже в таком варианте ньюансов миллион, а Вы предлагаете писать свой SOM SOFT FOR YOUя согласен что это сложная задача. поэтому я её "перераспределил" на отдельного человекаВот он и потратит на нее то время, что я написал SOFT FOR YOUв конкретный момент времени парсер будет знать, что ожидается например либо такой элемент, либо такой элемент, либо такой.А если ожидаемых будет не три, а 10? 50? Пару <xsd:sequence>, <xsd:group>, <xsd:choice> и разбавить minOccurs = 0 и maxOccurs > 1 SOFT FOR YOUВ определённый момент времени будет ожидаться один из нескольких атрибутов.С атрибутами проще SOFT FOR YOUЕсли не встретился ни один из них - значит ошибка.use="optional" SOFT FOR YOUЕсли встретился целочисленный атрибут, то нужно преобразовать символы к числу и заполнить определённое поле структуры.Как все просто. Для справки Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9.
А <xsd:union> как будем обрабатывать? SOFT FOR YOUЕсли не получается преобразование - значит вызываем ошибку.А если получается? Код: xml 1. 2. 3. 4. 5.
К чему будем преобразовывать? А если так? Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 18:56 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
SOFT FOR YOU, я до дельфи даже не дочитал, зря вы на человека наехали, ей богу. а доитал я до этого: "что XML плотно засел в современные информационные технологии" современные тенденции как бы уже давно текут в обратном направлении. хмл - монстроидальное уродство, от которого в том же вебе все отказываются в угоду JSON и прочих легковесных форматов. конфиги все современные программы либо в формате микрософтовских ini имеют или опять в JSON Только ту фигню которую успели наплодить 10 лет назад, фанаты продолжают радостно поддерживать. Вы со свом дельфи застряли в прошлом веке. Это не наезд, просто повод задуматься. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 19:15 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
_Vasilisk_Скорость будет медленнее. Пример я очень рад что встретил достойного опытного собеседника ! я на все Ваши вопросы отвечу, только пожалуйста, приведите пример хотя бы из 3-4 элементов, включающий объявление и главный элемент. Я схематично и псевдокодом объясню алгоритм парсинга, Вы поймёте, почему он очень эффективный. Пока Вы немного не так поняли мою идею. Но я с удовольствием объясню ! ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 19:20 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
mage.lan тебе не напомнить в каком ты разделе форума находишься, умник ? )))))) я JSON конфиги не встречал но ветка вообще не о JSON и Delphi если ты успел заметить. Ветка о конкретной идее, конкретном проекте. Поэтому прояви уважение, а критику XML оставь для соответствующих веток ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 19:25 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
SOFT FOR YOU, я на вас не наезжал и на "ты" не переходил. Задел, ок, значит мозг включается. С XML/XSL я работаю поболее 10 лет, валидацией с помощью DTD занимался, когда XSD еще только в проекте был. Если я вам говорю, что JSON приходит на смену XML, значит имею основания. Хотите быть в теме, читайте девелоперские новости гугла, яндекса. Посмотрите, как написаны конфиги у того же Sublime Text 2. Мало того, даже SOAP сейчас на 2й план уходит. Накушались все XML и он не выполняет тех функций которые от него хотят. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 19:38 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
я не ставлю под вопрос твой авторитет в вопросе современных технологий обмена данными я говорю, что подобным сообщениям не место в ветке если бы я спрашивал "что вы думаете о XML и JSON" или "стоит ли программировать на Delphi" - я бы понял но таких вопросов просто не стоит, вот и всё ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 19:44 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
mage.lanЕсли я вам говорю, что JSON приходит на смену XML ... Как бы и да, и нет. AJAX и конфигурационные файлы -- это конечно очень часто применяемые приложения XML-технологии, но далеко не всё, где XML используется, и далеко не везде XML сможет быть заменёт JSON-ом. Просто по тупой причине -- в JSON меньше типов данных. Есть ещё дофига применений, где JSON или что-то другое не сможешь заменить XML. Кстати, о конфигурационных файлах -- вся старая добрая Java -братия сидит до сих пор на XML-е плотно, и не рыпается, а в JSON-е я честно говоря вообще не видел ни разу конфига. P.S. тем не менее к проекту пока отношусь скептически -- не понял, чего такого революционного в нём. Что не понятно -- нафига вообще там нужна какая-то хэш-таблица элементов ? SAX-у то например ... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 19:57 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
MasterZivЧто не понятно -- нафига вообще там нужна какая-то хэш-таблица элементов ? SAX-у то например ... ну всё очень просто в калбеки от парсера приходят строки: имена элементов и атрибутов для того чтобы их обрабатывать обычно строки приводят к какой-то ID-константе и по инту уже делают case (switch) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 20:09 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
SOFT FOR YOUприведите пример хотя бы из 3-4 элементов, включающий объявление и главный элементЯ привел_Vasilisk_ Код: xml 1.
а также привел вариант чтения стандартными средствами. Также учтите, что у элемента может быть сотня атрибутов из, которых, читающей программе нужно только два. Причем если их нет, то программа знает дефолтное значение. Хотя это можно (и наверное нужно) делать через атрибут default ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 20:09 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
_Vasilisk_ не-не это один элемент, у которого три атрибута а надо хотя бы 4 элемента с разными атрибутами так просто лучше будет продемонстрировать алгоритм а потом на остальные вопросы отвечу ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 20:21 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
SOFT FOR YOU, у вас в названии ашыпка, правильно ApolloSUCKS перед тем как что-то писать нужно придумать достойное название ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 20:23 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
Омномнимправильно ApolloSUCKS по себе не судят ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 20:28 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
SOFT FOR YOUэто один элемент, у которого три атрибута а надо хотя бы 4 элемента с разными атрибутамиА вот у меня именно такой XML. Ну вот более полный вариант Код: xml 1. 2. 3. 4. 5. 6.
Схема примерно такая Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Покажите мне код, оптимальней, чем этот Код: pascal 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 21:24 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
_Vasilisk_ я отчаянно пытаюсь подобрать подходящий пример, чтобы продемонстрировать действие алгоритма :) пожалуйста, придумайте побольше различающихся в имени элементов, лучше с иерархией, и несколько разных атрибутов я продемонстрирую алгоритм, а потом сможем рассмотреть более сложные случаи, с необязательными или отличными элементами/атрибутами. Обещаю. Хотя когда я схематично покажу алгоритм, Вам сразу многое станет ясно ! ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 21:45 |
|
Проект "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 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
Перестаньте кормить тролля. Вы разве не видите, что человек неадекватный? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2013, 12:51 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
petalvik, Мы говорим с Вами об одном и том же только разными словами Рассуждая о SAX я рассматриваю данную статью: http://ru.wikipedia.org/wiki/SAX "SAX-парсинг" в моём понимании - это процесс распарсивания XML, при котором каждая прочитанная единица отправляется системе в соответствующий калбек. Далеко не всегда удобный способ, но зато самый быстрый - потому что требует минимального потребления памяти и не содержит логики увязывания элементов и атрибутов между собой "DOM-парсинг" в моём понимании - это процесс распарсивания XML, при котором получится иерархическое представление XML-документа, где в простейшем случае элементы будут содержать имя, список атрибутов, значение элемента, список элементов-детей и указатель на элемент-отца; атрибуты - это пара имя/значение. "DOM-парсинг" очень просто построить на основе "SAX-парсинга". "XML-Binding" - это высокоуровневый механизм для работы с XML-документами. Но это надстройка над DOM. > назову его pull-парсер, т. к. он не выталкивает данные, а их нужно вытягивать я таки думаю, что там в основе всё тот же SAX-парсер. Ибо вообще сложно реализовать парсер, который разбирает семантику документа, отслеживает ошибки, перекодирует строки из XML в обычные, улаживает вопросы с кодировкой... Зачем для всего .NET писать несколько парсеров, когда можно написать производительный один, отладить его, и использовать для всех остальных разного уровня задач. Судя по Вашему описанию "pull-парсер" это высокоуровневая надстройка над обычным парсером (который я называю SAX) > Чтобы ускорить клиентский код, имеется таблица имён (NameTable), > куда можно занести заранее имена элементов, которые будут в xml, > и в итоге сравнивать уже не строки (что медленно), а ссылки. вот мы и подошли к вопросу, который я описывал ещё в самом первом своём сообщении ветки. Для того чтобы оперативно идентифицировать строки, правильнее использовать не сравнения строк, а сравнения ID-констант. В приведённом Вами примере используются не инты, а ссылки. Я о чём и говорю. "NameTable" это механизм отнесения строки к какому-то идентификатору. Для подобных задач хорошо зарекомендовали себя хеш-таблицы. Я сам очень часто использую хеш-таблицы, в том числе и для идентификации строк. Но! Когда полный список необходимых тебе идентификаторов известен ещё до компиляции, существует в разы более эффективный способ их распознавания. Не нужно выполнять hash-функцию, не нужно хранить и управлять хеш-массивом, не нужно сравнивать строку со строкой в массиве. Я разработал утилиту, которая генерирует код, позволяющий однозначно идентифицировать и с максимальной скоростью. Опять таки посмотрите первое сообщение. Там 6 строк, определяющихся моментально. А может быть сколько угодно. > Опять же, приведу в пример дотнетовский pull-парсер - он тщательно вылизан, > с кучей ручных оптимизаций, и работает настолько быстро (бьюсь об заклад, вам его не побить ;) ) я не первый день живу на бренной земле :) и подобных выражений выслушал уже не один десяток ) и когда проводится очередной тест, на котором моя реализация побеждает в разы, вместо дико восторженных возгласов "отныне ты наш бог и сенсей" я слышу что-то типа "ну для данной задачи особо то дополнительная производительность и не нужна, вот ты столько времени потратил, а мог взять стандартное решение, вот ты реализовал на ассемблере, но твоё решение не кроссплатформенное". Люди редко могут отходить от зарекомендовавших себя подходов. Люди редко способны разглядеть истинные перспективы. (Русские) люди редко искренне порадуются классным идеям других людей. И почти никогда не признают превосходство коллеги над собой Буквально неделю назад три дня бился над одним тестовым проектом. Ребята работают в какой-то крупной конторе, в которой в частности нужно делать мегакрутой поиск. От СУБД отказались ввиду специфики. У конкурентов поиск идёт полторы минуты, у них около 6 секунд. Ну так и вот. Присылают им множество баз, по которым собственно и нужно проводить поиск. Была идея объединить все базы в одну и работать с ней. Написали прогу, она справлялась с задачей 2 часа. Сложность в том, что в базах происходит частое дублирование ключей, и объединение по сути предполагает поиски и в случае нахождения - объединение данных. Оказалось что 2 часа это очень много. То ли баз планируется иметь ещё больше, то ли обновления частые. Не суть. Решили реализовать поиск по нескольким базам, а не по одной общей. Потом ради интереса, чувак, который эту утилиту разрабатывал, решил её максимально оптимизировать. Долго с ней мучился, в итоге выдал около 10 минут. Чем был безмерно горд. Я сказал, что моя стихия это оптимизации, и у меня наверняка такая утилита будет работать минуту :). В общем он дал мне исходники и данные. Я увидел несколько слабых мест и оптимизировал целых три дня, выжимал максимум. Получилась 1:12. И знаете что по итогу он мне сказал? "Ну респект конечно. Но разница всёравно небольшая". Конечно они не стали использовать эту утилиту, ибо уже реализован многобазный поиск. Но мне кажется такая реализация достойна чуть большей похвалы ). Ибо работала бы изначально такая утилита минуту-двенадцать, а не 2 часа - не было бы необходимости разрабатывать многобазную архитектуру ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2013, 13:51 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
_Vasilisk_ я честно говоря не понял, где я Вас обидел, унизил, оскорбил. К чему такая реакция ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2013, 13:52 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
_Vasilisk_Перестаньте кормить тролля. Вы разве не видите, что человек неадекватный? Тс-с! Не спугни... :D ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2013, 18:26 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
мне прям стало интересно с каких пор желание, умение и опыт делать качественное программное обеспечение стало проявлением неадекватности ) а вообще извольте извиниться если вы чего то не догоняете - это не повод оскорблять меня неадекватом ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2013, 18:41 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
SOFT FOR YOUя таки думаю, что там в основе всё тот же SAX-парсер. Нет. Из pull-парсера легко сделать sax. Наоборот - нельзя. В основе парсинга лежит лексер. Он выдаёт поток токенов. Для xml этот токены должны соответствовать Xml Information Set. Что с ним будет делать парсер (принимающий токены от лексера или имеющий его в своём составе) - дело второстепенное. Он может зажигать события (SAX) или просто предлагать информацию об элементах xml (тот самый InfoSet) клиенту. Из вашего описания невозможно толком ничего понять. На сём я пока прекращаю дискуссию. Подожду готовый пример парсера, который можно запустить, пощупать, испытать в деле. Готов поучаствовать в его тестировании, высказывая обоснованную критику и пожелания по доработке. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2013, 18:42 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
Признаком неадекватности является расхваливание на все лады того, чего еще нет, и сравнением в его же пользу с тем, что уже есть и прекрасно себя зарекомендовало. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2013, 18:48 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
petalvikВ основе парсинга лежит лексер. Он выдаёт поток токенов. Для xml этот токены должны соответствовать Xml Information Set. Что с ним будет делать парсер (принимающий токены от лексера или имеющий его в своём составе) - дело второстепенное. Он может зажигать события (SAX) или просто предлагать информацию об элементах xml (тот самый InfoSet) клиенту. и в чём состоит разница по Вашему между "лексером" и SAX ? в любом случае срабатывает событие, идентифицирующее о начале элемента, о поступившем атрибуте, поступившем значение элемента, о конце элемента. Точь в точь функционал SAX. Над которым уже можно стоить надстройки petalvikИз вашего описания невозможно толком ничего понять. что конкретно Вам не удалось понять ? я написал, чтобы было понятно любому школьнику. Может быть Вы не знаете, что такое хеш-массив или ID-константа ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2013, 18:51 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
Antonariy, а по моему признак неадекватности - совать нос куда только можно. по поводу и без по поводу расхваливания мой опыт позволяет на уровне алгоритма и планируемой реализации определить, что быстро, что нет, что удобно, что нет. Может быть тебе говорит о чём-то такое слово как "проектирование" ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2013, 18:54 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
SOFT FOR YOUи в чём состоит разница по Вашему между "лексером" и SAX ? Разница в том, что лексер выдаёт поток токенов. Парсер выдаёт Infoset. Парсер xml выдаёт Xml Information Set. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2013, 18:58 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
petalvikРазница в том, что лексер выдаёт поток токенов. Парсер выдаёт Infoset. Парсер xml выдаёт Xml Information Set. в чём отличие: 1) токенов, выдаваемых XML-лексером 2) Infoset для SAX 3) Infoset для pull 4) Infoset для DOM ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2013, 19:05 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
SOFT FOR YOUМожет быть тебе говорит о чём-то такое слово как "проектирование"Что все остальные создатели парсеров идиоты и писали их на коленке? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2013, 19:10 |
|
Проект "ApolloSAX"
|
|||
---|---|---|---|
#18+
Antonariy парсеры парсерам рознь есть PugiXML, а есть MS XML и те и те умные. Только одни находчивее других ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2013, 19:14 |
|
|
start [/forum/topic.php?all=1&fid=14&tid=1332571]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
155ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
84ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 299ms |
0 / 0 |