ホーム 記事一覧 ブック DH週間トピックス 検索 このサイトについて
English
SPARQL クライアントを Apache Jena Fuseki に対応させるときにハマった 3 つのこと

SPARQL クライアントを Apache Jena Fuseki に対応させるときにハマった 3 つのこと

Virtuoso / Dydra 向けに作られた SPARQL Explorer「Snorql」を Apache Jena Fuseki でも動くようにしました。SPARQL は W3C 標準ですが、エンドポイント実装ごとの挙動差は意外と大きいです。Fuseki 対応で直面した 3 つの問題と、その解決方法を記録します。 開発環境 Docker で Fuseki を起動し、ローカルで検証しました。 # docker-compose.yml services: fuseki: image: stain/jena-fuseki container_name: fuseki ports: - "3030:3030" environment: - ADMIN_PASSWORD=admin - FUSEKI_DATASET_1=test volumes: - fuseki-data:/fuseki volumes: fuseki-data: docker compose up -d # テストデータ投入 curl -X POST 'http://localhost:3030/test/data' \ -H 'Content-Type: text/turtle' \ --data-binary @testdata.ttl 1. DESCRIBE のレスポンス形式が違う 症状 Fuseki に DESCRIBE クエリを投げると、結果が画面に表示されません。コンソールには JSON パースエラーが出ていました。 ...

Virtuosoが停止した際の再起動のためのコマンド

Virtuosoが停止した際の再起動のためのコマンド

Virtuosoが停止した際の再起動のためのコマンドの備忘録です。誤りなどあるかもしれませんが、参考になりましたら幸いです。 virtuoso-tの確認 which virtuoso-t > /usr/local/bin/virtuoso-t virtuoso.iniの場所の確認 sudo find / -name virtuoso.ini > ... > /usr/local/var/lib/virtuoso/db/virtuoso.ini > ... lckファイルの削除と起動 sudo rm -rf /usr/local/var/lib/virtuoso/db/virtuoso.lck sudo /usr/local/bin/virtuoso-t +configfile /usr/local/var/lib/virtuoso/db/virtuoso.ini

Amazon EC2に立てたVirtuosoのヘルスチェックを行う

Amazon EC2に立てたVirtuosoのヘルスチェックを行う

