Coder Social home page Coder Social logo

prickathon / prismdb Goto Github PK

View Code? Open in Web Editor NEW
12.0 4.0 9.0 3.27 MB

プリティーシリーズの情報をまとめる同人プラットフォームです

Home Page: https://prismdb.takanakahiko.me

JavaScript 0.25% Vue 30.84% TypeScript 58.77% Shell 5.38% Dockerfile 1.05% SCSS 3.71%
hacktoberfest

prismdb's Introduction

prismdb

stat

プリティーシリーズの情報をまとめるプラットフォームです

Environment

  • docker
  • docker-compose

開発

# csv(_data/)をrdf(virtuoso/)に変換する処理
$ docker-compose -f docker-compose.csv2rdf.yml up

# ローカルでサーバが立ち上がります(http://localhost:3000)
$ docker-compose build
$ docker-compose up

中身

Webアプリケーション

基本 Nuxt.js で動いていますが https://prismdb.takanakahiko.me/sparqle のみ virtuoso にプロキシされています

  • web/ : nuxtのアプリケーションがあります
  • virtuoso/(csv2rdfにより自動生成) : sparqleエンドポイント用のファイルがあります

csv2rdf

  • _data/ : RDFを生成するためのファイルがあります
  • csv2rdf/ : csv(_data/)をrdf(virtuoso/)に変換する処理があります

デプロイ

GitHub Actions -> GCP Cloud Run

  • .github/workflows/ : GitHub Actions の設定があります

コントリビューション

随時受け付けております!

  1. Forkする
  2. Cloneする
  3. Branchを新しく作る
  4. ソースコード等を編集する
  5. Pushする
  6. Pull Requestを作る

prismdb's People

Contributors

takanakahiko avatar momoyama-mirai[bot] avatar sergeant118 avatar dependabot[bot] avatar banjun avatar sue445 avatar yumechi avatar nagait84 avatar takemikami avatar github-actions[bot] avatar

Stargazers

appachan avatar kamita.satoshi avatar Sora Morimoto avatar foooomio avatar starkwang avatar  avatar adachi-tsukasa avatar Rina Mito avatar Yusuke Kataoka avatar Okuto Oyama avatar  avatar Nulluo Kikiura avatar

Watchers

 avatar James Cloos avatar  avatar adachi-tsukasa avatar

prismdb's Issues

クラス一覧のページが無い

https://prismdb.takanakahiko.me/rdfs の内容が無い.
Song, Character, Live Episode 等のクラスを列挙したい.
それぞれを,クラスのインスタンス一覧にしたい.

例えば Character をクリックすると https://prismdb.takanakahiko.me/rdfs/characters (Character一覧) へ飛ぶ

考えること

  • CSV2RDFでクラス情報を付与する仕組みが必要
  • Sparqlエンドポイントにアクセスして自動でレンダリングしたい
  • 表示形式どうする?(箇条書きで良さそう)

RDFにクラス情報が付与されない

普通はRDFで定義する URI がどのクラスのインスタンスであるか定義するらしい
例えば https://prismdb.takanakahiko.me/rdfs/characters/manaka_laala のクラスは https://prismdb.takanakahiko.me/preds/Character です.みたいな.

考えている実装方法

  • CSV2RDFで読み込む xxxx-setting.json でクラス名を指定する
  • そこで,URIを生成する処理でクラス情報をRDFに書き込む

プリチャンのキャラクターのデータを追加したい

  • カラムがプリパラと異なる(身長等が判明しているため.プリパラでも実は判明しているのだろうか.要調査)ため,ファイルを分ける?
  • keyに使う英語表記の調査が必要?
  • カラム自体も判明しているプロフィールを調査しないと決められないかも

セレパラ歌劇団の所属メンバーが時系列で変わるのでどう表現する?

参考リンク: ニコニコ大百科 プリパラの楽曲一覧

セレパラ歌劇団
紫京院ひびき(CV:斎賀みつき)
北条そふぃ(CV:久保田未夢)
東堂シオン(CV:山北早紀)
白玉みかん(CV:渡部優衣) → レオナ・ウェスト(CV:若井友希)
ファルル(CV:赤﨑千夏)

