OberonCore
https://forum.oberoncore.ru/

Xmlcore - реализация DOM и XML для BlackBox
https://forum.oberoncore.ru/viewtopic.php?f=90&t=1006
Страница 2 из 4

Автор:  Info21 [ Среда, 04 Июнь, 2008 12:30 ]
Заголовок сообщения:  Re: Реализация Document Object Model(DOM) и XML для BlackBox

Ярослав Романченко писал(а):
... Вообще за Flash баннеры вбывав-бы :twisted:...

Флэшу -- бойкот. Не устанавливать. Потерпеть Роллан Гаррос без флэша. В этом году они уже научились делать альтернативу из чистого html.

Автор:  Иван Горячев [ Среда, 04 Июнь, 2008 12:31 ]
Заголовок сообщения:  Re: Реализация Document Object Model(DOM) и XML для BlackBox

Ярослав Романченко писал(а):
Оперу запросто мог повесить Flash баннер на какой-то из закладок. То-ли баннеры кривые попадаются, то-ли плагин глючный. Вообще за Flash баннеры вбывав-бы :twisted:


Именно SVG - проверено экспериментально. И меня вообще по умолчанию флэш и картинки отключены. Собственно вот (4 мб)

(02.08.2011, модератор) ветка про Strings выделена в отдельную тему: viewtopic.php?f=90&t=3524

Автор:  Иван Кузьмицкий [ Среда, 04 Июнь, 2008 13:04 ]
Заголовок сообщения:  Re: Реализация Document Object Model(DOM) и XML для BlackBox

Иван Горячев писал(а):
...Собственно вот (4 мб)


Да, у меня Опера 9.26, на нём падает. Но InkScape открыл картинку нормально, хотя и ме-е-едленно. Так что не в формате дело.

Автор:  Пётр Кушнир [ Среда, 04 Июнь, 2008 20:15 ]
Заголовок сообщения:  Re: Реализация Document Object Model(DOM) и XML для BlackBox

Про SVG:

Слепил в InkScape простенький SVG, пропустил через парсер Xmlcore(прочитал в XMLДокумент, записал из XMLДокумента) и открыл обратно в InkScape - файл открылся корректно. Что радует.

Автор:  Борис Рюмшин [ Четверг, 05 Июнь, 2008 09:23 ]
Заголовок сообщения:  Re: Реализация Document Object Model(DOM) и XML для BlackBox

Petryxa писал(а):
Ммм. Было бы неплохо. Ну тогда сообщите пожалуйста параметры SVN репозитория.

Сообщите мне имя пользователя - пароль личным сообщением. Остальные параметры сообщу чуть позже.

Автор:  Пётр Кушнир [ Понедельник, 09 Июнь, 2008 14:11 ]
Заголовок сообщения:  Re: Реализация Document Object Model(DOM) и XML для BlackBox

Dom + Xmlcore
В архиве последняя версия, чтобы быть иметь хоть какую то синхронизованность.

Автор:  Борис Рюмшин [ Вторник, 10 Июнь, 2008 00:25 ]
Заголовок сообщения:  Re: Реализация Document Object Model(DOM) и XML для BlackBox

Petryxa писал(а):
Dom + Xmlcore
В архиве последняя версия, чтобы быть иметь хоть какую то синхронизованность.

Товарищи, прошу прощения, завтра (уже сегодня) к середине дня вопрос с репозиторием будет решён.

Автор:  Пётр Кушнир [ Вторник, 10 Июнь, 2008 13:09 ]
Заголовок сообщения:  Re: Реализация Document Object Model(DOM) и XML для BlackBox

Да ну что вы, в самом деле не стоит...

Автор:  Иван Горячев [ Вторник, 10 Июнь, 2008 13:56 ]
Заголовок сообщения:  Re: Реализация Document Object Model(DOM) и XML для BlackBox

Стоит-стоит. У ББ так мало разработчиков, что любые способы концентрации усилий можно только приветствовать.