概要 Amazon EC2に立てたVirtuosoのヘルスチェックを行う機会がありましたので、その備忘録です。 具体的には、何らかの不具合で、Virtuoso(https://xxx.zzz/sparql など)がエラーを返すようになってしまった際、その内容をメールで通知します。 方法 以下の記事で、Amazon EC2にVirtuoso RDFストアを構築する方法を紹介しています。 上記では、ELBを使用しています。上記の記事から1点だけ変更を行う必要があります。Health check pathを/に設定していますが、この部分をSPARQLエンドポイントへのパス(例えば/sparql)に変更します。 その後、以下の記事を参考に、CloudWatchやAmazon SNSの設定を行いました。 https://dev.classmethod.jp/articles/elb-healthcheck-monitoring-by-cloudwatch-alarm/ 結果 以下のようにモニタリングを行うことができるようになりました。 またアラート発生時には、以下のようなメールが届くようになりました。 You are receiving this email because your Amazon CloudWatch Alarm "virtuoso-unhealthyhostcount-alarm" in the US East (N. Virginia) region has entered the ALARM state, because "Threshold Crossed: no datapoints were received for 5 periods and 5 missing datapoints were treated as [Breaching]." at "Friday 14 July, 2023 08:05:30 UTC". View this alarm in the AWS Management Console: https://us-east-1.console.aws.amazon.com/cloudwatch/deeplink.js?region=us-east-1#alarmsV2:alarm/virtuoso-unhealthyhostcount-alarm Alarm Details: - Name: virtuoso-unhealthyhostcount-alarm - State Change: OK -> ALARM - Reason for State Change: Threshold Crossed: no datapoints were received for 5 periods and 5 missing datapoints were treated as [Breaching]. - Timestamp: Friday 14 July, 2023 08:05:30 UTC - AWS Account: xxxxxxxxxxxxxx - Alarm Arn: arn:aws:cloudwatch:us-east-1:xxxxxxxxxxxxxx:alarm:virtuoso-unhealthyhostcount-alarm Threshold: - The alarm is in the ALARM state when the metric is GreaterThanOrEqualToThreshold 1.0 for at least 5 of the last 5 period(s) of 60 seconds. Monitored Metric: - MetricNamespace: AWS/ApplicationELB - MetricName: UnHealthyHostCount - Dimensions: [TargetGroup = targetgroup/virtuoso] [AvailabilityZone = us-east-1a] [LoadBalancer = app/virtuoso/yyyyyyyyyyyyyyy] - Period: 60 seconds - Statistic: Minimum - Unit: not specified - TreatMissingData: breaching State Change Actions: - OK: - ALARM: [arn:aws:sns:us-east-1:xxxxxxxxxxxxxx:Default_CloudWatch_Alarms_Topic] - INSUFFICIENT_DATA: まとめ 同様の環境でVirtuosoを運用されている際の参考になりましたら幸いです。 ...

[備忘録]Virtuosoの使い方

[備忘録]Virtuosoの使い方

RDFストアであるVirtuosoの使い方に関する備忘録です。 登録済みのグラフURIを確認する Conductor > Linked Data > Graphs > Graphs 手動でのRDFファイルのアップロード Conductor > Linked Data > Quad Store Upload Federated Queryを有効化する 以下の記事が参考になりました。「Account Roles」の設定が必要でした。 https://community.openlinksw.com/t/enabling-sparql-1-1-federated-query-processing-in-virtuoso/2477 以上、参考になりましたら幸いです。

コマンドラインから virtuoso を手動で再起動または停止する方法

コマンドラインから virtuoso を手動で再起動または停止する方法

コマンドラインから virtuoso を手動で再起動または停止する方法です。 以下の記事を参考にしています。 https://stackoverflow.com/questions/42575039/how-to-manually-restart-or-stop-virtuoso-from-commandline 以下のようにするのがよいようです。 isql {host}:{port} {UID} {PWD} EXEC=shutdown 具体例は以下です。 isql localhost:1111 dba dba EXEC=shutdown 以下のようにisqlがnot foundの場合、パスを変更して実行します。 isql localhost:1111 dba dba EXEC=shutdown bash: isql: command not found find / -name isql /usr/local/bin/isql /root/virtuoso-opensource/binsrc/tests/isql /usr/local/bin/isql localhost:1111 dba dba EXEC=shutdown 参考になりましたら幸いです。

[RDF] URIにアクセスしたらSnorqlの画面にリダイレクトさせる設定

[RDF] URIにアクセスしたらSnorqlの画面にリダイレクトさせる設定

以下の記事の続編です。 ジャパンサーチのRDFストアを参考として、https://xxx.abc/data/123などのURLにアクセスしたら、https://xxx.abc/?describe=https://xxx.abc/data/123にリダイレクトさせる設定の備忘録です。 ジャパンサーチの例 https://jpsearch.go.jp/entity/chname/葛飾北斎 -> https://jpsearch.go.jp/rdf/sparql/easy/?describe=https://jpsearch.go.jp/entity/chname/葛飾北斎 以下のようなconfファイルを作成し、適切な場所(例:/etc/httpd/conf.d/)に配置します。 RewriteEngine on RewriteCond %{HTTP_ACCEPT} .*text/html RewriteRule ^/((data|entity)/.*) https://xxx.abc/?describe=https://xxx.abc/$1 [L,R=303] その後、apacheを再起動します。 systemctl restart httpd これにより、snorqlの画面にリダイレクトさせることができます。

AWS EC2を用いたVirtuoso RDFストアの構築

AWS EC2を用いたVirtuoso RDFストアの構築

はじめに AWS EC2を用いたVirtuoso RDFストアの構築に関する備忘録です。独自ドメイン設定、HTTPS接続、Snorqlの設置、までを行います。 本記事以外にも、Virtuoso構築に関する有益な記事が多数存在しています。参考にしてください。 https://midoriit.com/2014/04/rdfストア環境構築virtuoso編1.html https://qiita.com/mirkohm/items/30991fec120541888acd https://zenn.dev/ningensei848/articles/virtuoso_on_gcp_faster_with_cos 前提 ACM Certificateは作成済みとします。以下の記事などを参考にしてください。 https://dev.classmethod.jp/articles/specification-elb-setting/#toc-3 EC2 まずEC2のインスタンスを作成します。 Amazon Linuxを選択し、インスタンスタイプはt2.microとしました。 ネットワーク設定については、「セキュリティグループを作成する」を選択し、「HTTPSトラフィックを許可する」と「HTTPトラフィックを許可する」の両方にチェックを入れます(以下の図では、後者にのみチェックが入っている状態ですのでご注意ください)。 インスタンスの状態が「実行中」になったら、画面右上の「接続」ボタンを押して、サーバに接続します。 接続後、以下を実行して、apacheサーバを立ち上げておきます。 sudo yum install httpd -y cd /var/www/html sudo vi index.html <p>test</p> sudo systemctl start httpd sudo systemctl enable httpd ELB作成 「ロードバランシング」の「ターゲットグループ」を選択します。 「Create target group」から、[Basic configuration]で「Instances」を選択して、あとは下図のように設定します。「VPC」は先ほど立ち上げたEC2インスタンスと同じものを選択しています。 「Register targets」の画面において、画面上部でインスタンスを選択して、「Include as pending below」ボタンをクリックします。すると、下図のように、選択したインスタンスが画面下部に移動します。 その後、「Create」ボタンを押します。 次に、「ロードバランサー」から「ロードバランサーの作成」を行います。 「Create Application Load Balancer」を選択し、以下のように「Network mapping」で複数のサブネットを選択します。 次がポイントですが、「Security groups」において、選択済みの「default」を削除して、先にEC2インスタンスの作成時に作成したセキュリティグループ「lanch-wizard-XX」など選択します。 また、「Listeners and routing」は、「HTTPS」を選択して、「Forward to」に先ほど作成したターゲットグループを選択してください。 ...

Virtuoso RDFストアに対して、curlおよびpythonを用いてRDFファイルを登録・削除する方法

Virtuoso RDFストアに対して、curlおよびpythonを用いてRDFファイルを登録・削除する方法

概要 Virtuoso RDFストアに対して、curlおよびpythonを用いてRDFファイルを登録・削除する方法の備忘録です。 以下を参考にしています。 https://vos.openlinksw.com/owiki/wiki/VOS/VirtRDFInsert#HTTP PUT curl 上記のページの通りです。まず、登録用のサンプルデータとして、myfoaf.rdfを作成します。 <rdf:RDF xmlns:foaf="http://xmlns.com/foaf/0.1/"> <foaf:Person rdf:about="http://www.example.com/people/中村覚"> <foaf:name>中村覚</foaf:name> </foaf:Person> </rdf:RDF> 次に以下のコマンドを実行します。 curl -T ${filename1} ${endpoint}/DAV/home/${user}/rdf_sink/${filename2} -u ${user}:${passwd} 具定例は以下です。 curl -T myfoaf.rdf http://localhost:8890/DAV/home/dba/rdf_sink/myfoaf.rdf -u dba:dba python 実行例は以下です。以下では、rdflibを用いて、RDFファイルの作成から行なっています。またactionをdeleteに設定することで、削除を行うことができます。 import requests from rdflib import Graph, URIRef, Literal from rdflib.namespace import FOAF filename = "myfoaf.rdf" endpoint = "http://locahost:8890" user = "dba" passwd = "dba" action = "create" # action = "delete" ##### # RDFデータの作成 g = Graph() s = URIRef("http://example.org/people/中村覚") name = Literal("中村覚") g.add((s, FOAF.name, name)) # ファイルへの保存 g.serialize(destination=filename, format="xml") data = open(filename,'r', encoding='utf-8') data = data.read().encode() # 登録 url = f"{endpoint}/DAV/home/{user}/rdf_sink/{filename}" if action == "create": response = requests.put(url, data=data, auth=(user, passwd)) elif action == "delete": response = requests.delete(url, auth=(user, passwd)) print(response.status_code) まとめ 他にも方法があると思いますが、参考になりましたら幸いです。 ...