ホーム 記事一覧 ブック DH週間トピックス 検索 このサイトについて
English
vsdxファイルからrdfファイルを作成するライブラリ

vsdxファイルからrdfファイルを作成するライブラリ

概要 vsdxファイルからrdfファイルを作成するライブラリを作成したので、備忘録です。 https://github.com/nakamura196/vsdx-rdf 背景 以下の記事などで、Microsoft Visioを使ってRDFデータを作成する方法を検討しています。 上記の記事で、「本ライブラリについては別の記事で紹介予定です。」に対応する記事となります。 使い方 以下を参考にしてください。 https://nakamura196.github.io/vsdx-rdf/ Google Colab 本ライブラリを試すためのノートブックを用意しました。 https://colab.research.google.com/github/nakamura196/000_tools/blob/main/vsdxファイルからrdfファイルを作成するプログラム.ipynb 実行後、/content/outputにttlファイルや、pngファイルが出力されます。 まとめ 未熟な点が多いかと思いますが、参考になりましたら幸いです。

RDF、TurtleやJSON-LD、およびIIIFマニフェストファイルなどの関係を理解する

RDF、TurtleやJSON-LD、およびIIIFマニフェストファイルなどの関係を理解する

概要 IIIFマニフェストがJSON-LDで記述されていることを確認するため、他のフォーマットに変換してみましたので、備忘録です。 RDFと、JSON-LDやTurtleなどのファイルフォーマットの関係、およびJSON-LDによって記述されているIIIFマニフェストファイルとの関係など、参考になりましたら幸いです。 対象 今回は、NDLデジタルコレクションで公開されている以下のマニフェストファイルを対象にします。 https://dl.ndl.go.jp/api/iiif/3437686/manifest.json 変換 EASY RDF Converterを使用します。 https://www.easyrdf.org/converter 以下のように、IIIFマニフェストファイルのURLを指定して、Input FormatにJSON-LD、Output FormatにTurtleを指定します。 結果、以下のように変換されました。 @prefix ns0: <http://iiif.io/api/presentation/2#> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . @prefix dc: <http://purl.org/dc/terms/> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix foaf: <http://xmlns.com/foaf/0.1/> . @prefix exif: <http://www.w3.org/2003/12/exif/ns#> . @prefix dc11: <http://purl.org/dc/elements/1.1/> . @prefix ns1: <http://rdfs.org/sioc/services#> . @prefix doap: <http://usefulinc.com/ns/doap#> . @prefix oa: <http://www.w3.org/ns/oa#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . <https://dl.ndl.go.jp/api/iiif/3437686/manifest.json> a <http://iiif.io/api/presentation/2#Manifest> ; ns0:attributionLabel "国立国会図書館 National Diet Library, JAPAN"^^xsd:string ; ns0:hasRanges ( <https://dl.ndl.go.jp/api/iiif/3437686/range/1> <https://dl.ndl.go.jp/api/iiif/3437686/range/2> <https://dl.ndl.go.jp/api/iiif/3437686/range/3> <https://dl.ndl.go.jp/api/iiif/3437686/range/4> <https://dl.ndl.go.jp/api/iiif/3437686/range/5> <https://dl.ndl.go.jp/api/iiif/3437686/range/6> <https://dl.ndl.go.jp/api/iiif/3437686/range/7> <https://dl.ndl.go.jp/api/iiif/3437686/range/8> <https://dl.ndl.go.jp/api/iiif/3437686/range/9> <https://dl.ndl.go.jp/api/iiif/3437686/range/10> <https://dl.ndl.go.jp/api/iiif/3437686/range/11> <https://dl.ndl.go.jp/api/iiif/3437686/range/12> <https://dl.ndl.go.jp/api/iiif/3437686/range/13> <https://dl.ndl.go.jp/api/iiif/3437686/range/14> <https://dl.ndl.go.jp/api/iiif/3437686/range/15> <https://dl.ndl.go.jp/api/iiif/3437686/range/16> ) ; ns0:hasSequences ( _:genid18 ) ; ns0:metadataLabels ( _:genid20 _:genid22 _:genid24 _:genid26 _:genid28 _:genid30 _:genid32 _:genid34 _:genid36 _:genid38 _:genid40 ) ; dc:rights <https://dl.ndl.go.jp/ja/iiif_license.html> ; rdfs:label "校異源氏物語. 巻一"^^xsd:string ; rdfs:seeAlso <https://dl.ndl.go.jp/api/oaipmh?verb=GetRecord&metadataPrefix=dcndl_porta&identifier=oai:dl.ndl.go.jp:info:ndljp/pid/3437686> ; foaf:logo <https://dl.ndl.go.jp/img/logo/ndldc/iiif-logo.png> . <https://dl.ndl.go.jp/api/iiif/3437686/range/1> a ns0:Range ; ns0:hasCanvases ( <https://dl.ndl.go.jp/api/iiif/3437686/canvas/3> ) ; rdfs:label "校異源氏物語 卷一"^^xsd:string . <https://dl.ndl.go.jp/api/iiif/3437686/canvas/3> a ns0:Canvas ; ns0:hasImageAnnotations ( _:genid43 ) ; rdfs:label "3"^^xsd:string ; exif:height 4706 ; exif:width 6890 . <https://dl.ndl.go.jp/api/iiif/3437686/range/2> a ns0:Range ; ns0:hasCanvases ( <https://dl.ndl.go.jp/api/iiif/3437686/canvas/19> ) ; rdfs:label "目次"^^xsd:string . <https://dl.ndl.go.jp/api/iiif/3437686/canvas/19> a ns0:Canvas ; ns0:hasImageAnnotations ( _:genid46 ) ; rdfs:label "19"^^xsd:string ; exif:height 4706 ; exif:width 6890 . ... RDF/XMLにも変換してみます。 ...

Linked Dataを使ったデータ記述の応用例

Linked Dataを使ったデータ記述の応用例

