XmlAsWordlist

~ac: на CVS отправлен AcLib:ns/xml.f (22.08.2005)

Подключение внешних XML-файлов (по имени файла или URL) в качестве контекстного форт-словаря. В результате поиск, переключение контекстов, создание узлов в XML-файле производится самим интерпретатором Форта, без необходимости использования XMLDOM и прочих XML-специфичных API.

Использование:

ALSO XML_DOC NEW: http://forth.org.ru/rss.xml

Это создаст словарь, привязанный к указанному URL и имеющий то же имя, и добавит этот словарь в контекст поиска. Когда транслятор форта будет осуществлять следующий поиск - этот XML автоматически загрузится и поиск по его узлам будет производиться так, как если бы это был "встроенный" форт-словарь. Выполнение найденного узла заменяет текущую вершину контекста поиска на найденный узел в документе (как если бы он сам был определен через VOCABULARY), и дальнейший поиск будет вестись, начиная с него. Таким образом возможна запись:

http://forth.org.ru/rss.xml /rss channel title

которая в процессе исполнения найдет тот же узел, что и XPath-выражение "/rss/channel/title" или XSL-выражение "document('http://forth.org.ru/rss.xml')/rss/channel/title".

Слова "@" и "." в этих контекстах переопределены для извлечения и печати текстовых значений "контекстных узлов" соответственно. SAVE переопределен для сохранения текущего (в прямом смысле, т.е. GET-CURRENT :) XML-документа.

За счет векторизации SHEADER все определяющие слова Форта пригодны для создания узлов XML-документа (когда он является текущим словарем компиляции). Хотя т.к. код в XML компилироваться не может (сможет только при векторизации еще пары слов форта :), то результатом "выполнения" созданных таким образом XML-узлов будет просто переключение контекста на этот узел (как если бы SHEADER работал как VOCABULARY даже при вызове из CREATE, VARIABLE или ":").

Можно пойти дальше и сделать полноценную компиляцию в XML (легко! :) и выполнение "кода" из XML, но нужно ли это - пока вопрос. А для обработки XML-документов и для создания простых XML-документов средств первой версии этой библиотеки уже хватает.

"Цена" этих возможностей - всего 66 строк кода, т.к. бОльшую часть работы делает сам транслятор Форта, а низкоуровневую работу делает LibXml2 (не фортовая). Данная библиотека просто дает доступ к XML-файлам через форт-синтаксис.


~ac: 28.08.2005 Читаю ECMA-357, дежа вю :) E4X extends the ECMAScript object model with native support for XML data. It reuses familiar ECMAScript operators for creating, navigating and manipulating XML, such that anyone who has used ECMAScript is able to start using XML with little or no additional knowledge. The extensions include native XML data types, XML literals (i.e., initialisers) and a small set of new operators useful for common XML operations, such as searching and filtering. (Краткий обзор E4X см. на http://developer.mozilla.org/presentations/xtech2005/e4x/ и http://weblog.infoworld.com/udell/2004/09/29.html) Для включения E4X-расширений в DeerPark используется измененный тэг script: <script type="text/javascript; e4x=1">


harwi: Не, ну а какие проблемы-то? Вот микрософтовская Си-Омега http://research.microsoft.com/Comega/

и более подробно - здесь:

Introducing Comega By Dare Obasanjo http://www.xml.com/lpt/a/2005/01/12/comega.html

Unifying Tables, Objects and Documents. Erik Meijer, Wolfram Schulte and Gavin Bierman. http://research.microsoft.com/users/schulte/Papers/UnifyingTablesObjectsAndDocuments(DPCOOL2003).pdf

Programming with Circles, Triangles and Rectangles http://www.cl.cam.ac.uk/gmb/Papers/vanilla-xml2003.html

имхо, фатальная проблема в xml, а не в потугах привинтить его к ЯВУ (Язык Высокого Уровня)


~ac: 20.09.2005 Я говорил о подходах (без проблем :) к превращению XML в "родной" тип данных в Форте (словарь) и JavaScript (объект). Си-Омегу тоже видели - больше года назад пробегала в наших новостях на www.forth.org.ru. 27.09.2005 А в чем фатальная проблема XML? Первые годы (в конце 90х) я тоже считал XML не более чем "еще одним форматом", но появление XSLT, schema и т.п. инструментов сделали XML "еще одним удобным форматом", а разнообразные API (DOM, SAX) еще и удобной структурой данных.

Valid XHTML 1.0! Valid CSS!
Page Execution took real: 1.342 seconds