みかんからレオナに変わってるけど、どうデータ持ちましょう?

Service句が使えない

クエリ

PREFIX imas: <https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#>
PREFIX prism: <https://prismdb.takanakahiko.me/prism-schema.ttl#>

SELECT distinct (?prism_cv) {
   ?prism_s prism:cv ?prism_cv.
   service <https://sparql.crssnky.xyz/spql/imas/query> {
      ?imas_s imas:cv ?imas_cv.
   }
   filter((str(?prism_cv)=str(?imas_cv)))
}

結果

Virtuoso 42000 Error SQ070:SECURITY: Must have select privileges on view DB.DBA.SPARQL_SINV_2

SPARQL query:
define sql:big-data-const 0 
#output-format:text/html
PREFIX imas: <https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#>
PREFIX prism: <https://prismdb.takanakahiko.me/prism-schema.ttl#>

SELECT distinct (?prism_cv) {
   ?prism_s prism:cv ?prism_cv.
   service <https://sparql.crssnky.xyz/spql/imas/query> {
      ?imas_s imas:cv ?imas_cv.
   }
   filter((str(?prism_cv)=str(?imas_cv)))
}

原因と解説 : http://wiki.lifesciencedb.jp/mw/SPARQLthon20/FederatedQueryTips

ただ,上記の解説ではdockerでの運用とデプロイフローの自動化に不向きである.
下記のようなファイルを用意してbatch処理にする必要がある.

参考 : https://github.com/zorino/docker-virtuoso/blob/master/vt-cmds/enable-federated-query.sql

今晩やってみます

変換設定を複数のファイルに対して有効にしたい

現状

  • 変換設定がほとんど同じファイルが大量にある(例えばItem)
  • 仕様が変更(例えば変換設定Jsonの仕様)する場合、修正が困難

やりたいこと

  • 一つの変換設定ファイルですべてのprichan-item-*.csv が変換できるといい
  • 変換設定JSONの dataCsvPath を配列として指定可能にすると良さそう

パラメータに対して複数の値があるときに正しく表示されない

現在,パラメータに対して複数の値があるときに正しく表示されない不具合がある.

例 : https://prismdb.takanakahiko.me/api/series/pripara

{
  "http://www.w3.org/1999/02/22-rdf-syntax-ns#type": "https://prismdb.takanakahiko.me/prism-schema.ttl#Series",
  "hasEpisode": "https://prismdb.takanakahiko.me/rdfs/episode/pripara_99",
  "タイトル": "プリパラ"
}

本来であれば,hasEpisode は配列であるべきなので,複数のObject(目的語)がある際は配列として取り扱う必要がある.

事例集がほしい

https://prismdb.takanakahiko.me/sparql/

ここに行って
↓こうやるとそらみスマイルのライブ一覧が出るよ、みたいな事例集ほしい

PREFIX prism: <https://prismdb.takanakahiko.me/prism-schema.ttl#>

SELECT ?n ?st ?title
WHERE {
    ?live a prism:Live;
        prism:performer "solami_smile";
        prism:songPerformed/prism:name ?title;
        prism:liveOfEpisode ?ep.
    ?ep a prism:Episode;
        prism:話数 ?n;
        prism:サブタイトル ?st.  
}
ORDER BY ?n

とのご意見を @banjun さんよりいただきました

rdfのpathをクラス名の複数形でなく,単数形にしたい

きっかけ

もともと,「 https://prismdb.takanakahiko.me/rdfs/${クラス名を小文字にして末尾にsをつけたもの} へアクセスするとクラスのインスタンス一覧を参照できる」みたいな仕様になっていました.Characterのインスタンス一覧を表示したい場合は https://prismdb.takanakahiko.me/rdfs/characters です.

でも,そもそも複数形への変換は必ずしもsをつけるだけでもないので,あまり良くない.
実際, Series が追加された際にパスの変換にバグが発生した.

そこで

  • パスに関しては 「 https://prismdb.takanakahiko.me/rdfs/${クラス名を小文字にしたもの} へアクセスするとクラスのインスタンス一覧を参照できる」に変更したい
  • 同様に,インスタンスのURIも https://prismdb.takanakahiko.me/rdfs/${クラス名を小文字にしたもの}/${key} にしたい