概要 RDFに関連して、以下のような記事を執筆しました。 これらをまとめて可視化してみましたので、備忘録です。 データ 今回は以下のデータを使用しました。 「中村覚(0000-0001-8245-7925)」という人物が東京国立博物館で所蔵されている「冨嶽三十六景・凱風快晴(cobas-166407)」に関心があり、その作成者は「葛飾北斎」である、といった内容を記述しました。 ttlによる記述は以下です。 @prefix dcterms: <http://purl.org/dc/terms/> . @prefix foaf: <http://xmlns.com/foaf/0.1/> . <https://orcid.org/0000-0001-8245-7925> foaf:topic_interest <https://jpsearch.go.jp/data/cobas-166407> . <https://jpsearch.go.jp/data/cobas-166407> dcterms:creator <https://jpsearch.go.jp/entity/chname/葛飾北斎> . 変換処理 ジャパンサーチおよびORCIDではRDFが提供されているため、それらを追加することができます。 その結果、以下のようなttlに拡張されました。 @prefix dcterms: <http://purl.org/dc/terms/> . @prefix foaf: <http://xmlns.com/foaf/0.1/> . @prefix ns1: <http://schema.org/> . @prefix ns2: <https://jpsearch.go.jp/term/property#> . @prefix owl: <http://www.w3.org/2002/07/owl#> . @prefix prov: <http://www.w3.org/ns/prov#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . <https://orcid.org/0000-0001-8245-7925> a prov:Person, foaf:Person ; rdfs:label "Satoru Nakamura" ; foaf:account <https://orcid.org/0000-0001-8245-7925#orcid-id> ; foaf:based_near [ ] ; foaf:familyName "Nakamura" ; foaf:givenName "Satoru" ; foaf:page <https://researchmap.jp/nakamura.satoru/?lang=english> ; foaf:publications <https://orcid.org/0000-0001-8245-7925#workspace-works> ; foaf:topic_interest <https://jpsearch.go.jp/data/cobas-166407> . <https://jpsearch.go.jp/data/cobas-166407> a <https://jpsearch.go.jp/term/type/絵画> ; rdfs:label "冨嶽三十六景・凱風快晴" ; dcterms:creator <https://jpsearch.go.jp/entity/chname/葛飾北斎> ; ns1:abstract """This woodblock print was produced by the ukiyo-e artist Katsushika Hokusai in the late Edo period. It is one of a series of works called Thirty-Six Views of Mount Fuji. It is also one of the most famous Japanese pictures in the world. The “mild breeze” of the title refers to a gentle wind that blows in from the south. The foot of Mount Fuji spreads out expansively. There are no human figures and the scene focuses on the grandeur of nature. The most distinctive feature is the reddened mountain surface. Perhaps this redness is the color of Fuji's volcanic surface on a clear day, or maybe the mountain has been dyed this color by the dawn sunlight. This is a woodblock print, but the same block can produce different results depending on the printing technique. Some versions of Mild Breeze on a Fine Day use lighter colors for the sky and Mount Fuji. This creates a sense of the landscape changing color as the morning sun slowly rises. However, this version from Tokyo National Museum's collection uses more vivid hues for the blue sky and the red mountain. This emphasizes the sense of Mount Fuji captured on a hot, clear day. These variations enhance the enjoyment of woodblock prints."""@en, """これは、江戸時代の後半に、浮世絵師の葛飾北斎が描いた木版画で、富士山をテーマとした46枚シリーズの一枚です。日本の絵画の中でも、世界的に知られた一枚ではないでしょうか。タイトルは「冨嶽三十六景」なのに46枚あるのは、人気が高く当初の予定から10枚増えたためです。 作品タイトルにある「凱風」とは、南から吹くおだやかな風のこと。富士山の裾野までを広くゆったりと描いています。人物も描かれておらず、自然の雄大さが感じられる景色です。何より特徴的なのは、赤くあらわされた山肌です。これは、晴天の中に立つ富士山の赤土の色なのでしょうか、それとも朝焼けに染まった色なのでしょうか。 この作品は版画ですから、同じ版木を使っていても、摺りごとに違いがあらわれます。実は同じ「凱風快晴」でも、空や富士山がもっと淡い色をしたバージョンもあり、そちらはだんだんと昇る朝日を受けて景色が色づくプロセスを描いた、といった雰囲気です。一方、東博所蔵のこちらのバージョンでは、青空や赤い富士山の色がよりはっきりとあらわされ、暑い晴天の中に立つ富士、という強さがあるようです。こうした摺りごとのバリエーションが見られるのも、版画の面白さのひとつです。 この作品をはじめ、「冨嶽三十六景」シリーズの最初の頃には、「ベロ」と呼ばれた青い顔料「ベルリン・ブルー」が多く使われています。この時代にヨーロッパから日本に入ってきたもので、北斎の新しいものへの関心の高さが見てとれます。"""@ja ; ns1:creator <https://jpsearch.go.jp/entity/chname/葛飾北斎> ; ns1:dateCreated "1801-1900" ; ns1:description "Category: Paintings, sketches, and prints:Japan:Ukiyo-e", "Genre: Painting", "Material: Woodblock print ([nishiki-e])", "分類: 絵画", "品質形状: 横大判 錦絵", "員数: 1枚", "法量: 25.3×38.0cm", "種別: 絵画:日本:浮世絵" ; ns1:image <https://colbase.nich.go.jp/media/tnm/A-11176-1/image/slideshow_s/A-11176-1_E0134613.jpg> ; ns1:name "Mild Breeze on a Fine Day from the Series Thirty-Six Views of Mount Fuji"@en, "冨嶽三十六景・凱風快晴"@ja, "ふがくさんじゅうろっけい がいふうかいせい"@ja-hira, "フガクサンジュウロッケイ ガイフウカイセイ"@ja-kana ; ns1:temporal <https://jpsearch.go.jp/entity/time/1801-1900> ; ns2:accessInfo <https://jpsearch.go.jp/data/cobas-166407#accessinfo> ; ns2:agential "" ; ns2:sourceInfo <https://jpsearch.go.jp/data/cobas-166407#sourceinfo> ; ns2:temporal "" . <https://jpsearch.go.jp/entity/chname/葛飾北斎> a <https://jpsearch.go.jp/term/type/Agent>, <https://jpsearch.go.jp/term/type/Person> ; rdfs:label "葛飾北斎" ; ns1:birthDate <https://jpsearch.go.jp/entity/time/1760> ; ns1:deathDate <https://jpsearch.go.jp/entity/time/1849> ; ns1:description "1760?-1849, 江戸時代後期の浮世絵師。姓は川村氏、幼名は時太郎、のち鉄蔵。通称は中島八右衛門。号は勝川春朗、宗理、戴斗、為一、画狂老人、卍など。" ; ns1:image <https://commons.wikimedia.org/wiki/Special:FilePath/Hokusai_portrait_whiteBackground.png?width=350> ; ns1:name "Katsushika, Hokusai"@en, "かつしか北斎"@ja, "前北斎"@ja, "前北斎卍"@ja, "前北斎為一"@ja, "前北斎為一老人"@ja, "勝川春朗"@ja, "北斉"@ja, "北斉載斗改葛飾為一"@ja, "北斎"@ja, "北斎主人"@ja, "北斎宗理"@ja, "北斎為一卍"@ja, "画狂人北斎"@ja, "葛飾北斎"@ja, "葛飾卍老人"@ja, "かつしか ほくさい"@ja-hira, "カツシカ ホクサイ"@ja-kana ; ns1:subjectOf <https://jpsearch.go.jp/data/nij15-nijl_nijl_nijl_kotengakutougouhyakka_hagajinmeijiten_00029172> ; ns1:url <https://jpsearch.go.jp/gallery/ndl-xbzl6VVOpkhjzlg> ; rdfs:isDefinedBy <https://jpsearch.go.jp/entity/chname/> ; owl:sameAs <http://collection.britishmuseum.org/id/person-institution/1820>, <http://data.bnf.fr/ark:/12148/cb124954814#about>, <http://dbpedia.org/resource/Hokusai>, <http://edan.si.edu/saam/id/person-institution/2267>, <http://id.ndl.go.jp/auth/entity/00270331>, <http://ja.dbpedia.org/resource/葛飾北斎>, <http://lod.ac/id/1626>, <http://viaf.org/viaf/69033717>, <http://www.wikidata.org/entity/Q5586> . 可視化 上記のttlを神崎正英氏が作成されたツールを使って可視化してみます。 ...

