Object Reuse and Exchange と その実装例について 黒田 拓(北海道大学大学院理学院数学専攻) 行木 孝夫(北海道大学大学院理学研究院数学部門)
発表の概要 OAI-OREについて リソースのaggregation リソースマップによるaggregationの記述 HTTPでの再利用と交換 DML-JPでの実装例
OAI-ORE Open Archives Initiative Object Reuse and Exchange Web上のリソースを集めたものをaggregationと呼 ばれるオブジェクトとして扱う aggregationの情報をリソースマップ(ReM)という 形式で記述する 作成したリソースマップをaggregationと関連付 けて公開する
aggregation(のページ)の例 arXiv.orgのある論文
(雑誌)Journal of the Mathematical Society of Japan aggregation(のページ)の例 (雑誌)Journal of the Mathematical Society of Japan
aggregation(のページ)の例 (雑誌のリソース) Vol.61, No.1
雑誌 : Hokkaido Mathematical Journal aggregation(のページ)の例 雑誌 : Hokkaido Mathematical Journal
aggregation(のページ)の例 Volume: Vol.37(1)
aggregation(のページ)の例 Vol.37のある論文
リソースのaggregation
OREの狙い 既存の(人間向けの)ページ 見やすさ優先 / サイト毎のスタイル Aggregationとそれを表すページの混同 雑誌のURI = 雑誌についてのWebページのURI リソースマップにaggregationの情報を記述 セマンティックに記述 aggregationとその表現(リソースマップ)を厳密に 区別
このようなページのセマンティック版を作りたい OREの狙い このようなページのセマンティック版を作りたい
リソースマップ Aggregationの情報を記述 Aggregateされたリソースの一覧 各種メタデータ 構造はRDFグラフ
リソースマップ RDFグラフでaggregationの情報を記述
RDFグラフでaggregationの情報を記述 リソースマップ RDFグラフでaggregationの情報を記述 (簡単のためURIを略記)
RDFグラフでaggregationの情報を記述 リソースマップ RDFグラフでaggregationの情報を記述 (全体像) 最小限必要な 要素
aggregationの中でのメタデータ リソースマップ aggregationの中でのメタデータ aggregationの中でのリソース間の関係は そのaggregationの中でだけ意味を持つ
リソースマップ Proxy aggregationの中で意味を持つメタデータを Proxyを通して記述できる
リソースマップ Proxyを使った外部からの参照 あるaggregationに属する事に特別な意味がある
リソースマップ Proxyを使った外部からの参照 別のaggregationに由来することを主張
リソースマップ ProxyのURI 外部からリソース目当てにアクセスされる アクセスすることでリソースへのリダイレクションが行 う レスポンスヘッダでaggregationのURIも 例 : OREプロキシURIリゾルバ http://oreproxy.org/r?what=URI:論文1&where=URI:雑誌-A HTTP/1.x 303 See Other Link: <URI:雑誌-A>; rel="aggregation" Location: URI:論文1
リソースマップのシリアライズ リソースマップ(RDFグラフ)を公開用に出力 RDF/XML Atom Entry RDFa (XHTMLへの埋め込み)
リソースマップのシリアライズ サンプル
リソースマップのシリアライズ RDF/XMLの場合 <?xml version="1.0" encoding="UTF-8" ?> <rdf:RDF xmlns:ore="http://www.openarchives.org/ore/terms/"> <rdf:Description rdf:about="URI:ReM(RDF/XML)"> <ore:describes rdf:resource="URI:雑誌" /> <dcterms:creator> <foaf:name>ReM作者</foaf:name> </dcterms:creator> <dcterms:modified>2009-02-01T01:30:00Z</dcterms:modified> </rdf:Description>
リソースマップのシリアライズ <rdf:Description rdf:about="URI:雑誌"> RDF/XMLの場合 <rdf:Description rdf:about="URI:雑誌"> <ore:isDescribedBy rdf:resource="URI:ReM(Atom)" /> <dc:title>雑誌タイトル</dc:title> <ore:aggregates rdf:resource="URI:論文1"/> <ore:aggregates rdf:resource="URI:論文2"/> </rdf:Description> <rdf:Description rdf:about="URI:論文1"> <dcterms:creator> <foaf:name>執筆者</foaf:name> </dcterms:creator> </rdf:RDF>
リソースマップのシリアライズ AtomEntryの場合 <?xml version="1.0" encoding="UTF-8" ?> <entry> <id>tag:atom-entry-id</id> <link rel="alternate" type="text/html" href="URI:HTML"/> <link rel="self" type="application/atom+xml" href="URI:ReM(Atom)"/> <link rel="http://www.openarchives.org/ore/terms/describes" href="URI:雑誌"/> <source> <author> <name>ReM作者名</name> </author> <id>tag:atom-feed-id</id> <updated>2009-02-01T01:30:00Z</updated> </source>
リソースマップのシリアライズ AtomEntryの場合 <published>2009-01-01T01:30:00Z</published> <updated>2009-02-01T01:30:00Z</updated> <title>雑誌タイトル</title> <link href="URI:ReM(RDF/XML)" rel="http://www.openarchives.org/ore/terms/isDescribedBy"/> <category term="2009-01-01T01:30:00Z" scheme="http://www.openarchives.org/ore/atom/created"/> <link rel="http://www.openarchives.org/ore/terms/aggregates" href="URI:論文1" /> href="URI:論文2" /> <oreatom:triples> <rdf:Description rdf:about="URI:論文1"> <dcterms:creator> <foaf:name>執筆者</foaf:name> </dcterms:creator> </rdf:Description> </oreatom:triples> </entry>
HTTPとORE AggregationとそのリソースマップのWeb上での関 連付け
HTTPとORE aggregationが集めるのはaggregationでありリソー スマップではない aggregationのURIからそのリソースマップURIを 取得できるようにする 303 Redirection ハッシュURI
HTTPとORE リダイレクション 1. クライアントがaggregationのURIを取得するリ クエストを行う 2. サーバーはクライアントが受け入れられる形式 別に、 aggregationに対応する(X)HTMLページ 適切な形式のリソースマップ のURIへのリダイレクションを返す 3. クライアントがリダイレクト先のリソースを取 得する
HTTPとORE リダイレクション サーバーがリダイレクションに対応できる必要が ある 複数の形式でリソースマップを公開できる
HTTPとORE ハッシュURI aggregationのURIを URI:ReM#agregation とする 例 URI:ReM http://example.org/rem URI:aggregation http://example.org/rem#aggregation サーバーの実装が簡単 リソースマップが1種類の場合に便利
HTTPとORE ハッシュURI リソースマップを増やす場合の対応 可能ならリダイレクションの方法に移行する aggregation専用のURIを決定する 1つ目のリソースマップで、URI:ReM#aggregation と新しいaggregationのURIが同じリソースを指す 事を記述する
HTTPとORE ハッシュURI リソースマップを増やす場合の対応 リダイレクションが使えない場合 aggregationのURIはURI:ReM#aggregationのままに する URI:ReM-2でも記述されている事を1つ目のリソ ースマップに記述する
OAI-ORE Open Archives Initiative Object Reuse and Exchange Web上のリソースを集めたものをaggregationと呼 ばれるオブジェクトとして扱う aggregationの情報をリソースマップ(ReM)という 形式で記述する 作成したリソースマップをaggregationと関連付 けて公開する
DML-JPでの実装
DML-JPでの実装 DML-JPが機関リポジト リから文献情報を収集 文献毎にメタデータの グラフを作成 条件に合う文献を集め てaggregationとし、リ ソースマップを作成 雑誌 Vol毎 分野毎
分野毎にまとめ直す
DML-JPでの実装 <eprint> <eprintid>12124</eprintid> <datestamp>2008-10-27 15:49:31</datestamp> <lastmod>2008-10-27 15:49:31</lastmod> <creators> <item> <name>xxxx</name> </item> </creators> <title>XXXXXXX</title> <date>2005</date> <publication>Hokkaido Mathematical Journal</publication> <official_url>http://hmj.math.sci.hokudai.ac.jp/99999/</official_url> <volume>34</volume> <msc> <item>58A30(MSC2000)</item> <item>58A17(MSC2000)</item> </msc> </eprint>
DML-JPでの実装 class ResourceMap < NamedGraph::Node Rubyスクリプト(リソースマップ作成部分) class ResourceMap < NamedGraph::Node restrict "ore:describes"=>[Aggregation, :aggregation], "dcterms:creator"=>Person restrict "dcterms:created"=>Time, "dcterms:modified"=>Time end class Aggregation < NamedGraph::Node restrict "dc:title", "ore:isDescribedBy", "dcterms:created"=>Time, "dcterms:modified"=>Time, "dcterms:creator"=>Person, "rdf:type"=>Term, "ore:aggregates"=>Resource, .....
DML-JPでの実装 Rubyスクリプト(リソースマップ作成部分) rem = ORE::ResourceMap.new("http://example.org/sample/rem") do creator do name "ORE/Atom generator" end created now aggregation "http://example.org/sample/aggregation" do title "Articles of Category-Code #{c}" name "Aggregation generator" resources.each do |r| aggregates r
DML-JPでの実装 AtomEntryの出力例 <?xml version='1.0' encoding='utf-8'?> <atom:entry xmlns:dcterms='http://purl.org/dc/terms/' xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:grddl='http://www.w3.org/2003/g/data-view#' xmlns:atom='http://www.w3.org/2005/Atom' grddl:transformation='http://www.openarchives.org/ore/atom/atom-grddl.xsl' xmlns:foaf='http://xmlns.com/foaf/0.1/' xmlns:ore='http://www.openarchives.org/ore/terms/' xmlns:dc='http://purl.org/dc/elements/1.1/' xmlns:rdfs='http://www.w3.org/2000/01/rdf-schema#' xmlns:oreatom='http://www.openarchives.org/ore/atom/'> <!-- Atom Specific; No ORE Semantics --> <atom:id>tag:example.org:sample</atom:id> <!-- Resource Map Metadata --> <atom:link type='application/atom+xml' rel='self' href='http://example.org/sample/rem' /> <atom:link rel='http://www.openarchives.org/ore/terms/describes' href='http://example.org/sample/aggregation' /> <atom:source> <atom:author><atom:name>ORE/Atom generator</atom:name></atom:author> <atom:updated>2009-02-14T17:51:51Z</atom:updated> <atom:title>ORE/Atom of Articles of Category-Code 58</atom:title> </atom:source> <atom:published>2009-02-14T17:51:51Z</atom:published> <!-- Aggregation Metadata --> <atom:title>Articles of Category-Code 58</atom:title> <atom:author><atom:name>Aggregation generator</atom:name></atom:author> <atom:category term='http://www.openarchives.org/ore/terms/Aggregation' scheme='http://www.openarchives.org/ore/terms/' label='Aggregation' /> <atom:category scheme='http://www.openarchives.org/ore/atom/created' term='2009-02-14T17:51:51Z' /> <atom:category scheme='http://www.openarchives.org/ore/atom/modified' term='2009-02-14T17:51:51Z' /> <!-- Aggregated Resources --> <atom:link rel='http://www.openarchives.org/ore/terms/aggregates' href='http://hmj.math.sci.hokudai.ac.jp/99999/' title='XXXXXXX' /> <!-- Additional properties pertaining to Aggregated Resources and Aggregation --> <oreatom:triples> <rdf:Description rdf:about='info:eu-repo/semantics/humanStartPage'> <rdfs:label>humanStartPage</rdfs:label> <rdfs:isDefinedBy rdf:resource='info:eu-repo/semantics/' /> </rdf:Description> <!-- Proxies for aggregated resource --> <rdf:Description rdf:about='http://oreproxy.org/r?what=http://hmj.math.sci.hokudai.ac.jp/99999/&where=http://example.org/sample/aggreg ation'> <ore:proxyFor rdf:resource='http://hmj.math.sci.hokudai.ac.jp/99999/' /> <ore:proxyIn rdf:resource='http://example.org/sample/aggregation' /> </oreatom:triples> </atom:entry>
DML-JP 文献情報から論文のメタデータを抽出 条件に合う論文を集めたaggregationと、そのリ ソースマップを作成 AtomEntry形式で出力 XSLTを使ってRDF/XMLへの変換 未決の問題 公開用URI 各リソースマップ aggregation