基本的にURIに対してはラベルを振りたい

思ったこと

  • データ毎にラベルを振っていきたい
  • RDFのURIにアクセスした際に表示するタイトルとして表示するみたいなことが可能.このページなんかは,見出しに「manaka_laala」じゃなくて「真中らぁら」表示すべきだろう.
  • また,REST API等の利用において,labelといった仕様の変わることのないプロパティがあるのは望ましい状態であると思われる.

実装方法

  • 変換設定のJSON内で「指定のカラム」,あるいは「指定した複数のカラムの組合せ」を定義することで,それらを用いてlabelを自動生成したい.Characterなら name とかをLabelにも適用するみたいな...?

prichan-items-P.csvのitem_idに抜けがある

  • P-057,P-058,P-059
    3種類なのでP-057はワンピース型?
  • P-079,P-080,P-081,P-082
    4種類なのでトップス、ボトムス、シューズ、ヘアアクセ?
  • どちらもitem_idで検索して引っかからなかったので情報求む
    実は未実装?

CSVのカラムがnamedNodeであるかliteralであるかを指定したい

問題点

  • 目的語(Object)がnamedNode(つまりはURI)である場合でも,現在のシステムでは問答無用でリテラル(つまりは文字列)で指定される
  • 要するに目的語(Object)にURIを指定できない

考えていること

  • xxxx-columns.csv(カラム定義CSV)にて,その目的語のタイプを指定する
  • それに応じて csv2rdf でURIかリテラルか判断し,RDFへ変換する

考えるべきこと

  • リテラルの場合は多言語対応を視野に入れる?( xxxx-columns.csv で指定?)
  • プライマリデータCSVにURIを入力させることはそもそも「プライマリデータCSVを編集する人にRDFを意識させない」方針に反する?

songとteamの紐付けをどうするか検討する

概要

songとteamの紐付けを検討する

懸念事項

曲と紐付ける対象が必ずしもチームではない

  • ソロ曲がある
  • リアルなユニットが歌っているパターンもある

案1

他は変えず,紐付けるテーブルを

song vocal
make_it manaka_laala
make_it solami_smile
make_it i_ris

みたいにする.

この場合は vocal がキャラクター,チーム,リアルユニットを許容する

案2

他は変えず,チームテーブルを

key name
solami_smile SoLaMi♡SMILE
manaka_laala 真中 らぁら
i_ris i☆Ris

みたいにする.

この場合,チームテーブルは,キャラクター,チーム,リアルユニットを許容する

筐体アイテムの変換

現状

  • 筐体ゲームのアイテムCSVを追加していただいた
  • 変換設定が出来ていないので,これから作っていく

方針

  • アニメのコーデとの紐づけは今のところ考えなくてもいいと思う
  • 既存のシステムに手を入れずに,変換設定の追加のみで対応したい

考えたいところ

  • クラスはどうする?
    • プリパラのアイテムとプリチャンのアイテムは同じクラス?
    • プリパラのアイテムはプリチャンでも使えるが...
    • プリリズの石はどうする?
    • ゲームアイテムの基底クラスを用意して,プリリズとプリパラとプリチャンで分ける?
  • キーはどうする? IDをそのまま流用できるか?
  • ファイル多くなってきたので,フォルダ構造を再考する?
    • するならこのIssueで議論すべきではないが...

Web画面でのPrefix表記

  • 現在,Web画面内でSparqlレスポンス内のURLをそのまま表示している.
  • 代表的なbaseURIに関してはPrefix表記したほうがスッキリすると思われる.
  • 表の中でreplaceするだけなのでシンプルな実装になることも期待できる

トップページかどこかに事例集ほしい

prichan-itemsのcollection_termの方向性

  • 現状、表記ゆれがすごいので統一したい
    公式ページですら年号がついてたりついてなかったりしてる
  • ジュエル弾以降、通常排出にも期間がHP上で表記されている
    が、チャンネルが閉まるだけで3枠4枠目で次弾まで排出はされる
  • コラボ系や復刻系は期間が定まっている
    通常排出と違ってチャンネルが消えたらおしまい
  • そもそも書式
    文字列で「2019年1月1日~2019年2月4日」とか書かれても期間検索できないじゃん