Автор:  Пётр Кушнир [ Вторник, 10 Июнь, 2008 14:17 ]
Заголовок сообщения:  Re: Реализация Document Object Model(DOM) и XML для BlackBox

Иван Горячев писал(а):
Стоит-стоит. У ББ так мало разработчиков, что любые способы концентрации усилий можно только приветствовать.

Да я про извинения говорил :) Репозиторий конешно нужОн, без него как-то некомфортно.

Автор:  Борис Рюмшин [ Среда, 11 Июнь, 2008 16:18 ]
Заголовок сообщения:  Re: Реализация Document Object Model(DOM) и XML для BlackBox

Друзья, ещё раз прошу прощения за задержку. Иван, вы знаете, где SVN. Именно там - новый каталог Components. Petryxa, для вас сейчас личное сообщение будет. Остальные, кто хочет присоединиться к разработке: имя пользователя, пароль личным сообщение мне. Желающим просто понаблюдать, придётся немного обождать.

Автор:  Иван Горячев [ Суббота, 14 Июнь, 2008 04:51 ]
Заголовок сообщения:  Re: Реализация Document Object Model(DOM) и XML для BlackBox

Просьба к тем, кто будет править через SVN - перейдите на ББ 1.6 или не пишите по-русски, иначе мне придётся постоянно конвертировать документы (в ББ 1.6 русские буквы, набранные в предыдущих версиях, выглядят кракозябрами).

Автор:  Info21 [ Суббота, 14 Июнь, 2008 06:36 ]
Заголовок сообщения:  Re: Реализация Document Object Model(DOM) и XML для BlackBox

Иван Горячев писал(а):
в ББ 1.6 русские буквы, набранные в предыдущих версиях, выглядят кракозябрами


перенес вопрос сюда: viewtopic.php?f=3&t=1025

Автор:  Пётр Кушнир [ Суббота, 14 Июнь, 2008 09:56 ]
Заголовок сообщения:  Re: Реализация Document Object Model(DOM) и XML для BlackBox

Иван Горячев в оффтопной ветке писал(а):
Пётр Кушнир писал(а):
Ну, тесты разные бываютЪ.

Подозреваю Vlad имел ввиду этот тест. Спасибо Владу, пошёл скачал и проверил. Не, ещё работать и работать, чтобы он хотя бы valid ветки проходил

Усё это оффтоп, давайте куда-нибудь в другое место


Вот, перенёс в другое место...
Подозреваю, Vlad не имел в виду этот тест. Но штука полезная. Нет смысла тестировать на таком тесте, если не все функции парсера ещё реализованы(там же сплошь DTD). Посмотрите в модуль Parser, сколько методов там закомментировано. Есть мнение, нужно их до-портировать сначала.

Автор:  Пётр Кушнир [ Воскресенье, 15 Июнь, 2008 22:38 ]
Заголовок сообщения:  Re: Реализация Document Object Model(DOM) и XML для BlackBox

Появилась идея переделать модули XmlcoreScanner и XmlcoreWriter в виде абстрактных интерфейсов со скрытой реализацией. Сейчас всё это выглядит как что-то непонятное, с привязкой к типам из Files.

План такой.
Вообщем по модулю XmlcoreScanner: Описать абстрактную фабрику объектов.
Reader(курьер чтения): Описать абстрактный тип Reader, c набором методов, необходимых Сканнеру. В реализации Reader инкапсулировать Stores.Reader(или, в будущем, какой-нибудь другой Reader).
Для Scanner: Scanner.r объявить типа Reader. Scanner.ConnectTo также переделать, чтобы сканнер присоединялся к Reader, а НЕ к Files.File, как сейчас.
Остаётся нерешённым, как Reader присоединять к источнику данных. Я думаю, подойдёт метод фабрики dir.NewReader(source : ANYPTR). Тогда реализация Reader будет сама приводить тип к "своему" типу источника данных. Также потребуется незначительная модификация XmlcoreParser

