Pekerjaan ini telah usang oleh model data SDTH, yang dapat ditanyakan dalam kaitannya dengan konsep prov.
Repositori ini membahas Model Data ProvONE-SDTL.
Tujuan dari model data adalah untuk mengambil informasi yang direpresentasikan dalam SDTL dan mengubahnya menjadi model data ProvONE, memungkinkan kueri dibuat menggunakan sintaksis ProvONE.
Pertanyaan Target:
Semua pertanyaan ini dapat dinyatakan kembali dalam istilah ProvONE
Salah satu tujuan utama menentukan skema pengidentifikasi adalah untuk memastikan lebih banyak pengidentifikasi yang dapat dibaca manusia. Hal ini sangat penting untuk membaca hasil kueri. Konvensi penamaan untuk pengidentifikasi diambil dari bagian Patterned URIs
di Pola Data Tertaut.
Bentuk umumnya adalah,
#camelCaseClass/{current_type_count}
. dimana {current_type_count}
adalah jumlah objek tertentu.
Setiap objek harus memiliki rdfs:label
bila memungkinkan & sesuai. Objek tingkat atas provon:Alur kerja dan provon:Eksekusi dapat memiliki label yang telah ditentukan sebelumnya karena mewakili simpul unik dengan tujuan tertentu.
Tingkat skrip terbukti: Program & terbukti: Objek eksekusi juga memiliki label, sehingga setiap pembuat kueri mengetahui bahwa mereka sedang mengamati entitas yang menyerupai file skrip.
Format targetnya adalah JSON-LD; rdflib memiliki plugin untuk mengubah model grafiknya menjadi JSON-LD. Turtle masih merupakan yang paling mudah untuk diurai secara kasat mata, jadi contoh dalam dokumen ini disediakan di Turtle. Contoh di direktori examples/
ada di Turtle dan JSON-LD.
Karena model ini berpusat pada kueri ProvONE yang menargetkan pertanyaan tentang aliran data, arsitektur dasarnya sebagian besar adalah ProvONE.
ProvONE memiliki kemampuan untuk mewakili alur kerja dan kumpulan eksekusi, provone:Workflow
& provone:Exection
. Ini paling sering digunakan untuk mewakili eksekusi serangkaian skrip, atau keberadaan serangkaian skrip. Perhatikan bahwa ini tidak berurutan.
Setiap representasi ProvONE akan memiliki struktur luar yang serupa untuk mewakili kumpulan skrip. Asal calon mengumpulkan setiap simpul yang mewakili skrip di bawah alur kerja yang terbukti:; asal retrospektif mengumpulkan setiap node eksekusi skrip di bawah provon:Eksekusi.
Setiap model prospektif akan memiliki provon:Program yang mewakili skrip yang diurai oleh C2Metadata dan provon:Alur kerja yang dimiliki skrip tersebut. Setiap provon:Program tingkat skrip dilampirkan ke provon:Alur Kerja.
Pertimbangkan dua file sumber dalam satu paket data. Satu objek provone:Workflow
berisi kedua node yang mewakili file.
Setiap model retrospektif akan memiliki provon:Eksekusi yang mewakili eksekusi hipotetis skrip yang diurai oleh C2Metadata. Setiap objek provon:Eksekusi yang mewakili skrip akan dilampirkan ke provon:Eksekusi tingkat atas
Asal retrospektif dijelaskan dengan cara yang sama. Namun dalam kasus ini, tidak ada tipe khusus untuk menunjukkan 'kumpulan' eksekusi. Sebaliknya, wasPartOf dapat digunakan untuk menunjukkan pengelompokan.
Perintah di dalam file skrip didefinisikan dengan objek provone:Program
dan provone:Execution
. Objek yang menggambarkan aliran data antara objek-objek ini adalah standar provone:Port
dan provone:Entity
.
Hal ini dapat dinyatakan kembali: setiap objek SDTL yang memiliki kelas dasar CommandBase diterjemahkan ke dalam provon:Program atau provon:Eksekusi. Alternatifnya: Setiap objek objek JSON yang ada dalam larik "perintah" SDTL dipetakan ke provon:Program atau provon:Eksekusi.
Perhatikan bahwa meskipun SDTL dapat dipesan sehubungan dengan eksekusi perintah, ProvONE tidak memiliki objek yang dapat mengkodekan perintah tersebut.
Perintah terkait dengan tingkat skrip provon:Program melalui provone:hasSubProgram
. Ambil contoh sebuah skrip yang memiliki empat perintah di dalamnya. Ini dimodelkan dalam ProvONE sebagai,
Aliran data di calon ProvONE menggunakan objek provone:Port
dan provone:Workflow
. Misalnya, pertimbangkan cuplikan SDTL yang mewakili perintah "Muat". Perhatikan bahwa perintahnya ada dalam larik "perintah".
"commands": [
{
"$type": "Load",
"fileName": "df.csv",
"software": "csv",
"producesDataframe": [
{
"dataframeName": "df",
],
}
}
]
Dari jenis perintahnya terlihat jelas ada file yang sedang digunakan. File ini direpresentasikan sebagai port/1
. Dari producesDataFrame
kita dapat menyimpulkan bahwa port baru dibuat untuk mewakili bingkai data, port/2
.
Jika perintah kedua ditambahkan, yang menggunakan bingkai data, maka objek provone:Channel
akan digunakan untuk menghubungkan objek port. Misalnya, pertimbangkan SDTL di bawah ini yang menjelaskan perintah 'Muat', lalu perintah yang menggunakan bingkai datanya dan menghasilkan bingkai data baru.
"commands": [
{
"$type": "Load",
"fileName": "df.csv",
"software": "csv",
"producesDataframe": [
{
"dataframeName": "df",
],
}
},
{
"$type": "Compute",
"consumesDataframe": [
{
"dataframeName": "df",
}
"producesDataframe": [
{
"dataframeName": "df"
}
}
]
Secara visual,
Bentuk ini dapat diulangi untuk membentuk rantai aliran data yang panjang dan sewenang-wenang antar perintah dalam skrip. Formulir akan selalu menggunakan tipe provone:Program
untuk mewakili perintah dan provone:Port
untuk mewakili file atau bingkai data.
Asal retrospektif bekerja dengan cara yang sama di mana perintah direpresentasikan sebagai sub-eksekusi dari eksekusi file skrip induk.
Gambar berikut menggambarkan skrip yang memiliki empat perintah di dalamnya.
Aliran data dengan asal retrospektif sedikit lebih terlibat dibandingkan asal prospektif.
Menggunakan perintah 'Muat' SDTL yang digunakan untuk calon asal,
"commands": [
{
"$type": "Load",
"fileName": "df.csv",
"software": "csv",
"producesDataframe": [
{
"dataframeName": "df",
],
}
}
]
Pada gambar di bawah, entity/1
mewakili file yang digunakan oleh perintah. entity/2
mewakili bingkai data yang dibuat.
Objek provone:Port
& provone:Entity
pada bagian di atas bisa lebih berguna untuk kueri tambahan jika beberapa metadata tentang bingkai data dipertahankan.
Deskripsi bingkai data lengkap berisi informasi tentang variabel di dalamnya dan nama bingkai data dalam kode sumber. Pertimbangkan perintah yang memuat bingkai data yang memiliki variabel di dalam file,
{
"$type": "Load",
"command": "Load",
"fileName": "df.csv",
"software": "csv",
"producesDataframe": [
{
"dataframeName": "df",
"variableInventory": [
"A",
"B"
]
}
],
}
Objek bingkai data memiliki representasi RDF berikut di bawah ProvONE. Perhatikan bahwa simpul akar adalah port yang terbukti:.
Objek bingkai data dapat dilampirkan ke provinsi:Port yang terkait dengannya. Ambil contoh, SDTL berikut yang memuat bingkai data dari file dan kemudian membaca menggunakan bingkai data dalam perintah baru.
{
"$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"
]
}
]
}
Perhatikan bahwa dalam kasus ini, bingkai data kedua, port/4
memiliki atribut yang sama dengan port/2
. Ini tidak berarti bahwa kedua bingkai data tersebut sama. Keadaan variabelnya bisa berbeda. Model ini tidak tertarik untuk menanyakan perbedaannya .
Model ProvONE dapat diperluas untuk menyertakan properti tambahan dari SDTL. Hal ini dapat dilakukan untuk memberikan konteks yang lebih luas tentang apa yang terjadi dalam setiap perintah. Setiap perintah SDTL memiliki struktur metadata yang berbeda untuk jenis perintahnya.
Misalnya, perintah KeepCases memiliki properti bernamakondisi.
Perintah renames memiliki properti yang disebut renames.
Ini semua terlampir pada provon: Program tingkat perintah, yang ditunjukkan di bawah ini
Tampaknya terbukti: Program yang mewakili suatu perintah juga dapat berupa SDTL CommandBase. Hal ini memungkinkan kueri hibrid yang lebih lancar,
Apa yang dibuktikan: Program yang juga merupakan sdlt: Load?
Apa yang dibuktikan: Port ke semua perintah bertipe sdtl: Load?
Apa masukan yang diberikan: Port ke perintah sdt: Load dengan properti X?
Model yang diusulkan mengubah objek sdtl:CommandBase menjadi objek provon:Program, melampirkan representasi bingkai data ke objek provon:Port, dan melampirkan properti SDTL yang dipilih ke provon:Program.
Model ini memungkinkan untuk menanyakan tentang aliran data melalui skrip, menggunakan ProvONE. Objek SDTL tambahan (SourceInformation, ekspresi, dll) dapat ditanyakan menggunakan bahasa SDTL untuk menentukan informasi lebih lanjut tentang perintah yang dimaksud.