prefix.ccを利用する

prefix.ccを利用する

概要 RDFデータにおけるprefixの利用にあたり、prefix.ccを使ってみましたので、備忘録です。 https://prefix.cc/ namespace lookup api これは、prefixを与えることで、URIを取得できるサービスのようでした。 https://prefix.cc/about/api 例えば、以下を与えます。 https://prefix.cc/foaf.file.json 結果、以下が得られました。 { "foaf": "http://xmlns.com/foaf/0.1/" } reverse lookup API 例えば、以下を与えます。 https://prefix.cc/reverse?uri=http://xmlns.com/foaf/0.1/&format=json 結果、上記と同じjson結果が得られました。 追加する ジャパンサーチで利用されている以下のjpsは利用できませんでした。 { "jps": "https://jpsearch.go.jp/term/property#" } そこで以下の画面のように、新規に追加登録してみました。 その後は、他のprefixと同様に利用することができました。 https://prefix.cc/jps.file.json 投票によって、登録された情報を評価しているようで、1日に1回、+/-を提出できるようでした。 参考 exも登録されていました。 https://prefix.cc/ex.file.json { "ex": "http://example.org/" } まとめ prefixの解決にあたり、参考になりましたら幸いです。

RDFデータの追加と可視化に関する備忘録

RDFデータの追加と可視化に関する備忘録

概要 この記事では、Microsoft Visioを用いたデータからRDF形式への変換プロセスと、特定のURI(今回は葛飾北斎の情報を含むジャパンサーチのURI)が指定された場合のRDFデータへの追加方法について説明します。変換プロセスを通じて、Visioで作成したデータをRDF形式で扱えるようにする手法を紹介し、さらに具体的な例として、葛飾北斎の情報を取り入れた結果を示します。 背景 以下の記事で、Microsoft Visioを使って作成したデータをRDFに変換する例を紹介しました。 今回は、URIが指定されていた場合、そのRDFデータを追加する処理を加えたので、その備忘録です。 サンプルデータ 今回は、ジャパンサーチで公開されている葛飾北斎のURIを指定しています。 処理結果 変換後のttlファイルは以下のようになりました。 @prefix ex: <http://example.org/> . @prefix foaf: <http://xmlns.com/foaf/0.1/> . @prefix ns1: <http://schema.org/> . @prefix ns2: <http://www.w3.org/2003/06/sw-vocab-status/ns#> . @prefix owl: <http://www.w3.org/2002/07/owl#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . foaf:Person a rdfs:Class, owl:Class ; rdfs:label "Person" ; rdfs:comment "A person." ; rdfs:isDefinedBy foaf: ; rdfs:subClassOf <http://www.w3.org/2003/01/geo/wgs84_pos#SpatialThing>, foaf:Agent ; owl:disjointWith foaf:Organization, foaf:Project ; owl:equivalentClass ns1:Person, <http://www.w3.org/2000/10/swap/pim/contact#Person> ; ns2:term_status "stable" . ex:BOB ex:knows ex:Alice ; ex:type foaf:Person ; foaf:topic_interest <https://jpsearch.go.jp/entity/chname/葛飾北斎> . <https://jpsearch.go.jp/entity/chname/葛飾北斎> a <https://jpsearch.go.jp/term/type/Agent>, <https://jpsearch.go.jp/term/type/Person> ; rdfs:label "葛飾北斎" ; ns1:birthDate <https://jpsearch.go.jp/entity/time/1760> ; ns1:deathDate <https://jpsearch.go.jp/entity/time/1849> ; ns1:description "1760?-1849, 江戸時代後期の浮世絵師。姓は川村氏、幼名は時太郎、のち鉄蔵。通称は中島八右衛門。号は勝川春朗、宗理、戴斗、為一、画狂老人、卍など。" ; ns1:image <https://commons.wikimedia.org/wiki/Special:FilePath/Hokusai_portrait_whiteBackground.png?width=350> ; ns1:name "Katsushika, Hokusai"@en, "かつしか北斎"@ja, "前北斎"@ja, "前北斎卍"@ja, "前北斎為一"@ja, "前北斎為一老人"@ja, "勝川春朗"@ja, "北斉"@ja, "北斉載斗改葛飾為一"@ja, "北斎"@ja, "北斎主人"@ja, "北斎宗理"@ja, "北斎為一卍"@ja, "画狂人北斎"@ja, "葛飾北斎"@ja, "葛飾卍老人"@ja, "かつしか ほくさい"@ja-hira, "カツシカ ホクサイ"@ja-kana ; ns1:subjectOf <https://jpsearch.go.jp/data/nij15-nijl_nijl_nijl_kotengakutougouhyakka_hagajinmeijiten_00029172> ; ns1:url <https://jpsearch.go.jp/gallery/ndl-xbzl6VVOpkhjzlg> ; rdfs:isDefinedBy <https://jpsearch.go.jp/entity/chname/> ; owl:sameAs <http://collection.britishmuseum.org/id/person-institution/1820>, <http://data.bnf.fr/ark:/12148/cb124954814#about>, <http://dbpedia.org/resource/Hokusai>, <http://edan.si.edu/saam/id/person-institution/2267>, <http://id.ndl.go.jp/auth/entity/00270331>, <http://ja.dbpedia.org/resource/葛飾北斎>, <http://lod.ac/id/1626>, <http://viaf.org/viaf/69033717>, <http://www.wikidata.org/entity/Q5586> . URIを介してRDFデータを追加しなかった場合のデータは以下です。以下と比較することで、foaf:Personや葛飾北斎に関するデータが追加されていることが確認できます。 ...

Content Negotiationを使って、PythonでURIからRDFを取得する

Content Negotiationを使って、PythonでURIからRDFを取得する

