アップストリームの作者が実際に作っているものです。一般にLaTeXやフォントパッケージの場合は、カテゴリPackageかConTeXtのいずれかです。binディレクトリにインストールされ、実行可能なファイルを意味する”バイナリ”ファイルです。これらは実際にはスクリプトであり、バイナリであり、様々な形です。基本パッケージとバイナリパッケージが含まれており、他のコレクションに依存する場合があります。コレクションの集合が利用可能なファイルのパーティションであることを保証します。Debianなどのディストリビューターは、異なるパッケージに同じファイルが含まれないようにします。インストール時にユーザーに提示されるトップレベルのグループです。それらはコレクションや他のパッケージに依存し、意味のある選択肢を提供しようとします。Database自体は、Debianパッケージデータベースの後にモデル化され、各パッケージのスタンザ(段落)を含みます。ConTeXt)、および約181,839ファイルあります。Neo4jでの表現グラフは比較的単純明快な構造で、各パッケージと各ファイルに別々の種類のノードで表現しています。エッジ(辺、関係)はdepends(依存関係)、includes(ファイルはパッケージに含まれている関係)、包含(パッケージはあるtlpdbに含まれてる関係)です。Databaseを読み込んで解析し、各ノードタイプと各リレーションタイプのCSVファイルを生成する単純なPerlスクリプトtl-dump-neo4jを使用しました。neo4j-import使用してNeo4jデータベースにインポートされました。3つのフィールド(名前とリビジョンを:で区切ったUUID、パッケージの名前とリビジョン)各ノードタイプに対して、1つのcsvファイルが生成されました。Packagesを含むファイルnode-Package.csv例:uuid:ID,name,revisioncslatex:47536,cslatex,47536mcf2graph:48046,mcf2graph,48046substances:40989,substances,40989layouts:42428,layouts,42428guide-to-latex:45712,guide-to-latex,45712データベースに含まれるファイルについては、ファイル名を識別子として使用します。したがって、それぞれのCSVには1つのフィールド、ファイル名(空白が間違っていないことを確認するために引用符で囲みます)のみが含まれています。使用されているtlpdbの、現在のバージョンを運ぶ識別子revisionのみのノードタイプTLPDBがあります。includes)は、割り当てられたUUIDを使用して関係を定義しました。パッケージの場合は、ファイル名のname:revisionです。edge-depends.csvの開始点を以下に示します。:START_ID,:END_IDcslatex:47536,csplain:48563cslatex:47536,latex:47860cslatex:47536,cm:45811cslatex:47536,tex-ini-files:40533cslatex:47536,latex-fonts:28888cslatex:47536,hyphen-base:48303includes関係の場合にのみ、ファイルの種類(ファイルがtlpdbにあるグループに従ってrun/bin/doc/src)を与える追加のタグを追加しました。edge-includes.csvの開始点を以下に示します。:START_ID,type,:END_IDlibertinus-type1:48618,run,"texmf-dist/fonts/tfm/public/libertinus-type1/LibertinusSans-tosf-sc-ly1.tfm"sourcesanspro:42852,run,"texmf-dist/fonts/tfm/adobe/sourcesanspro/SourceSansPro-ExtraLight-tlf-sc-ly1.tfm"cbfonts:31624,run,"texmf-dist/fonts/tfm/public/cbfonts/grxc0700.tfm"clearsans:34405,doc,"texmf-dist/doc/fonts/clearsans/clear-samples.pdf"fonts-tlwg:47499,run,"texmf-dist/fonts/tfm/public/fonts-tlwg/rkinnari_o.tfm"最後の関係はcontainsで、tlpdbリビジョンと含まれているパッケージ間の接続を設定します。edge-contains.csvの開始点を以下に示します。neo4j-importへの簡単な呼び出しができ、すぐに使えるNeo4jデータベースが作成されました。GBサンプル・クエリSQLに似てるCypherというグラフクエリ言語を使います。Cypherでは、グラフに入っているデータを検索できますが、Cypherの入門はここやここを参考してください。1すべてのスキーマを返します。s;2スキーマのすべての依存関係を、別のものに戻してからコレクションに戻します。p;ここでは、LABELSを使用してノードのすべてのラベルを検索します。p;幸いなことに、コレクションだけが複数の依存のターゲットになります。*演算子を使用して任意の長いパスを検索します。驚いたことに、ConTeXtがそれ自身に依存するという結果となりました。f;幸いにも、ここでは同様の結果にはなりませんでした。これは毎回、単純なgrep/awkプログラムでチェックされます。p,f;Neo4jによるグラフアルゴリズムNeo4jチームは、グラフ・アルゴリズムのライブラリーをプラグインとして提供しています。このプラグインには色々なグラフ関係の関数が含まれています。Githubページからダウンロード(現在にはgraph-algorithms-algo-3.4.7.0.jar)して、Neo4jインストールのpluginsフォルダに入れることでインストールことができます。Debianでは/var/lib/neo4j/plugins/です。/etc/neo4j/neo4j.conf)に次の行を追加して実行する必要があります。dbms.security.procedures.unrestricted=algo.*Neo4jを再起動すると、このjarで提供されているすべてのアルゴリズムを使用する準備が整います。Googleのページランクを確認しましょう。仕事パッケージの完全な情報(リビジョン番号、カタログ情報など)をさらに解析し、ノードに保存し、定期的にデータベースを更新してパッケージの展開を確認することは興味深いでしょう。上記すべてと、実際のプレゼンテーションのスライドが1日以内で書かれていることを考慮すると、Neo4jに基づいてグラフデータベースを開発し、それを使って行っていることは、ほんの些細な手順であることがわかります。難しい部分は、ノードタイプとリレーションタイプの「正しい」セットとその属性を見つけることです。Liveデータベースの場合、それはかなり簡単で、Neo4jで簡単で直接的な表現が可能でした。neo4j)では、作成されたグラフで遊ぶことができます。)グラフのこのような簡単な例が、グラフの力を使ってより興味深いプロジェクトが開始されるのに役立つことを願っています。