ХаXml
Оригинальный автор(ы) | Малькольм Уоллес |
---|---|
Стабильная версия | v1.25.13 [1]
/ 13 июля 2023 г |
Репозиторий | https://github.com/HaXml/HaXml |
Написано в | Хаскелл |
Тип | библиотека |
Лицензия | LGPL 2.1 |
HaXml — это набор утилит для анализа , фильтрации , преобразования и создания на расширяемом языке разметки ( XML документов ) с использованием языка программирования Haskell . [2]
Обзор
[ редактировать ]Утилиты HaXml включают в себя: [2] [3]
- XML-парсер
- XML-валидатор
- отдельный с исправлением ошибок синтаксический анализатор HTML
- симпатичные принтеры для XML и HTML
- потоковый анализатор событий XML
- переводчик с DTD на Haskell
- переводчик определений XML-схемы в типы данных Haskell
HaXml предоставляет библиотеку комбинаторов с набором функций высшего порядка , которые обрабатывают XML-документы после того, как они представлены с использованием собственных типов данных Haskell . [4] Основной тип данных: Content
который представляет подмножество документа XML. [5]
HaXml позволяет преобразовывать XML в данные Haskell и наоборот, а также XML в XML (путем преобразования или фильтрации ). Обычное использование парсера HaXml включает определение метода обхода XML-данных, и он имеет CFilter
тип ( фильтр содержимого ), где type CFilter = Content -> [Content]
. Это означает, что эта функция , определенная пользователем, возьмет фрагмент данных XML и либо вернет больше фрагментов, либо не вернет ничего. Этот подход позволяет выбирать элементы XML, удовлетворяющие определенным условиям (например, теги с определенным именем или все дочерние элементы указанного тега). [6] [7]
Пример
[ редактировать ]В главе 22 «Расширенный пример: программирование веб-клиента» книги « Реальный мир Haskell» Брайана О'Салливана, Дона Стюарта и Джона Герзена рассматривается следующий пример. [6] XML-файл выглядит следующим образом (упрощенная версия):
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd" version="2.0">
<channel>
<title>Haskell Radio</title>
<link>http://www.example.com/radio/</link>
<description>Description of this podcast</description>
<item>First item</item>
<item>Second item</item>
</channel>
</rss>
Создан следующий контентный фильтр:
channel :: CFilter
channel = tag "rss" /> tag "channel"
Этот фильтр позже используется для получения названия канала:
getTitle :: Content -> String
getTitle doc = contentToStringDefault "Untitled Podcast" (channel /> tag "title" /> txt $ doc)
Ссылки
[ редактировать ]- ^ «Релиз v1.25.13» . Гитхаб . Проверено 10 января 2024 г.
- ^ Jump up to: а б Гайда, Михал Й.; Крылов Дмитрий (5 ноября 2020 г.). «Быстрые инструменты XML/HTML для Haskell: XML TypeLift и улучшенный Xeno». Зенодо . arXiv : 2011.03536v1 . дои : 10.5281/zenodo.3929549 . S2CID 226282051 .
- ^ «Ридми» . Гитхаб . Проверено 10 января 2024 г.
- ^ Му, Шин-Чэн; Ху, Чжэньцзян; Такеичи, Масато. Двунаправленность HaXML (PDF) (Отчет). Архивировано из оригинала (PDF) 10 января . Получено 10 , января
- ^ Олендорф, Мануэль (6 января 2007 г.). Справочник по набору инструментов Haskell XML с примерами обработки документов RDF (PDF) . fhwedel Кафедра компьютерных наук. п. 78. Архивировано (PDF) из оригинала 13 января 2024 года . Проверено 13 января 2024 г.
- ^ Jump up to: а б О'Салливан, Брайан; Герцен, Джон; Стюарт, Дон (2008). «Глава 22. Расширенный пример: программирование веб-клиента» . Реальный мир Haskell . О'Рейли Медиа . ISBN 978-0596514983 .
- ^ Уоллес, Малькольм; Рансиман, Колин (1 сентября 1999 г.). «Haskell и XML: общие комбинаторы или перевод на основе типов?» (PDF) . Уведомления ACM SIGPLAN . 34 (9): 148–159. дои : 10.1145/317765.317794 .