Вообщем по модулю XmlcoreWriters: Переименовать XmlcoreWriters в XmlcoreFormatter. Переименовать тип Writer в Formatter.
Writer(курьер записи): Описать абстрактный тип Writer и методы, необходимые для Formatter. Присоединение к источнику данных сделать аналогично как в Reader, через метод фабрики, передавая указатель неопределённого типа.
Для Formatter: Присоединять Formatter к Writer, а НЕ к Files.File, как сейчас.
Также потребуется незначительная переделка Generator.

Вот примерный код:
Код:
MODULE XmlcoreScanner;
TYPE

   Reader = POINTER TO ABSTRACT RECORD
      <some fields>
   END;

   StdReader = POINTER TO RECORD (Reader)
      <some fields>
      rider : Stores.Reader;
   END;

   Scanner = POINTER TO RECORD
      <some fields>
      rider- : Reader;
   END;
   
   Directory = POINTER TO ABSTRACT RECORD END;   
   
   PROCEDURE (rd : Reader) ConnectTo(source : ANYPTR), NEW, ABSTRACT;
   
   PROCEDURE (rd : StdReader) ConnectTo(source : ANYPTR);
   BEGIN
      ASSERT(source IS Stores.Reader) (* ну, или в зависимости от типа предпринимать действия *)
      rd.rider := source;
      <some actions>
   END ConnectTo;
   
   PROCEDURE (d : Directory) NewScanner(reader : Reader), NEW, ABSTRACT;
   PROCEDURE ((d : Directory) NewReader(source : ANYPTR), NEW, ABSTRACT;
   
   (* При работе нужно будет сделать что-то типа: *)
   
   XmlcoreScanner.dir.NewScanner(XmlcoreScanner.dir.NewReader(source));

Код:
MODULE XmlcoreFormatter;

TYPE

   Writer = POINTER TO ABSTRACT RECORD
      <some fields>
   END;
   
   StdWriter = POINTER TO RECORD (Reader)
      <some fields>
      rider : Stores.Writer;
   END;

   Formatter = POINTER TO RECORD
      <some fields>
      rider- : Writer;
   END;
   
   Directory = POINTER TO ABSTRACT RECORD END;   
   
   PROCEDURE (wr : Writer) ConnectTo(source : ANYPTR), NEW, ABSTRACT;
   
   PROCEDURE (wr : StdWriter) ConnectTo(source : ANYPTR);
   BEGIN
      ASSERT(source IS Stores.Writer) (* типы выдуманные, названия могут несовпадать*)
      wr.rider := source;
      <some actions>
   END ConnectTo;
   
   PROCEDURE (d : Directory) NewFormatter(writer : Writer), NEW, ABSTRACT;
   PROCEDURE ((d : Directory) NewWriter(source : ANYPTR), NEW, ABSTRACT;
   
   (* При работе нужно будет сделать что-то типа: *)
   
   XmlcoreFormatter.dir.NewFormatter(XmlcoreFormatter.dir.NewWriter(source));

Автор:  Евгений Темиргалеев [ Воскресенье, 15 Июнь, 2008 23:30 ]
Заголовок сообщения:  Re: Реализация Document Object Model(DOM) и XML для BlackBox

Пётр Кушнир писал(а):
Появилась идея переделать модули XmlcoreScanner и XmlcoreWriter в виде абстрактных интерфейсов со скрытой реализацией. Сейчас всё это выглядит как что-то непонятное, с привязкой к типам из Files.
А планируется несколько реализаций парсера? И возможность подмены реализации во время работы ББ?

Автор:  Vlad [ Понедельник, 16 Июнь, 2008 07:54 ]
Заголовок сообщения:  Re: Реализация Document Object Model(DOM) и XML для BlackBox

Пётр Кушнир писал(а):
Основной затык скорости приходился на посимвольный набор строки, с посимвольным выделением памяти...


А может просто избавиться от посимвольного набора строки? :) Я вот недавно прототипчик писал, который как раз интенсивно со строками работает (что-то типа индексирования текста). Прототип заработал, но работал очень тормозно даже для прототипа. После анализа в ряде мест "обычные" строки были заменены "специальными", которые "внутри" представляли собой константные итераторы (да-да, те самые итераторы! :) ) по существующему тексту. Скорость выросла более чем на порядок.

