Симпозиум «Онтологическое моделирование: состояние и направления исследований и применения» Звенигород, 20 – 21 мая 2008 года Декларативные способы преобразования исходных данных в онтологии Воробьев Владимир Иванович Перминов Сергей Владимирович Санкт-Петербургский институт Информатики и Автоматизации РАН [www.spiiras.nw.ru] СПб, 14-я линия ВО, т. 328-43-69 Содержание • Введение • Постановка задачи преобразования • Декларативный подход к преобразованию, построение конвейера • Пример функционального преобразования • Преобразования из различных форматов данных • Web как источник данных • Примеры программных систем Актуальность • петабайтные наборы данных требуют новый стиль работы. • данные должны быть самоописываемыми (метаданные) • непроцедурные языки манипулирования данными играют основную роль в обеспечении поиска и анализа данных. • данные эволюционизируют. • эволюцию данных без затрагивания программ • высокопроизводительные процессоры онтологий общего назначения. • метрики Метрики независимые от данных • Необходимы инварианты для контроля трансформации данных: • Симметрия (контроль невозможности некоторых преобразований) • Простота • Порядок • Энтропия • Сохранение • Информация • Неоднозначность Контексты данных, подлежащие преобразованию • Любые, зависят от постановки задачи – – – – Базы данных (реляционные, объектные…) Форматы данных (текстовые, бинарные…) XML-данные Программы на различных языках… • Размещение данных – Локально (обращение к файловой системе) – В локальной сети (сетевая ФС, SQL) – В Интернет (многообразие сервисов доступа) • Web (HTTP/HTML) Императивный подход • Постоянная смена «состояния» программы • Строки – команды ОС и процессору регистры int i = 0; Int k = 5; Int j = k - i; k = 4; i = j – k; Задача преобразования Исходные контексты данных • • • • ? Таблица Excel XML-файл Др. язык описания Онтология на CycL или KIF… Выходные контексты данных • RDF/OWL • KIF • CycL… Возможные сложности: • негибкость, сложность автоматизации • оценка (качества) преобразования • два программиста решат по-разному (высокая степень свободы) • зависят от программиста Постановка задачи преобразования • Необходимо снизить степень свободы в реализации преобразования • Автоматизация построения преобразования (повторное использование компонентов) • Компоненты = функции преобразования • Упрощение (возможное построение интерфейса) • Выполнение в параллельных процессах Компоненты преобразования • Преобразование = функция • λ-выражения как способ представления функций 3+2 (λ x. x + 2) 3 (λ f. f 3) (λ x. x + 2) 0 := λ f x. x 1 := λ f x. f x 2 := λ f x. f (f x) 3 := λ f x. f (f (f x)) SUCC := λ n f x. f (n f x) PLUS := λ m n f x. n f (m f x) MULT := λ m n f. m (n f) Преобразования без промежуточных состояний • Композиция функций: K (H (G(F ( x ))) K H G F ( x ) • Каналы в командной оболочке UNIX: ls | grep test | cat > out.txt • Преобразования строк в языке Java: string.trim().replace(‘:’,’;’).toLowerCase().substring(2) • Программа на языке Haskell: main = interact $ show . apply length id . map toLower where apply fnA fnB x = (fnA x, fnB x) Конвейер Входные данные in F1 F2 out F3 G H Выходные данные Пример преобразования IDEF0 UML (диаграмма классов) Пример преобразования: описание диаграммы IDEF0 Block_ID Arrow_ID hasArrowEnd atBlock ArrowEnd rdfs:subClass Output_ID Control_ID Mechanism_ID Input_ID Пример преобразования: описание диаграммы классов UML Parameter_ID parameter type Type Method_ID Attribute_ID PrimitiveType_ID attribute method Class_ID Class_ID rdfs:subPropertyOf composes inherits Пример преобразования: Фрагмент RDF-описания диаграммы IDEF0 <tf:Arrow rdf:ID="S.42"> <tf:name>Together</tf:name> <tf:hasArrowEnd> <tf:Mechanism rdf:ID="S.43"> <tf:atBlock rdf:resource="#S.8"/> </tf:Mechanism> </tf:hasArrowEnd> <tf:hasArrowEnd> <tf:Mechanism rdf:ID="S.44"> <tf:atBlock rdf:resource="#S.15"/> </tf:Mechanism> </tf:hasArrowEnd> </tf:Arrow> Пример преобразования: правило 1 дуги механизмов являются объектами класса, для которых блок — это их метод. Запрос: где: %class = SELECT ?class ?name WHERE { %class . _:class tf:name ?name } ?class a tf:Mechanism . _:class a tf:Arrow . _:class tf:hasArrowEnd ?class Выходные логические тройки: ?class a tf:Class . ?class tf:name ?name Примеры запросов на языке SPARQL SELECT ?obj WHERE { ?subj rdf:type tf:Arrow. ?subj tf:name ?obj. } SELECT ?obj WHERE { ?subj a tf:Arrow. ?subj tf:name ?obj. } SELECT DISTINCT ?arrow ?s WHERE { ?arrow a tf:Arrow. ?mechanism a tf:Mechanism. ?arrow tf:hasArrowEnd ?mechanism. ?arrow tf:name ?name. } • только для чтения • http://jena.sourceforge.net/ Альтернатива представлению RDF: N-Triples <http://nil.org/ntriples/> <http://nil.org/creator> "Dave Beckett" . <http://nil.org/ntriples/> <http://nil.org/creator> "Art Barstow" . <http://nil.org/ntriples/> <http://nil.org/publisher> <http://an.org/> . RDF-эквивалент: <rdf:RDF xmlns:rdf=“..“ xmlns:nil="http://nil.org/"> <rdf:Description rdf:about="http://nil.org/ntriples/"> <dc:creator>Art Barstow</dc:creator> <dc:creator>Dave Beckett</dc:creator> <dc:publisher rdf:resource="http://an.org/"/> </rdf:Description> </rdf:RDF> http://www.w3.org/TR/rdf-testcases/#ntriples Пример преобразования: правило 2 дуги механизмов являются объектами класса, для которых блок — это их метод. Запрос: SELECT ?class ?method ?name WHERE { %method . ?method tf:name ?name } где: %method = %class . ?method a tf:Block . ?class tf:atBlock ?method Выходные логические тройки: ?class a tf:Class . ?method a tf:Method . ?class tf:method ?method . ?method tf:name ?name Формализация преобразования (1) N-Triples RDF/OWL шаблон SPARQL N-Triples N-Triple RDF/OWL Формализация преобразования (2) f (rdf ) makeRDF delDuplicates concat map(templates, rdf ) templates map(makeTemplate, sparqls, tripless ) makeTemplate(sparql , triples ) rdf .makeTriples(request (sparql , rdf ), triples ) Haskell: f = makeRDF . delDuplicates . concat . map templates templates = map (uncurry makeTemplate) zip (sparqls,tripless) makeTemplate sparql triples = = \rdf -> makeTriples (request sparql rdf) triples Функциональный подход • map (*2) [1,2..100] = [2,4..200] int[] is = new int[1000] for (int i = 0; i < is.length; i++) { is[i] = i*2; } return is; • reduce (+) [1..100] = 5050 int[] is = new int[100] int sum = 0; for (int i = 0; i < is.length; i++) { sum += is[i]; } return sum; [Google MapReduce] Haskell – чисто функциональный подход • нет императивных конструкций • интерференция типов (type classes) • «ленивые» вычисления main = print . sum . take 100 $ [1..] • полигон для разработки чисто функциональных (являющихся декларативными) программ • Уникальное свойство: декларативная реализация ввода-вывода main = writeFile output . process =<< readFile input Формализация преобразования (3) Schema/Lisp: (define (f rdf) (make-rdf (del-duplicates (concat (map templates rdf))))) (define templates (user-map (make-template sparqls tripless))) (define (make-template sparql triples) (lambda rdf (make-triples (request sparql rdf) triples))) Формализация преобразования (4) N-Triples ? шаблон запрос? N-Triples N-Triple RDF/OWL Форматы данных: данные + метаданные CSV XML Иван,Иванович,Иванов¶ Петр,Петрович,Петров¶ <html> <head> <title>Кленовые</title> </head> <body> <h1>Кленовые</h1> <p>Семейство растений</p> </body> </html> Таблица, RDB Имя Отч. Фам. Иван Иванович Иванов Петр Петрович Петров Исходные данные: CSV • parse = split “,” . lines Иван,Иванович,Иванов¶ Петр,Петрович,Петров¶ • Регулярные выражения (regex) • Утилиты UNIX (awk, sed) • Библиотеки (API) языков программирования Исходные данные: RDB, ODB • SQL SELECT * FROM books WHERE price > 100.00 ORDER BY title; • OQL SELECT pc.cpuspeed FROM PCs pc WHERE pc.ram > 64 Имя Отч. Фам. Иван Иванович Иванов Петр Петрович Петров Исходные данные: XML • xPath 1. //head/title/string(.) 2. //dict/key[string(.)='Comments']/ .[following-sibling::string[1]/ contains(string(.),'>')]/ following-sibling:: key[string(.)='Location']/ following-sibling::string[1]/string(.) • xQuery • XSLT XML <html> <head> <title>Кленовые</title> </head> <body> <h1>Кленовые</h1> <p>Семейство растений</p> </body> </html> Язык трансформаций XSLT <xsl:stylesheet xmlns:xsl=".." version="1.0"> <xsl:template match="/persons"> <root><xsl:apply-templates select="person"/></root> </xsl:template> <xsl:template match="person"> <name username="{@username}"> <xsl:value-of select="name" /> </name> </xsl:template> • язык запросов </xsl:stylesheet> • язык шаблонов • функциональный язык Web как источник данных • Web уже сейчас – большая (слабоструктурированная) БД – Интерфейсы к БД – Тексты – Словари – Каталоги… • HTTP/HTML • Потенциал Web в плане интеграции ресурсов Преобразование контекста данных в Web (1) XPath: //td[@class=‘first’]/a //div[@class=‘body’]//h1/a //div[@class=‘body article’]/b //div[@class=‘body article’] Преобразование контекста данных в Web (2) словарь Страница статья Малый энциклопедический… название текст Кленовые Кленовые, (Aceraceae), сем. растений из класса… меню 1 Везде 2 … Новости Исходные данные: разные форматы • Собственные языки запросов, программные интерфейсы языков программирования • Синтаксические анализаторы (парсеры) – ANTLR – JavaCC –… grammar T; def : modifier+ 'int' ID '=' INT ';‘ | modifier+ 'int' ID ';‘ ; modifier : 'public' | 'static' ; INT : '0'..'9'+ ; ID : 'a'..'z'+ ; WS : (' '|'\r'|'\n')+ {$channel = HIDDEN;} ; Особый вид парсера: Parsec expr = buildExpressionParser table factor <?> "expression“ table = [[op "*" (*) AsscocLeft, op "/" div AssocLeft] , [op "+" (+) AssocLeft, op "-" (-) AssocLeft]] where op s f assoc = Infix (do{ string s; return f}) assoc factor = do char '(‘ x <- expr • Описывает грамматику в BNF char ')‘ • Встроен в язык Haskell return x <|> number <?> "simple expression" Исходные данные: текстовые (1) Исходные данные: текстовые (2) • • • • • • • • • • • • • • • • 0.6% 1890 0.6% 1907 0.6% 2 0.6% 2001 0.6% 2008 слово 0.6% 5 1890 0.6% 8 0.6% 90 вес 2.4% A 0.6% Acer 0.6% ... 0.6% цветами 0.6% чашелистиков 0.6% экипажном 0.6% энциклопедический 0.6% явор Страница слово слово 1907 вес 0.6% … явор вес 0.6% Исходные данные: текстовые (3) семантические классы • • • • • • • • • • • • • • • • 0.6% 1890 0.6% 1907 знания 0.6% 2 0.6% 2001 литература природа 0.6% 2008 0.6% 5 0.6% 8 книга корресп. 0.6% 90 2.4% A растения трактат 0.6% Acer повесть ... 0.6% цветами травы 0.6% чашелистиков деревья 0.6% экипажном 0.6% энциклопедический 0.6% явор Обозначение: - подкласс Тузов В.А. ФО неодуш. вещь техника транспорт сухопутный без двигателя Исходные данные: текстовые (4) заголовок Яндекс.Словари… словарь Страница сем. классы статья меню Малый энциклопедический… название Кленовые текст ФО 1 … 2 знания Везде природа Новости Кленовые, (Aceraceae),... книга растения трактат Возможности для семантического поиска вес деревья 0.2% вес 1.4% Обозначение: - подкласс … Примеры: Поиск на основе семантических классов (1) Примеры: Поиск на основе семантических классов (2) • Традиционный поиск: (эффективный) поисковый запрос ограничен 3-10 ключевыми словами • Поиск на основе семантических классов: эффективный поисковый запрос неограничен Примеры: ЕНИП СПбНЦ РАН [spbrc.nw.ru] Cовместный проект с ВЦ РАН им. А.А.Дородницына Примеры: ЕНИП предоставление данных http://www.spbrc.nw.ru /ras/view/person/general. html ?id=14287 http://www.spbrc.nw.ru /ras/view/person/general. rdf ?id=14287 Примеры: ЕНИП преобразование данных Примеры: ЕНИП интеграция [enip.ras.ru] Выводы • Со смещением центра внимания при создании ПО с проектирования алгоритмов на проектирование структур данных требуются новые, декларативные подходы к преобразованию данных • Необходимо снижение степени свободы при разработке преобразователей данных • Рассмотрено использование функционального подхода без внутренних состояний, с шаблонами и декларативных языками запросов Список литературы: [dcmi] DCMI http://dublincore.org/ [enip] ENIP http://enip.ras.ru/index.html [esa] ResearchChannel Enhancing Text Representation Through Knowledge-Based Feature Generation http://www.researchchannel.org/prog/displayevent.asp?rid=3604 [foaf] FOAF http://www.foaf-project.org/ [rss] RDF RSS http://web.resource.org/rss/1.0/spec [protege] Protégé Ontology Editor http://protege.stanford.edu/ [sparql] SPARQL http://www.w3.org/TR/rdf-sparql-query/ [sw] Berners-Lee T., Hendler J., Lassila O. The Semantic Web Scientific American. 2001. No. 5. P. 34-43. [sw-intro] Henry Story RDF - Connecting Software and People http://bblfish.net/work/presentations/2005/ [sw-primer] Grigoris Antoniou, Frank van Harmelen. A Semantic Web Primer - MIT Press: 2004 [swoogle] Swoogle http://swoogle.umbc.edu/ [tuzov] Tuzov V. A. Computer Semantics of Russian Language SPb.: SPbSU, 2003. [vcard] RDF vCard http://www.w3.org/TR/vcard-rdf [w3c] World Wide Web Consortium (W3C) http://www.w3.org/