5

私はこれを行うために主に Ruby を使用していますが、これまでの私の攻撃計画は次のとおりです。

gem rdf、rdf-rdfa、および rdf-microdata または mida のいずれかを使用して、任意の URI を指定してデータを解析します。schema.org のような統一スキーマにマッピングするのが最善だと思います。たとえば、data-vocabulary と opengraph の間の schema.org への変換を記述しようとするこの yaml ファイルを取り上げます。

# 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

次に、見つかった情報を 1 つの形式で保存し、schema.org 構文で再表示できます。

他の部分はタイプを決定しています。schema.org に従ってテーブルをモデル化し、レコードが「モノ」( Thing ) のタイプを知りたいと考えています。したがって、「バー」の opengraph タイプを解析すると、「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
4

2 に答える 2

4

元の質問については、あなたは正しい方向に進んでいます。実際、structured-data.orgリンターでも同様のことを行っています。GitHubリポジトリを確認すると便利な場合があります。基本的な考え方は、検出をフォーマットし、適切なリーダー(RDFa、Microdataなど)を選択することです。読むと、グラフが表示されます。グラフ内の各ステートメントを実行し、テーブルに基づいてマップされた述語とタイプを使用して新しい出力グラフを作成する必要があります。したがって、たとえば、ソースグラフで述語としてdv:nameと言うと、出力グラフでschema:nameを出力できます。

タイプを決定するには、適切な出力タイプを考え出すためのマッピングテーブルも必要になります。OGPは実際にはrdf:typeを使用しないことに注意してください。そのため、ogp:typeを含むステートメントを見つけて、マップされたクラスとともにrdf:typeを出力する必要があります。

全体にアプローチする別の方法は、owl:equivalentProperty / equivalentClassアサーションを使用して語彙を作成し、OWL含意を実行して、元のグラフに適切なトリプルを追加することです。Rubyのツールセットは、現時点では(まだ)これに完全には対応していません。

于 2011-08-27T01:42:02.877 に答える
4

Schema.org のマッピングに関しては、関連するリンクをhttp://www.w3.org/wiki/WebSchemasで収集しています。新しいものを作成する場合は、それらを追加してください。

以下も参照してください。

ある時点で、単純な「これはそれと同じ」または「これはそれを意味する」というトリプル パターンを超えるマッピングに出くわすことは間違いありません。特に v1.1 をサポートする SPARQL エンジンを使用している場合は、SPARQL クエリを使用してさらに先に進むことができるはずです。そして最終的には、マッピング タスクにカスタム コードが必要になる場合があります。

于 2011-10-23T19:48:47.630 に答える