シリーズのRDF生成&エピソードCSVからのシリーズカラム削除したい

#39 でCSV側にシリーズカラムが足されていますが、CSVを編集しやすくするという観点からは無いほうがいいと思います。RDFに変換する仮定で必要な情報だから付加しているだけであり、CSVとしてはファイル名から明らかで、ただ一種類の値しか入れてはいけない(謎)カラムが増えてしまうので。

例えば、 pripara-episodes.csv は プリパラシリーズのエピソードを入れるためのCSVで、プリ☆チャンシリーズのCSVはそもそも分かれているため、そのなかでプリパラかプリ☆チャンかどちらのエピソードかを混ぜ書きできるという自由度が要らない、という意図です。(劇場版みたいな細かいのをどうするの?は別途議論あると思いますが)

シリーズ述語の値については、変換側の知識になると思います。現状から素直にいくと、columns定義の設定で、マスターCSVの値を参照するのではなく、直値で "プリパラ" を埋める設定を書ければ、 pripara-episodes.csv のシリーズ述語の値はどれもプリパラ、だけの話で済むようになります。

ただし、この先シリーズのRDFを生成するとなると、その生成がやるべきことは

  • シリーズのリソースを定義する (たとえば rdfs/series/pripara とか)
  • シリーズのエピソードとして、各エピソードへの参照を記載する
  • 各エピソードのリソースからシリーズ述語でシリーズを参照する

となって、ここでシリーズ←→エピソード紐づけができそうなので、この生成を実装するときに、シリーズカラムをCSVから外すようにすれば、それで良さそうかな、と思います。

_data/ 内のディレクトリ構造を見直したい

現状

現在は

  • メインのデータは _data/ 直下に
  • 変換設定は _data/ocnvert-setting/ 内に
  • カラム設定は _data/ocnvert-setting/ 内に
  • schema用設定は _data/ocnvert-setting/ 内に

と,一定の規則はあるものの,初心者に分かりづらい構造となっている

提案

ファイルを,クラス別にディレクトリに格納したい.

  • Episode 系のものは _data/episode/ 内にひとまとめにする
  • Character 系のものは _data/character/ 内にひとまとめにする
  • ...

みたいな感じ.

prichan-itemsのoutfit_idを整理したい

ファイル分割をしてitem_id順にソートしたらoutfit_idの順番がめちゃくちゃになったので今のうちに整理しておきたい

  • 元々Webページのレイアウト用なので公式準拠する必要はなさそう
    プロモーション関係など公式HPに記載されているものは設定されていない
    公式HPに乗っててもパシャットアイテムは設定されていない
  • item_idとは書式が重複しないほうがよさそう?
    例えばitem_idがJ-01だったらJ-01,02,03,一式をJ01にするなど
  • item_idの昇順で振っていくと今後の追加も楽そう
  • パシャっとアイテムのoutfit_idは…?
    カービィコーデ一式は同じとして同じコラボ内のパシャっとアイテムのスターロッドは別に扱う?
    すみっコぐらしコラボも同じようなものがあったような
  • 色違いコーデを判別できるような仕組みも実は欲しい
    色違いシリーズは別にまとめる?
    新しいカラム追加する?
    outfit_idの時点で共通の命名をする?

REST API が無い

sparql が難しいので,REST APIを提供したい.

考えていること

  • https://prismdb.takanakahiko.me/api/* で提供
  • sparqleを裏で叩いてJSONを返すエンドポイントを用意すればいいよね
  • Nuxtの severmiddleware で提供したい

議論したいところ

  • 用意するエンドポイントをリスティングしたい
    • 「こういうのを作りたい」を知ることができれば,それに合わせて考えたい
  • 簡単にエンドポイントを生やすために実装難易度を下げる工夫が欲しい
  • JSON以外のフォーマットにも対応するか?

REST API のレスポンスが遅い

  • 結果をソートする部分が遅い
  • SPARQL ではなく Node 側でソートしているのが原因
  • SPARQL のクエリ発行時にソート指定も追加するようにすべき

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.