概要 WikidataのエンティティのURIからRDFデータを取得する機会がありましたので、備忘録です。 Content Negotiationを使用しない まず以下のように、headersを空のままリクエストします。 import requests # URL for the Wikidata entity in RDF format url = "http://www.wikidata.org/entity/Q12418" headers = { } # Sending a GET request to the URL response = requests.get(url, headers=headers) # Checking if the request was successful if response.status_code == 200: text = response.text print(text[:5000]) else: print("Failed to retrieve RDF data. Status code:", response.status_code) この場合、以下のように、json形式のテキストデータを取得することができます。 {"entities":{"Q12418":{"pageid":14002,"ns":0,"title":"Q12418","lastrevid":2176343952,"modified":"2024-06-11T11:43:44Z","type":"item","id":"Q12418","labels":{"fr":{"language":"fr","value":"La Joconde"},"es":{"language":"es","value":"La Gioconda"},"en":{"language":"en","value":"Mona Lisa"},"af":{"language":"af","value":"Mona Lisa"},"am":{"language":"am","value":"\u121e\u1293 \u120a\u12db"},"ar": ... ただし、求めているRDFデータは取得できません。 Content Negotiationを使用する 次にheadersにRDF/XMLを指定します。 import requests from lxml import etree # URL for the Wikidata entity in RDF format url = "http://www.wikidata.org/entity/Q12418" # Headers to request RDF/XML format headers = { 'Accept': 'application/rdf+xml' } # Sending a GET request to the URL response = requests.get(url, headers=headers) # Checking if the request was successful if response.status_code == 200: tree = etree.fromstring(response.content) # Convert _Element to _ElementTree tree = etree.ElementTree(tree) # Now you can use the write method tree.write("output.xml", pretty_print=True, xml_declaration=True, encoding='UTF-8') else: print("Failed to retrieve RDF data. Status code:", response.status_code) 結果、以下のようにRDFデータを取得することができました。 ...

Microsoft Visioを使ってRDFデータを作成する

Microsoft Visioを使ってRDFデータを作成する

概要 RDFデータの作成にあたり、Microsoft Visioを使う機会があったので、備忘録です。 https://www.microsoft.com/ja-jp/microsoft-365/visio/flowchart-software なおMicrosoft VisioはRDFデータの作成に特化したツールではありませんが、フローチャートと図面の作成ソフトウェアであり、高い操作性を有します。そこで、本ツールで作成したデータをRDFに変換することを試みます。 Microsoft Visioで作成したデータのRDFへの変換にあたっては、以下のPythonライブラリを使用します。 https://pypi.org/project/vsdx/ データ作成 今回は、以下のようなネットワークを作成しました。 https://univtokyo-my.sharepoint.com/:u:/g/personal/2436196812_utac_u-tokyo_ac_jp/EXf0yPI39-pNnruSXMT3JBsBXsUmJ4XYMF_-oRFjjz0CXw?e=wJcFVc 以下の例を参考にしています。 https://www.w3.org/TR/rdf11-primer/#fig4 リソースの作成にあたっては、以下のように楕円を選択します。リテラルは長方形を選択します。 プロパティの編集にあたっては、描画コネクタでノード同士を繋ぎ、以下のように「テキストの編集」からプロパティを入力します。 以下が作成例です。 リソースおよびプロパティはURIによる記述が基本です。またリテラル(長方形)から他のノードに接続することはせず、リソース(楕円)からのみ、他のノードへ接続します。 ただし、後述する変換ライブラリ側の処理になりますが、リソースおよびプロパティに単純な文字列を与えた場合には、http://example.org/を補うことで、URIとして出力します。 つまり、以下のように作成しても、上記と同じRDFデータが作成されます。 変換ライブラリ 本ライブラリについては別の記事で紹介予定です。 Microsoft Visioで作成したファイルは、vsdxファイルとして保存されます。 このvsdxファイルを入力して変換処理を行うことで、以下のような出力が得られます。 @prefix dcterms: <http://purl.org/dc/terms/> . @prefix ex: <http://example.org/> . @prefix foaf: <http://xmlns.com/foaf/0.1/> . ex:BOB ex:knows ex:Alice ; ex:type foaf:Person ; foaf:topic_interest <http://www.wikidata.org/entity/Q12418> . ex:subject ex:predicate "リテラル" . <http://www.wikidata.org/entity/Q12418> dcterms:title "Mona Lisa" . また、神崎正英氏が作成された可視化ツールを使うことで、以下のようなネットワーク図が得られます。 この可視化図の作成には、以下の記事で紹介した方法を使用しています。 ...

「ARC2によるRDFグラフの視覚化」をPythonで利用する

「ARC2によるRDFグラフの視覚化」をPythonで利用する

概要 神崎正英氏が公開する「ARC2によるRDFグラフの視覚化」をPythonで利用させていただく機会がありましたので、備忘録です。 「ARC2によるRDFグラフの視覚化」の公開ページは以下です。 https://www.kanzaki.com/works/2009/pub/graph-draw Turtle、RDF/XML、JSON-LD、TriGもしくはMicrodataで記述したRDFを入力として、可視化結果をpngやsvgファイルで取得することができます。 Pythonでの利用例 import requests text = "@prefix ns1: <http://example.org/propery/> .\n\n<http://example.org/bbb> ns1:aaa \"ccc\" ." output_path = "./graph.png" # POSTリクエストに必要なデータ url = "https://www.kanzaki.com/works/2009/pub/graph-draw" data = { "RDF": text, "rtype": "turtle", "gtype": "png", "rankdir": "lr", "qname": "on", } # POSTリクエストを送信 response = requests.post(url, data=data) # 応答がPNG画像でない場合、内容を確認 if response.headers['Content-Type'] != 'image/png': print("応答はPNG画像ではありません。内容を表示します:") # print(response.text[:500]) # 最初の500文字を表示 # [:500] else: os.makedirs(os.path.dirname(output_path), exist_ok=True) # 応答をPNGファイルとして保存 with open(output_path, 'wb') as f: f.write(response.content) まとめ RDFデータの可視化にあたり、参考になりましたら幸いです。

Japan Search利活用スキーマを使ったentity-lookupの試作

Japan Search利活用スキーマを使ったentity-lookupの試作

概要 以下の記事の続きです。 Japan Searchの利活用スキーマを使って、cwrcのentity-lookupを行うパッケージを試作します。 デモ 以下のページでお試しいただけます。 https://nakamura196.github.io/nuxt3-demo/entity-lookup/ Person, Place, Organizationなどの種別ごとに、JPS, Wikidata, VIAFにentity-lookupを行います。 ライブラリ 以下で公開しています。 https://github.com/nakamura196/jps-entity-lookup cwrcですでに公開されていたリポジトリhttps://github.com/cwrc/wikidata-entity-lookupをベースに、主に以下のファイルをJapan Searchの利活用スキーマに合わせて修正しました。 https://github.com/nakamura196/jps-entity-lookup/blob/main/src/index.js インストール方法 以下が参考になりました。 https://qiita.com/pure-adachi/items/ba82b03dba3ebabc6312 開発中 開発中のライブラリをインストールする場合には、以下のようにインストールしました。 pnpm i /Users/nakamura/xxx/jps-entity-lookup GitHubから GitHubからは以下のようにインストールします。 pnpm i nakamura196/jps-entity-lookup まとめ 参考になりましたら幸いです。

RDFストアのトリプル数を数える2: 共起頻度

