この作業は、prov 概念の観点からクエリできる SDTH データ モデルによって廃止されました。
このリポジトリは ProvONE-SDTL データ モデルを経由します。
データ モデルの目的は、SDTL で表現された情報を取得して ProvONE データ モデルに変換し、ProvONE 構文を使用してクエリを実行できるようにすることです。
対象となるクエリ:
これらのクエリはすべて ProvONE の観点から言い換えることができます。
識別子スキームを指定する主な目的の 1 つは、人間がより読みやすい識別子を確保することです。これは、クエリ結果を読み取る場合に特に重要です。識別子の命名規則は、「リンク データ パターン」のPatterned URIs
セクションから引用されました。
一般的な形式は、
#camelCaseClass/{current_type_count}
。ここで、 {current_type_count}
は特定のオブジェクトの数です。
可能かつ適切な場合、すべてのオブジェクトにrdfs:label
が必要です。最上位の provone:Workflow オブジェクトと provone:Execution オブジェクトは、特定の目的を持つ一意のノードを表すため、事前定義されたラベルを持つことができます。
スクリプト レベルの provone:Program および provone:Execution オブジェクトにもラベルがあり、スクリプト ファイルに似たエンティティを観察していることをクエリー実行者に知らせます。
ターゲット形式は JSON-LD です。 rdflib には、グラフ モデルを JSON-LD に変換するためのプラグインがあります。 Turtle は依然として目で見て解析するのが最も簡単であるため、このドキュメントの例は Turtle で提供されています。 examples/
ディレクトリ内の例は、Turtle と JSON-LD の両方にあります。
このモデルはデータ フローに関する質問を対象とした ProvONE クエリを中心にしているため、基盤となるアーキテクチャは主に ProvONE です。
ProvONE には、ワークフローと実行のコレクション、 provone:Workflow
およびprovone:Exection
を表す機能があります。これらは、一連のスクリプトの実行、またはシリーズの存在を表すために最も一般的に使用されます。これらは順序付けされていないことに注意してください。
すべての ProvONE 表現は、スクリプトのコレクションを表すための同様の外部構造を持ちます。将来の来歴は、provone:Workflow の下に各スクリプトを表すノードを収集します。遡及来歴は、provone:Execution の下に各スクリプト実行ノードを収集します。
すべての予想モデルには、C2Metadata によって解析されたスクリプトを表す provone:Program と、そのスクリプトが属する provone:Workflow があります。すべてのスクリプト レベルの provone:Program は provone:Workflow にアタッチされます。
1 つのデータ パッケージ内の 2 つのソース ファイルについて考えてみましょう。単一のprovone:Workflow
オブジェクトには、ファイルを表す両方のノードが含まれます。
すべての遡及モデルには、C2Metadata によって解析されたスクリプトの仮想実行を表す provone:Execution があります。スクリプトを表すすべての provone:Execution オブジェクトは、最上位の provone:Execution にアタッチされます。
遡及的な出所も同様に説明されます。ただし、この場合、実行の「コレクション」を示す特定のタイプはありません。代わりに、wasPartOf を使用してグループ化を示すことができます。
スクリプト ファイル内のコマンドはprovone:Program
とprovone:Execution
オブジェクトで定義されます。これらのオブジェクト間のデータ フローを記述するオブジェクトは、標準のprovone:Port
およびprovone:Entity
です。
これは言い換えることができます。基本クラス CommandBase を持つすべての SDTL オブジェクトは、provone:Program または provone:Execution に変換されます。あるいは、SDTL "commands" 配列内のすべての JSON オブジェクト オブジェクトは provone:Program または provone:Execution にマップされます。
SDTL はコマンドの実行に関して順序付けされる場合がありますが、ProvONE には順序をエンコードできるオブジェクトがないことに注意してください。
コマンドはprovone:hasSubProgram
を介してスクリプト レベルの provone:Program に関連します。たとえば、内部に 4 つのコマンドを含むスクリプトを考えてみましょう。これらは ProvONE では次のようにモデル化されます。
将来の ProvONE のデータ フローは、 provone:Port
とprovone:Workflow
オブジェクトを利用しました。たとえば、「Load」コマンドを表すこの SDTL のスニペットを考えてみましょう。コマンドは「commands」配列内にあることに注意してください。
"commands": [
{
"$type": "Load",
"fileName": "df.csv",
"software": "csv",
"producesDataframe": [
{
"dataframeName": "df",
],
}
}
]
コマンドの種類から、ファイルが使用されていることは明らかです。このファイルはport/1
として表されます。 producesDataFrame
から、データ フレームport/2
を表す新しいポートが作成されたと推測できます。
2 番目のコマンド (データ フレームを使用するコマンド) を追加すると、 provone:Channel
オブジェクトがポート オブジェクトの接続に使用されます。たとえば、「Load」コマンドを記述した以下の SDTL と、そのデータ フレームを使用して新しいデータ フレームを生成するコマンドについて考えてみましょう。
"commands": [
{
"$type": "Load",
"fileName": "df.csv",
"software": "csv",
"producesDataframe": [
{
"dataframeName": "df",
],
}
},
{
"$type": "Compute",
"consumesDataframe": [
{
"dataframeName": "df",
}
"producesDataframe": [
{
"dataframeName": "df"
}
}
]
視覚的には、
この形式を繰り返すと、スクリプト内のコマンド間に任意の長さのデータ フロー チェーンを形成できます。フォームでは常にprovone:Program
タイプを使用してコマンドを表し、 provone:Port
使用してファイルまたはデータ フレームを表します。
遡及的来歴は、コマンドが親スクリプト ファイル実行のサブ実行として表されるという点で同様に機能します。
次の図は、内部に 4 つのコマンドを含むスクリプトを示しています。
遡及的な出所を使用したデータ フローは、将来的な出所よりも少し複雑になります。
将来の来歴に使用された SDTL の「ロード」コマンドを使用して、
"commands": [
{
"$type": "Load",
"fileName": "df.csv",
"software": "csv",
"producesDataframe": [
{
"dataframeName": "df",
],
}
}
]
以下の図では、 entity/1
コマンドで使用されているファイルを表します。 entity/2
作成されたデータ フレームを表します。
データ フレームに関するメタデータの一部が保持されている場合、上記のセクションのprovone:Port
とprovone:Entity
オブジェクトは、追加のクエリにさらに役立ちます。
データ フレームの完全な説明には、内部の変数に関する情報と、ソース コード内のデータ フレームの名前が含まれます。内部に変数を含むデータ フレームをファイルからロードするコマンドを考えてみましょう。
{
"$type": "Load",
"command": "Load",
"fileName": "df.csv",
"software": "csv",
"producesDataframe": [
{
"dataframeName": "df",
"variableInventory": [
"A",
"B"
]
}
],
}
データ フレーム オブジェクトは、ProvONE の下で次の RDF 表現を持ちます。ルート ノードは provone:Port であることに注意してください。
データ フレーム オブジェクトは、関連付けられている provone:Port に接続できます。たとえば、次の SDTL では、ファイルからデータ フレームをロードし、そのデータ フレームを新しいコマンドで使用して読み取ります。
{
"$type": "Load",
"command": "Load",
"fileName": "df.csv",
"software": "csv",
"producesDataframe": [
{
"dataframeName": "df",
"variableInventory": [
"A",
"B"
]
}
]
},
{
"$type": "Compute",
"command": "Compute",
"consumesDataframe": [
{
"dataframeName": "df",
"variableInventory": [
"A",
"B"
]
}
],
"producesDataframe": [
{
"dataframeName": "df",
"variableInventory": [
"A",
"B"
]
}
]
}
この場合、2 番目のデータ フレームport/4
port/2
と同じ属性を持つことに注意してください。これは、2 つのデータ フレームが同じであることを意味するものではありません。変数の状態は異なる場合があります。このモデルは、それらがどのように違うのかを尋ねることには興味がありません。
ProvONE モデルは、SDTL からの追加プロパティを含めるように拡張できます。これは、各コマンド内で何が起こったかについてのより詳細なコンテキストを提供するために実行できます。各 SDTL コマンドには、コマンドの種類に応じて異なるメタデータ構造があります。
たとえば、KeepCases コマンドには、condition というプロパティがあります。
renames コマンドには、renames というプロパティがあります。
これらはすべて、以下に示すコマンド レベルの provone:Program にアタッチされます。
コマンドを表す provone:Program を SDTL CommandBase にすることもできるようです。これにより、よりシームレスなハイブリッド クエリが可能になります。
sdlt:Load でもある provone:Program とは何ですか?
タイプ sdtl:Load のすべてのコマンドに対する provone:Port は何ですか?
X プロパティを使用した sdt:Load コマンドへの入力 provone:Ports は何ですか?
提案されたモデルは、sdtl:CommandBase オブジェクトを provone:Program オブジェクトに変換し、データ フレーム表現を provone:Port オブジェクトに付加し、選択された SDTL プロパティを provone:Program に付加します。
このモデルでは、ProvONE を使用して、スクリプトを介したデータ フローに関するクエリを実行できます。 SDTL 言語を使用して追加の SDTL オブジェクト (SourceInformation、式など) をクエリして、問題のコマンドに関する詳細情報を確認できます。