P.S. Это не реклама итераторов :) Это предложение взглянуть на задачу с позиции выше, чем "как максимально оптимизировать посимвольный набор строки".

Автор:  Пётр Кушнир [ Понедельник, 16 Июнь, 2008 10:28 ]
Заголовок сообщения:  Re: Реализация Document Object Model(DOM) и XML для BlackBox

Евгений Темиргалеев писал(а):
А планируется несколько реализаций парсера? И возможность подмены реализации во время работы ББ?

Ну, например, можно получать XML данные не с диска, а из сети... написать jabber-клиент на ББ например(идея-фикс :)). В случае абстрактной реализации потребуется только подменить Reader и Writer а остальные части останутся прежними.
Я пока говорил только про абстрактные курьеры, но можно абстрагировать и весь парсер... Например, если кто-то захочет использовать готовую обёрнутую библиотеку :evil:
Vlad писал(а):
P.S. Это не реклама итераторов Это предложение взглянуть на задачу с позиции выше, чем "как максимально оптимизировать посимвольный набор строки".

В таком случае нужно ещё и строки абстрагировать... :)

Автор:  Евгений Темиргалеев [ Понедельник, 16 Июнь, 2008 12:00 ]
Заголовок сообщения:  Re: Реализация Document Object Model(DOM) и XML для BlackBox

Пётр Кушнир писал(а):
Я пока говорил только про абстрактные курьеры, но можно абстрагировать и весь парсер...
Нда, плохо читал...
Пётр Кушнир писал(а):
Vlad писал(а):
P.S. Это не реклама итераторов Это предложение взглянуть на задачу с позиции выше, чем "как максимально оптимизировать посимвольный набор строки".

В таком случае нужно ещё и строки абстрагировать... :)
Абстрагировать - не обязательно. Про такой подход читал, кажется, в статье про Coco/R. Там говорилось, что раз памяти стало много, можно целиком текст модуля грузить в память и вместо таблиц идентификаторов хранить их в виде ссылок на текст (pos, len).

Однако, применим ли этот подход к xml-файлам, вопрос. Какого размера на практике может попасться xml-файл?

Автор:  Пётр Кушнир [ Понедельник, 16 Июнь, 2008 14:17 ]
Заголовок сообщения:  Re: Реализация Document Object Model(DOM) и XML для BlackBox

Евгений Темиргалеев писал(а):
Однако, применим ли этот подход к xml-файлам, вопрос. Какого размера на практике может попасться xml-файл?
Так сразу и не скажешь, на моём компьютере я нашёл размеры ~1 кбайт до 4 мегабайт причём размеры распределены довольно равномерно на всём промежутке, вот здесь товарищ говорит о 6 мегабайтном файле, в XML-БД "Седна"(как-то так) вообще размер неопределённо большой может быть... Можно ориентироваться на 4-х мегабайтный файл, который в наличии.

Самое неприятное то, что в DOM строки всё равно ДОЛЖНЫ хранится как массив символов(ну или указатель на массив, в случае BlackBox это неважно).
Тогда, если организовыать список строк в памяти, то нужно будет переделать Dom так, чтобы в качестве входных параметров методов узлов выступали указатели на строки, а не сами строки... Это будет очень полезно в плане производительности, потому как строка с содержимым будет создаваться только один раз в парсере, а основная работа будет происходить с указателем на неё... Но это создаст некоторые неудобства при прямой работе с самим DOM. Например простой метод SetNodeValue('value') превратится в SetNodeValue(CreateDynString('value')); Хотя, стандарт не запрещает просто ввести новый метод SetNodeDynValue(val : POINTER TO ARRAY OF CHAR).

Страница 2 из 4 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/