Факултети > Факултет по математика и информатика

SAX - една чудесна технология

(1/5) > >>

artanis:
Здравейте колеги,

Бих искал да споделя много добрите си впечатления от SAX (Simple API for XML). Това е една много удобна безплатна технология, която можете да интегрирате във вашите Java програми, които четат от XML документи. Адресът е: http://www.saxproject.org/, а SAX също е имплементиран и в безплатния XML парсер xp.

поздрави:
Атанас Чанев

Цуйка:
artanis Xerces & Xalan rulez...  Бързи са, мощни са и са супер дърти проекти. Освен това май е време да се запознаеш с JAXP най после. Освен това Java та си идва с чисто нови Xerces базирани SAX и DOM парсери.
Между другото SAX парсерите са само за четене... ако искаш валидиращ или такъв, който може да генерира XML ти трябва DOM парсер... sorry... живота е гаден.
D то на DOM идва от 'Дебел'  ))

Абе така и така съм тръгнал да агитирам хора за Python - ей ти кода, който ти парсва XML документ и ти го зарежда в DOM дърво:

from xml.dom import minidom
doc = minidom.parse('blah.xml')
bla bla processing
doc.unlink()

Ай сравни го с най-простото на Java...

artanis:
Здравейте г-н Цуйка,

Досега съм си генерирал XML по най-разнообразни старомодни начини. Първо чрез конзолата (голямо забавление, особено UTF-16), а после като пиша в UNICODE файл.

За съжаление D-то на DOM ми идва твърде дебело, защото работя с много големи файлове, така че SAX върши чудесна работа. Отначало алтернативата беше да си напиша сам функциите на Java или да използвам старите ми функции на Perl. Така че съм доволен и това беше причината да споделя възхищението си.

Може ли да споделите къде се намират стандартните пакети със SAX и DOM. Благодаря предварително!

За пръв път чувам за JAXP. Благодаря за препоръката. Ще го прегледам.

... Само не разбрах защо животът според Вас е гаден. Животът е прекрасен :-)

поздрави:
Атанас Чанев

Цуйка:
Нали ти казах. Иди на java.sun.com/xml и прочети за JAXP. API то е супер мижаво ама върши работа. Поискай си от JAXP SAX парсер и си го получаваш. Въобще не ти трябва дори да знаеш къде е пакета (ако наистина искаш да знаеш - пакета е в rt.jar... отвори го с Ark или някъф там архивар и веднага ще се ориентираш).

Ето ти и един линк:
http://java.sun.com/xml/jaxp/dist/1.1/docs/tutorial/

И смисъла на XML е markup а да не се превърне в tag soup или spaghetti code или в боза или в квото се е превърнал HTML а. И точно поради тази причина би трябвало всяка операция, която правиш с XML да минава през одобрен XML парсер. Друг е въпроса, че почти никой не го прави и един идеален пример за това е RSS. Хората дори не си ескейпват амперсандите...
А за скоростта... OpenOffice си записва документите в зипнат XML. Отвори един файл с някакъв архивар и ще видиш за какви XML и става въпрос... Особено ако си записал някаква огромна таблица с един куп формули и стилове на клетките. И въпреки това OpenOffice си ги парсва доста бързо...
Пък и ако трябва да записваш огромно количество данни на диска не е ли по добре просто да си сериализираш структурата? Четеш я един пък, парсваш я, сериализираш я и после следиш за датата на промяна на XML а. Ако се промени - парсваш го на ново. Ако не се е променила - използваш си сериализираната структура. Така си спестяваш парсването всеки път, щом ти е толкова бавно.

artanis:
Здравейте г-н Цуйка,

Благодаря за линковете. Проверих ги и се убедих, че парсерите са включени в SDK след версиите 1.3.x. Това за което използвам XML от февруари тази година е за нагледно представяне на дървета. След като напиша дървото във файл, винаги разбирам дали XML който пиша е добър като го парсвам първо в Internet Explorer, а сега и в Mozilla, които имат вградени XML парсери. Но използването на DOM изглежда примамливо предложение, което може би ще интегрирам в бъдещите версии на програмата.

SAX използвам за извличане на граматика от корпус. Т.е. ако имам едно синтактично дърво, да получа правила, които го генерират. Напр.:

(S (VP (VP (Verb Пиша) ) (AdvP (Prep във) (NP (Noun форум) ) ) ) )

получавам S -> VP; VP -> VP AdvP; VP -> Verb; AdvP -> Prep NP; NP -> Noun ...

Със SAX това извличане стана изключително лесно - като използвах класа Driver от парсера xp. Ако вграденият SAX има повече предимства от този, който използвам, за целта за която го използвам, отново ще го включа в следващите версии.

Не съм наясно с Open Office. Може от любопитство да проверя това, което казвате. Но след като DOM зарежда карта на документа в паметта, ако реша да извлека граматика от корпус с големина 20Mb или повече, то SAX е за предпочитане пред DOM, не е ли така?

Накрая бих искал да Ви благодаря за полезната информация!

поздрави:
Атанас Чанев

[This message has been edited by artanis (edited 25-08-2004).]

[This message has been edited by artanis (edited 25-08-2004).]

Навигация

[0] Списък на темите

[#] Следваща страница

Премини на пълна версия