RDFストアのトリプル数を数える2: 共起頻度

概要 RDFトリプルに対して、共起頻度を数える機会がありましたので、備忘録です。以下の記事に続き、今回もジャパンサーチのRDFストアを例にします。 例1 以下は、刀剣タイプのインタンスのうち、共通を作成者(schema:creator )を持つトリプルの数をカウントしています。フィルタによって、同一のインスタンスを避け、また重複カウントを避けています。 select (count(*) as ?count) where { ?entity1 a type:刀剣; schema:creator ?value . ?entity2 a type:刀剣; schema:creator ?value . FILTER(?entity1 != ?entity2 && ?entity1 < ?entity2) } https://jpsearch.go.jp/rdf/sparql/easy/?query=select+(count(*)+as+%3Fcount)+where+{ ++%3Fentity1+a+type%3A刀剣%3B +++++++++++++schema%3Acreator+%3Fvalue+. ++%3Fentity2+a+type%3A刀剣%3B +++++++++++++schema%3Acreator+%3Fvalue+. ++FILTER(%3Fentity1+!%3D+%3Fentity2+%26%26+%3Fentity1+<+%3Fentity2) } 例2 具体的なトリプルを表示してみます。 select ?entity1 ?entity2 ?value where { ?entity1 a type:刀剣; schema:creator ?value . ?entity2 a type:刀剣; schema:creator ?value . FILTER(?entity1 != ?entity2 && ?entity1 < ?entity2) } https://jpsearch.go.jp/rdf/sparql/easy/?query=select+%3Fentity1+%3Fentity2+%3Fvalue+where+{ ++%3Fentity1+a+type%3A刀剣%3B +++++++++++++schema%3Acreator+%3Fvalue+. ++%3Fentity2+a+type%3A刀剣%3B +++++++++++++schema%3Acreator+%3Fvalue+. ++FILTER(%3Fentity1+!%3D+%3Fentity2+%26%26+%3Fentity1+<+%3Fentity2) } ...

RDFストアのトリプル数を数える

RDFストアのトリプル数を数える

概要 RDFストアのトリプル数を数える方法について、備忘録です。 今回は、ジャパンサーチのRDFストアを例にします。 https://jpsearch.go.jp/rdf/sparql/easy/ トリプル数 以下でトリプル数をカウントできます。 SELECT (COUNT(*) AS ?NumberOfTriples) WHERE { ?s ?p ?o . } 結果は以下です。 https://jpsearch.go.jp/rdf/sparql/easy/?query=SELECT+(COUNT(*)+AS+%3FNumberOfTriples) WHERE+{ ++%3Fs+%3Fp+%3Fo+. } 本記事の執筆時点(2024年5月6日)において、12億8064万5565トリプルありました。 NumberOfTriples 1280645565 特定のプロパティでどれだけのトリプルが接続されているか 次に、特定のプロパティでどれだけのトリプルが接続されているかをカウントしてみます。以下がクエリ例です。 SELECT ?p (COUNT(*) AS ?count) WHERE { ?s ?p ?o . } GROUP BY ?p ORDER BY DESC(?count) 結果は以下です。 https://jpsearch.go.jp/rdf/sparql/easy/?query=SELECT+%3Fp+(COUNT(*)+AS+%3Fcount) WHERE+{ ++%3Fs+%3Fp+%3Fo+. } GROUP+BY+%3Fp ORDER+BY+DESC(%3Fcount) schema:description で接続されるトリプルが399,447,925件、約4億件あることがわかります。 p count schema:description 399447925 rdf:type 84363276 jps:relationType 72908233 jps:value 72214780 schema:name 57377225 schema:provider 52481873 指定したプロパティを使用して、特定のサブジェクトとオブジェクトのタイプの組み合わせをカウントする 上記の打ち合わせの概要を知るにあたり、?subject と ?object が schema:description プロパティによって結びつけられている場合のサブジェクトタイプとオブジェクトタイプの組み合わせをカウントします。 SELECT ?subjectType ?objectType (COUNT(*) AS ?count) WHERE { ?subject schema:description ?object . ?subject rdf:type ?subjectType . optional {?object rdf:type ?objectType . } } GROUP BY ?subjectType ?objectType ORDER BY DESC(?count) 結果は以下です。 ...

学習指導要領LODを使う

学習指導要領LODを使う

概要 学習指導要領LODは以下のように説明されています。 学習指導要領LODは、文部科学省が公開している学習指導要領と教育要領の内容・コードおよび関連する情報をLinked Open Data (LOD) として公開します。LOD化の対象は、現在公開されている全ての学校種別の新旧学習指導要領と教育要領(一部改正を含む)コード表の最新版です。 https://jp-cos.github.io/ このデータセットを使う機会がありましたので、使い方に関する備忘録です。 SPARQLエンドポイントの構築 今回は、DYDRAを使用します。 https://dydra.com/ 以下が登録した結果です。 https://dydra.com/ut-digital-archives/jp-cos/ Snorqlの作成 SPARQLエンドポイントを使いやすくするため、Snorqlを用意しました。 https://sukilam-educational-metadata.github.io/etc/jp-cos/ 検索例 以下のクエリにより、「学習指導要領(jp-cos:CourseOfStudy)」毎の「細目(jp-cos:Item)」の数を把握することができます。 https://sukilam-educational-metadata.github.io/etc/jp-cos/?query=PREFIX+rdf%3A+<http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23> PREFIX+jp-cos%3A+<https%3A%2F%2Fw3id.org%2Fjp-cos%2F> SELECT+%3FcourseOfStudy+(count(distinct+%3Fs)+as+%3Fcount)++WHERE+{ ++%3FcourseOfStudy+rdf%3Atype+<https%3A%2F%2Fw3id.org%2Fjp-cos%2FCourseOfStudy>+.+ ++%3Fs+jp-cos%3AcourseOfStudy+%3FcourseOfStudy+.+ }+ GROUP+BY+%3FcourseOfStudy ORDER+BY+desc(%3Fcount) Yasguiで可視化する 以下がYasuiでの可視化例です。UpperSecondary(高等学校, jp-cos:school/UpperSecondary)の細目が多いようです。 https://api.triplydb.com/s/Vhi86jwiH まとめ 学習指導要領LODの作成者の方々に感謝いたします。 学習指導要領LODの利用にあたり、参考になりましたら幸いです。

メディア芸術データベースのSPARQLエンドポイントをYasguiで使ってみる

メディア芸術データベースのSPARQLエンドポイントをYasguiで使ってみる

