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

Я в основном использую 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 и хотел бы знать тип «Вещи» (Вещь ) запись будет. Поэтому, если я проанализирую тип 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

person imorsi    schedule 26.08.2011    source источник


Ответы (2)


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

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

Другой способ приблизиться ко всему этому — создать словарь с утверждениями owl:equivalentProperty/equivalentClass и выполнить вывод OWL, чтобы добавить соответствующие триплеты в исходный граф. На данный момент набор инструментов Ruby (пока) не совсем подходит для этого.

person Gregg Kellogg    schedule 27.08.2011
comment
Спасибо за подтверждение! Альтернативный подход звучит как самый чистый и надежный. - person imorsi; 27.08.2011

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

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

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

person Dan Brickley    schedule 23.10.2011