這項工作已被 SDTH 資料模型所淘汰,可以根據 prov 概念進行查詢。
此儲存庫涵蓋了 ProvONE-SDTL 資料模型。
資料模型的目的是獲取 SDTL 中表示的資訊並將其轉換為 ProvONE 資料模型,從而允許使用 ProvONE 語法進行查詢。
目標查詢:
所有這些查詢都可以用 ProvONE 來重述
指定標識符方案的主要目標之一是確保更多的人類可讀標識符。這對於讀取查詢結果尤其重要。標識符的命名約定取自連結資料模式中的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 下的每個腳本執行節點。
每個預期模型都會有一個 provone:Program 表示由 C2Metadata 解析的腳本和一個 provone:腳本所屬的工作流程。每個腳本等級 provone: 程式都附加到 provone: 工作流程。
考慮單一資料包中的兩個來源檔案。單一provone:Workflow
物件包含表示檔案的兩個節點。
每個回顧模型都會有一個 provone:Execution ,表示由 C2Metadata 解析的腳本的假設執行。每個代表腳本的 provone:Execution 物件都會附加到頂層 provone:Execution
追溯起源的描述類似。然而,在這種情況下,沒有特定類型來表示執行的「集合」。相反,wasPartOf 可用來表示分組。
腳本檔案內的命令是使用provone:Program
和provone:Execution
物件定義的。描述這些物件之間的資料流的物件是標準的provone:Port
和provone:Entity
。
這可以重述:每個具有基底類別 CommandBase 的 SDTL 物件都轉換為 provone:Program 或 provone:Execution。或:SDTL「命令」陣列中的每個 JSON 物件都對應到 provone:Program 或 provone:Execution。
請注意,儘管 SDTL 可能會根據命令執行進行排序,但 ProvONE 沒有可以對順序進行編碼的物件。
指令透過provone:hasSubProgram
Program 相關。以一個包含四個指令的腳本為例。這些在 ProvONE 中建模為:
預期 ProvONE 中的資料流使用provone:Port
和provone:Workflow
物件。例如,考慮代表「載入」指令的 SDTL 片段。請注意,該命令位於“commands”數組中。
"commands": [
{
"$type": "Load",
"fileName": "df.csv",
"software": "csv",
"producesDataframe": [
{
"dataframeName": "df",
],
}
}
]
從命令類型來看,很明顯正在使用一個檔案。該檔案表示為port/1
。從producesDataFrame
我們可以推斷創建了一個新連接埠來表示資料幀port/2
。
如果新增第二個命令(使用資料幀的命令),則provone:Channel
物件將用於連接連接埠物件。例如,考慮下面描述「載入」命令的 SDTL,以及使用其資料幀並產生新資料幀的命令。
"commands": [
{
"$type": "Load",
"fileName": "df.csv",
"software": "csv",
"producesDataframe": [
{
"dataframeName": "df",
],
}
},
{
"$type": "Compute",
"consumesDataframe": [
{
"dataframeName": "df",
}
"producesDataframe": [
{
"dataframeName": "df"
}
}
]
從視覺上看,
可以重複此形式以在腳本中的命令之間形成任意長的資料流鏈。此表單將始終使用provone:Program
類型來表示命令,並使用provone:Port
來表示檔案或資料幀。
追溯起源以類似的方式運作,因為命令被表示為父腳本檔案執行的子執行。
下圖描繪了一個包含四個指令的腳本。
具有追溯來源的資料流比前瞻性來源的資料流涉及更多一些。
使用用於預期出處的“加載”命令 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"
]
}
]
}
請注意,在這種情況下,第二個資料幀port/4
具有與port/2
相同的屬性。這並不意味著兩個數據幀相同。其變數的狀態可能不同。這個模型沒有興趣詢問它們有何不同。
ProvONE 模型可以擴充以包含 SDTL 的其他屬性。這樣做可以提供有關每個命令中發生的情況的更多上下文。每個 SDTL 命令對於命令類型都有不同的元資料結構。
例如,KeepCases 指令有一個名為condition 的屬性。
renames 指令有一個名為 renames 的屬性。
這些都附在命令級provone:程式中,如下圖
看起來provone:代表指令的程式也可以是SDTL CommandBase。這允許更無縫的混合查詢,
provone:Program 又是什麼 sdlt:Load?
provone: 到 sdtl:Load 類型的所有命令的連接埠是什麼?
具有 X 屬性的 sdt:Load 指令的輸入 provone:Ports 是什麼?
所提出的模型將 sdtl:CommandBase 物件轉換為 provone:Program 對象,將資料幀表示附加到其 provone:Port 對象,並將選取的 SDTL 屬性附加到 provone:Program。
此模型允許使用 ProvONE 透過腳本查詢資料流。可以使用 SDTL 語言查詢其他 SDTL 物件(SourceInformation、表達式等),以確定有關相關命令的更多資訊。