概要 メディア芸術データベースが2024/1/31に正式公開されました。 https://mediaarts-db.artmuseums.go.jp/ 本記事では、メディア芸術データベースのSPARQLエンドポイントについて、Yasguiでの利用例を紹介します。Yasguiについては、以下の記事も参考になりましたら幸いです。 利用例 マンガ単行本の公開数の時系列変化 https://api.triplydb.com/s/AqIH1InmC ゲームパッケージの公開数の時系列変化 https://api.triplydb.com/s/L2REuOshZ “異世界"または"転生”‘を含むマンガ単行本公開数の時系列変化 https://api.triplydb.com/s/4ciTNJGb2 “かっぱ"を含む出版物の(ジャンル別)時系列変化 https://api.triplydb.com/s/LbzMGMo-O PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX schema: <https://schema.org/> PREFIX neptune-fts: <http://aws.amazon.com/neptune/vocab/v01/services/fts#> SELECT ?公開年 ?genre (COUNT(DISTINCT ?resource) AS ?node) WHERE { SERVICE neptune-fts:search { neptune-fts:config neptune-fts:endpoint "https://vpc-mediaarts-db-blue-gob5vblr7tbjai7huexqntpq4i.ap-northeast-1.es.amazonaws.com" . neptune-fts:config neptune-fts:field schema:name . neptune-fts:config neptune-fts:queryType "query_string" . neptune-fts:config neptune-fts:query '"かっぱ"' . neptune-fts:config neptune-fts:return ?resource . } ?resource schema:genre ?genre ; schema:datePublished ?公開年月日 . BIND (SUBSTR(?公開年月日, 1, 4) AS ?公開年) } GROUP BY ?公開年 ?genre ORDER BY DESC(?公開年) まとめ メディア芸術データベースのSPARQLエンドポイントの利用例として、参考になりましたら幸いです。

EASY RDFを用いてJSON-LDのデータをRDF/XMLやTurtleに変換してみる

EASY RDFを用いてJSON-LDのデータをRDF/XMLやTurtleに変換してみる

概要 以下の記事で、エクスポート機能を追加する方法を紹介しました。 そのエクスポート方法の一つとして、JSON-LDがあります。 今回は、このJSON-LDをRDF/XMLやTurtleに変換してみます。 使用するツール 今回は、以下のEASY RDFを使用します。 https://www.easyrdf.org/converter 先のOmeka Sのエクスポートによって得られる以下のJSON-LDの内容をコピーします。 { "@context": "https://omekas.aws.ldas.jp/xxx/omekas/api-context", "@id": "https://omekas.aws.ldas.jp/xxx/omekas/api/items/12", "@type": "o:Item", "o:id": 12, "o:is_public": true, "o:owner": { "@id": "https://omekas.aws.ldas.jp/xxx/omekas/api/users/1", "o:id": 1 }, "o:resource_class": null, "o:resource_template": null, "o:thumbnail": null, "o:title": "aaa", "thumbnail_display_urls": { "large": "https://omekas.aws.ldas.jp/xxx/omekas/files/large/4f57960c4471c954c6d3aac0a23bd441a6f4eb8b.jpg", "medium": "https://omekas.aws.ldas.jp/xxx/omekas/files/medium/4f57960c4471c954c6d3aac0a23bd441a6f4eb8b.jpg", "square": "https://omekas.aws.ldas.jp/xxx/omekas/files/square/4f57960c4471c954c6d3aac0a23bd441a6f4eb8b.jpg" }, "o:created": { "@value": "2023-07-26T22:52:31+00:00", "@type": "http://www.w3.org/2001/XMLSchema#dateTime" }, "o:modified": { "@value": "2023-10-17T06:56:16+00:00", "@type": "http://www.w3.org/2001/XMLSchema#dateTime" }, "o:media": [ { "@id": "https://omekas.aws.ldas.jp/xxx/omekas/api/media/13", "o:id": 13 } ], "o:item_set": [], "o:site": [ { "@id": "https://omekas.aws.ldas.jp/xxx/omekas/api/sites/1", "o:id": 1 } ], "dcterms:title": [ { "type": "literal", "property_id": 1, "property_label": "Title", "is_public": true, "@value": "aaa" } ], "dcterms:creator": [ { "type": "literal", "property_id": 2, "property_label": "Creator", "is_public": true, "@value": "bbb" } ] } そして、EASY RDFのInput Dataのフォームに貼り付けます。 ...

ジャパンサーチ利活用スキーマについて、最新の更新年ごとのアイテム数を視覚化する

ジャパンサーチ利活用スキーマについて、最新の更新年ごとのアイテム数を視覚化する

ジャパンサーチ利活用スキーマについて、最新の更新年ごとのアイテム数を視覚化してみましたので、その備忘録です。 https://api.triplydb.com/s/bfcE2qF65 以下のクエリをベースとしています。 https://zenn.dev/nakamura196/books/a4534e306de7e7/viewer/e38587 参考になりましたら幸いです。

Cultural JapanのRDFストアに格納されている展覧会情報の活用

Cultural JapanのRDFストアに格納されている展覧会情報の活用

