Как лучше всего анализировать RDFa, микроданные и т. Д., Сохранять и отображать информацию обратно с использованием единой схемы / словаря (например, schema.org) - PullRequest
5 голосов
/ 26 августа 2011

В основном я использую Ruby для этого, но мой план атаки пока таков:

Используйте гемы rdf, rdf-rdfa и либо rdf-microdata, либо mida для разбора данных по любомуURI.Я думаю, что было бы лучше сопоставить с единой схемой, такой как schema.org, например, взять этот файл yaml, который пытается описать преобразование между словарем данных и opengraph в schema.org:

# Schema X to schema.org conversion
#data-vocabulary
DV:
  name:name
  street-address:streetAddress
  region:addressRegion
  locality:addressLocality
  photo:image
  country-name:addressCountry
  postal-code:postalCode
  tel:telephone
  latitude:latitude
      longitude:longitude
  type:type
#opengraph
OG:
  title:name
  type:type
  image:image
  site_name:site_name
  description:description
  latitude:latitude
  longitude:longitude
  street-address:streetAddress
  locality:addressLocality
  region:addressRegion
  postal-code:postalCode
  country-name:addressCountry
  phone_number:telephone
  email:email

Затем я могу сохранить информацию, найденную в одном формате, и повторно отобразить ее с синтаксисом schema.org.

Другая часть определяет тип.Я смоделировал свои таблицы после schema.org и хотел бы знать, какой тип 'Thing' ( Thing ) будет представлять запись.Поэтому, если я проанализирую тип opengraph 'bar', я сохраню его 'BarOrPub' ( BarOrPub ).

Есть ли лучший способ сделать это?Что-то автоматизировано?Решение уже есть?Любой ввод приветствуется.

РЕДАКТИРОВАТЬ:

Так что я нахожу, что это анализирует довольно хорошо (где all_tags включает в себя теги, которые мне интересны в качестве ключей и эквивалентен schema.org как значение):

RDF::RDFa::Reader.open(url) do |reader|
        reader.each_statement do |statement|
          tag = statement.predicate.to_s.split('/')[-1].split('#')[-1]
          Rails.logger.debug "rdf tag: #{tag}"
          Rails.logger.debug "rdf predicate: #{statement.predicate}"
          if all_tags.keys.include? tag
            Rails.logger.debug "Found mapping for #{statement.predicate} and #{all_tags[tag]}"
            results[all_tags[tag]] = statement.object.to_s.strip
          end
        end
      end

Ответы [ 2 ]

4 голосов
/ 23 октября 2011

Что касается сопоставлений Schema.org, мы собираем соответствующие ссылки на http://www.w3.org/wiki/WebSchemas. Если вы производите какие-либо новые, добавьте их.

Смотри также:

В какой-то момент вы, несомненно, столкнетесь с отображениями, которые выходят за рамки простого "это то же самое, что" или "это подразумевает" тройные паттерны. Вы должны быть в состоянии пойти дальше, используя запросы SPARQL, особенно если у вас есть движок SPARQL, поддерживающий v1.1. И, наконец, для задач отображения иногда требуется специальный код.

4 голосов
/ 27 августа 2011

По первоначальному вопросу вы на правильном пути.На самом деле, мы делаем аналогичные вещи в structd-data.org linter .Возможно, вам будет полезно проверить репозиторий GitHub.Основная идея заключается в том, чтобы отформатировать обнаружение и выбрать подходящий считыватель (RDFa, Microdata или любой другой).После прочтения у вас будет график.Вам нужно будет выполнить каждый оператор в графе и создать новый выходной граф с предикатами и типами, отображаемыми на основе вашей таблицы.Так, например, если вы скажете dv: name в качестве предиката в исходном графе, вы можете вывести schema: name в выходном графе.

Для определения типа также потребуется таблица сопоставления, чтобы придумать соответствующийТип выхода.Обратите внимание, что OGP на самом деле не использует rdf: type, поэтому вам нужно найти оператор с помощью ogp: type и вывести rdf: type вместе с сопоставленным классом.

Еще один способ приблизиться ко всемубыло бы создать словарь с утверждениями owl: эквивалентProperty / эквивалента класса и выполнить набор OWL для добавления соответствующих троек в исходный граф.На данный момент набор инструментов Руби не совсем подходит для этого.

...