概要 Cultural JapanのRDFストアには、展覧会に関する情報が格納されています。rdf:typeにtype:展覧会を指定する以下のようなクエリを用いて、一覧を取得できます。 PREFIX type: <https://jpsearch.go.jp/term/type/> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> select distinct * where { ?s rdf:type type:展覧会; rdfs:label ?label . } https://ld.cultural.jp/snorql/?query=select+distinct+*+where+{ %3Fs+rdf%3Atype+type%3A展覧会%3B +++++++rdfs%3Alabel+%3Flabel+.+ } ++ これらの展覧会の情報を活用するための一例について紹介します。 展覧会の一覧 各展覧会は、jps:temporalやjps:spatialといった値を持っています。(これらは複数の値を持つ場合があります。) https://ld.cultural.jp/data/apmoa-exhib-2021-soga そこで以下のようなクエリにより、展覧会のメタデータを含む、一覧の取得を行うことができます。 PREFIX type: <https://jpsearch.go.jp/term/type/> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX schema: <http://schema.org/> PREFIX jps: <https://jpsearch.go.jp/term/property#> select distinct ?s ?label ?access ?image (GROUP_CONCAT(DISTINCT ?spatial_labels; separator="|") AS ?spacial_label) (GROUP_CONCAT(DISTINCT ?temporal_labels; separator="|") AS ?temporal_label) (GROUP_CONCAT(DISTINCT ?jps_temporals; separator="|") AS ?jps_temporal) (GROUP_CONCAT(DISTINCT IF(BOUND(?descriptions), CONCAT(str(?descriptions), IF(lang(?descriptions) != "", CONCAT("@", lang(?descriptions)), "")), ""); separator="|") AS ?description) (COUNT(DISTINCT ?workFeatured) AS ?countOfWorkFeatured) where { ?s rdf:type type:展覧会; rdfs:label ?label . optional { ?s jps:accessInfo/schema:provider/rdfs:label ?access . } optional { ?s schema:spatial/rdfs:label ?spatial_labels . } optional { ?s schema:temporal/rdfs:label ?temporal_labels . } optional { ?s jps:temporal/schema:description ?jps_temporals . } optional { ?s schema:description ?descriptions . } optional { ?s schema:image ?image . } optional {?s schema:workFeatured ?workFeatured } } group by ?s ?label ?spatial_label ?temporal_label ?description ?jps_temporal ?access ?image order by ?s https://ld.cultural.jp/snorql/?query=PREFIX+type%3A+<https%3A%2F%2Fjpsearch.go.jp%2Fterm%2Ftype%2F> PREFIX+rdfs%3A+<http%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23> PREFIX+schema%3A+<http%3A%2F%2Fschema.org%2F> PREFIX+jps%3A+<https%3A%2F%2Fjpsearch.go.jp%2Fterm%2Fproperty%23> select+distinct+ %3Fs+%3Flabel+%3Faccess+%3Fimage (GROUP_CONCAT(DISTINCT+%3Fspatial_labels%3B+separator%3D"|")+AS+%3Fspacial_label) (GROUP_CONCAT(DISTINCT+%3Ftemporal_labels%3B+separator%3D"|")+AS+%3Ftemporal_label) (GROUP_CONCAT(DISTINCT+%3Fjps_temporals%3B+separator%3D"|")+AS+%3Fjps_temporal) (GROUP_CONCAT(DISTINCT+IF(BOUND(%3Fdescriptions)%2C+CONCAT(str(%3Fdescriptions)%2C+IF(lang(%3Fdescriptions)+!%3D+""%2C+CONCAT("%40"%2C+lang(%3Fdescriptions))%2C+""))%2C+"")%3B+separator%3D"|")+AS+%3Fdescription) (COUNT(DISTINCT+%3FworkFeatured)+AS+%3FcountOfWorkFeatured) where+{ %3Fs+rdf%3Atype+type%3A展覧会%3B +++++++rdfs%3Alabel+%3Flabel+.+ ++ optional+{+%3Fs+jps%3AaccessInfo%2Fschema%3Aprovider%2Frdfs%3Alabel+%3Faccess+.++} ++optional+{+%3Fs+schema%3Aspatial%2Frdfs%3Alabel+%3Fspatial_labels+.+} ++++optional+{+%3Fs+schema%3Atemporal%2Frdfs%3Alabel+%3Ftemporal_labels+.+} ++++optional+{+%3Fs+jps%3Atemporal%2Fschema%3Adescription+%3Fjps_temporals+.+} ++++optional+{+%3Fs+schema%3Adescription+%3Fdescriptions+.+} ++++++optional+{+%3Fs+schema%3Aimage+%3Fimage+.+} ++optional+{%3Fs+schema%3AworkFeatured+%3FworkFeatured+} } group+by+%3Fs+%3Flabel+%3Fspatial_label+%3Ftemporal_label+%3Fdescription+%3Fjps_temporal+%3Faccess+%3Fimage order+by+%3Fs ...

ORCIDのRDFを確認する

ORCIDのRDFを確認する

ORCIDのRDFを確認する方法です。 以下のORCID IDを対象にします。 https://orcid.org/0000-0001-8245-7925 閲覧には、神崎正英氏が開発されているLinked Data Browswerを使用します。 https://www.kanzaki.com/works/2014/pub/ld-browser 例えば、以下のURLからRDFデータを閲覧できます。 https://www.kanzaki.com/works/2014/pub/ld-browser?u=https%3A%2F%2Forcid.org%2F0000-0001-8245-7925 具体的なRDFデータは以下です。 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:prov="http://www.w3.org/ns/prov#" xmlns:pav="http://purl.org/pav/" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:gn="http://www.geonames.org/ontology#" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:xsd="http://www.w3.org/2001/XMLSchema#"> <foaf:PersonalProfileDocument rdf:about="http://pub.orcid.org/orcid-pub-web/experimental_rdf_v1/0000-0001-8245-7925"> <pav:createdOn rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime" >2017-07-14T00:27:17.421Z</pav:createdOn> <prov:generatedAtTime rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime" >2022-12-14T02:40:04.693Z</prov:generatedAtTime> <pav:lastUpdateOn rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime" >2022-12-14T02:40:04.693Z</pav:lastUpdateOn> <pav:createdWith rdf:resource="https://orcid.org"/> <prov:wasAttributedTo> <prov:Person rdf:about="https://orcid.org/0000-0001-8245-7925"> <foaf:account> <foaf:OnlineAccount rdf:about="https://orcid.org/0000-0001-8245-7925#orcid-id"> <rdfs:label>0000-0001-8245-7925</rdfs:label> <foaf:accountName>0000-0001-8245-7925</foaf:accountName> <foaf:accountServiceHomepage rdf:resource="https://orcid.org"/> </foaf:OnlineAccount> </foaf:account> <foaf:publications> <foaf:Document rdf:about="https://orcid.org/0000-0001-8245-7925#workspace-works"/> </foaf:publications> <foaf:page rdf:resource="https://researchmap.jp/nakamura.satoru/?lang=english"/> <foaf:based_near> <gn:Feature> <gn:parentCountry> <rdf:Description rdf:about="http://sws.geonames.org/1861060/"> <gn:name>Japan</gn:name> <gn:countryCode>JP</gn:countryCode> <rdfs:label>Japan</rdfs:label> </rdf:Description> </gn:parentCountry> <gn:countryCode>JP</gn:countryCode> </gn:Feature> </foaf:based_near> <foaf:familyName>Nakamura</foaf:familyName> <foaf:givenName>Satoru</foaf:givenName> <rdfs:label>Satoru Nakamura</rdfs:label> <rdf:type rdf:resource="http://xmlns.com/foaf/0.1/Person"/> </prov:Person> </prov:wasAttributedTo> <pav:createdBy rdf:resource="https://orcid.org/0000-0001-8245-7925"/> <foaf:maker rdf:resource="https://orcid.org/0000-0001-8245-7925"/> <foaf:primaryTopic rdf:resource="https://orcid.org/0000-0001-8245-7925"/> </foaf:PersonalProfileDocument> </rdf:RDF> 参考になりましたら幸いです。

ExcelからRDFを作成する

ExcelからRDFを作成する

概要 RDFデータの作成にあたり、Excelで作成したデータから、RDFデータに変換するPythonライブラリを試作しました。まだまだ中途半端な状態ですが、備忘録です。 ノートブック 以下のノートブックから試用いただけます。 https://colab.research.google.com/github/nakamura196/ndl_ocr/blob/main/ExcelからRDFデータを作成する.ipynb 変換元のExcelデータ 以下のようなExcelファイルを作成します。 https://docs.google.com/spreadsheets/d/16SufG69_aZP0u0Kez8bisImGvVb4-z990AEPesdVxLo/edit#gid=0 上記の例では、「prefix」という名前のシートに、使用するprefixの情報をまとめています。 また、「target」というシートに、具体的なデータを入力しています。Omeka SのBulk Importの仕様を参考にして、言語ラベル「@ja」や、type「^^uri」などを指定します。 上記のデータの作成方法については、改めて説明ページを用意したいと思います。 変換処理 上記のノートブックを参考にしてください。prefixの情報を格納したシートと、処理対象のデータを含むシートを指定して、RDFデータへの変換処理を実施します。 まとめ 同様のニーズに答える既存のツールが多々あるかと思いますが、参考になりましたら幸いです。

ShExファイルを作成してみる

ShExファイルを作成してみる

概要 ShExは、wikipediaにおいて、以下のように説明されています。 Shape Expressionsは、Resource Description Frameworkを検証および記述するためのデータモデリング言語 このShExファイルの作成を試みましたので、その備忘録です。 shexファイルを作成する 今回、data/tmp/merged.ttlにあるRDFデータを起点とします。shexerを用いて、RDFデータからshexファイルを作成します。 pip install shexer RDFデータ内のクラスの一覧を取得する from rdflib import Graph input_nt_file = "data/tmp/merged.ttl" graph = Graph() graph.parse(input_nt_file, format="turtle") knows_query = """ SELECT DISTINCT ?cls WHERE { ?a a ?cls }""" qres = graph.query(knows_query) target_classes = [] for row in qres: target_classes.append(f"{row.cls}") target_classes 取得したクラスを対象に、処理を行う。 from shexer.shaper import Shaper from shexer.consts import NT, SHEXC, SHACL_TURTLE, TURTLE shaper = Shaper(target_classes=target_classes, input_format=TURTLE, graph_file_input=input_nt_file) output_file = "data/tmp/shapes.shex" shaper.shex_graph(output_file=output_file, acceptance_threshold=0.1) print("Done!") 結果、以下のようなshexファイルが作成されました。 :教育メタデータ { exp:指導要領コード IRI +; # 100.0 % # 12.307692307692308 % obj: IRI. Cardinality: {7} rdf:type [data:教育メタデータ] ; # 100.0 % schema:geo IRI +; # 100.0 % # 21.53846153846154 % obj: IRI. Cardinality: {1} # 12.307692307692308 % obj: IRI. Cardinality: {3} # 12.307692307692308 % obj: IRI. Cardinality: {6} # 10.76923076923077 % obj: IRI. Cardinality: {2} exp:学年 @:学年 +; # 100.0 % # 21.53846153846154 % obj: @:学年. Cardinality: {5} # 16.923076923076923 % obj: @:学年. Cardinality: {1} # 10.76923076923077 % obj: @:学年. Cardinality: {6} # 10.76923076923077 % obj: @:学年. Cardinality: {4} # 10.76923076923077 % obj: @:学年. Cardinality: {3} exp:教科 @:教科 +; # 100.0 % # 18.461538461538463 % obj: @:教科. Cardinality: {8} # 15.384615384615385 % obj: @:教科. Cardinality: {3} # 12.307692307692308 % obj: @:教科. Cardinality: {6} # 12.307692307692308 % obj: @:教科. Cardinality: {4} # 10.76923076923077 % obj: @:教科. Cardinality: {5} rdfs:label xsd:string ; # 100.0 % exp:学習指導案 IRI ; # 100.0 % exp:時代 @:時代 *; # 96.92307692307692 % obj: @:時代. Cardinality: + # 23.076923076923077 % obj: @:時代. Cardinality: {2} # 15.384615384615385 % obj: @:時代. Cardinality: {1} # 15.384615384615385 % obj: @:時代. Cardinality: {3} # 13.846153846153847 % obj: @:時代. Cardinality: {4} # 12.307692307692308 % obj: @:時代. Cardinality: {6} ... shexをTurtle形式に変換する ここから、上記で作成したshexファイルをTurtle形式に変換してみます。 ...

w3id.orgを用いた永続識別子の取得とSnorqlへのリダイレクト

w3id.orgを用いた永続識別子の取得とSnorqlへのリダイレクト

概要 以下のようなRDFデータの公開ページを作成しました。 https://sukilam-educational-metadata.github.io/ 特に、以下のページから、SPARQLおよびSnorqlを用いたRDFデータに対する検索を行うことができます。Snorqlの利用にあたっては、「Snorql for Japan Search」を利用させていただいています。画面下部のクエリ例からお試しください。 https://sukilam-educational-metadata.github.io/snorql/ 本ページの公開にあたり、w3id.orgを用いた永続識別子の取得とSnorqlへのリダイレクトを行いましたので、その備忘録です。 SPARQLエンドポイントの準備 Dydraを用いてSPARQLエンドポイントを構築しました。 Snorqlの準備 Snorql for Japan Searchについては、以下を参考にしてください。 https://www.kanzaki.com/works/ld/jpsearch/snorql_ldb-about Snorqlのダウンロードについては、以下などを参考にしてください。 https://tech.ldas.jp/ja/posts/6b7c5484b2f161/#snorqlの設定 またSnorqlのカスタマイズ方法については、以下などを参考にしてください。 公開ページの準備 今回は、GitHub Pagesを用いた公開ページの作成を行いました。まず、以下の組織アカウントを作成しました。 https://github.com/sukilam-educational-metadata そして以下のリポジトリを作成しました。 https://github.com/sukilam-educational-metadata/sukilam-educational-metadata.github.io GitHub Pagesを有効にすることで、以下URLから公開ページにアクセスできます。 https://sukilam-educational-metadata.github.io/ 先に準備したSnorqlも設定することで、以下のURLから、Snorqlにアクセスできます。 https://sukilam-educational-metadata.github.io/snorql/ w3id.orgを用いた永続識別子の取得 最後に、w3id.orgを用いた永続識別子の取得について説明します。w3id.orgの使用にあたっては、以下などを参考にしました。 https://www.jstage.jst.go.jp/article/jkg/68/7/68_361/_pdf まず、以下のサイトをForkします。 https://github.com/perma-id/w3id.org そして、以下のプルリクエストを送りました。 https://github.com/perma-id/w3id.org/pull/3126/files 以下のように記述することで、https://w3id.org/sukilam-educational-metadata/学年/小6にアクセスすると、https://sukilam-educational-metadata.github.io/snorql/?describe=https://w3id.org/sukilam-educational-metadata/学年/小6に転送されます。 RewriteRule ^(.*) https://sukilam-educational-metadata.github.io/snorql/?describe=https://w3id.org/sukilam-educational-metadata/$1 [R=302,L] (※この記述内容については、改善の余地が多いと思います。) 考察 Snorql(SPARQLエンドポイント)を用いたリダイレクトを行うことで、URI毎のページを動的に生成できることが利点です。一方、SPARQLエンドポイント(今回はDydra)に依存することになります。したがって、より安定した長期的な運用を目指す場合には、URI毎に静的なページを用意する方法のほうが適していると考えられます。 用途や運用環境に応じて、適切な手段を選択するのがよさそうです。 まとめ RDFやLODの公開にあたり、本取り組みが参考になりましたら幸いです。