งานนี้ล้าสมัยไปแล้วโดยโมเดลข้อมูล SDTH ซึ่งสามารถสอบถามได้ในแง่ของแนวคิดการทดสอบ
พื้นที่เก็บข้อมูลนี้ครอบคลุมมากกว่าโมเดลข้อมูล 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 object ยังมีป้ายกำกับ เพื่อให้ผู้สอบถามทราบว่าพวกเขากำลังสังเกตเอนทิตีที่คล้ายกับไฟล์สคริปต์
รูปแบบเป้าหมายคือ 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:Workflow ที่เป็นของสคริปต์ ทุก provone:Program ระดับสคริปต์จะแนบไปกับ provone:Workflow
พิจารณาไฟล์ต้นฉบับสองไฟล์ในแพ็คเกจข้อมูลเดียว อ็อบเจ็กต์ provone:Workflow
เดียวมีทั้งโหนดที่เป็นตัวแทนของไฟล์
โมเดลย้อนหลังทุกโมเดลจะมี provone:Execution ที่แสดงถึงการดำเนินการตามสมมุติฐานของสคริปต์ที่แยกวิเคราะห์โดย C2Metadata ทุกอ็อบเจ็กต์ provone:Execution ที่แสดงถึงสคริปต์จะถูกแนบไปกับ provone:Execution ระดับบนสุด
ที่มาย้อนหลังมีการอธิบายในทำนองเดียวกัน อย่างไรก็ตาม ในกรณีนี้ ไม่มีประเภทเฉพาะที่จะแสดงถึง 'คอลเลกชัน' ของการดำเนินการ แต่สามารถใช้ wasPartOf เพื่อแสดงถึงการจัดกลุ่มแทนได้
คำสั่งภายในไฟล์สคริปต์ถูกกำหนดด้วยวัตถุ provone:Program
และ provone:Execution
ออบเจ็กต์ที่อธิบายการไหลของข้อมูลระหว่างออบเจ็กต์เหล่านี้คือ provone:Port
และ provone:Entity
มาตรฐาน
สิ่งนี้สามารถทำซ้ำได้: ทุกออบเจ็กต์ SDTL ที่มีคลาสพื้นฐาน CommandBase จะถูกแปลเป็น provone:Program หรือ provone:Execution อีกทางเลือกหนึ่ง: ออบเจ็กต์ออบเจ็กต์ JSON ทุกรายการที่อยู่ในอาร์เรย์ "คำสั่ง" ของ SDTL จะถูกแมปกับ provone:Program หรือ provone:Execution
โปรดทราบว่าแม้ว่า SDTL อาจถูกสั่งเกี่ยวกับการดำเนินการคำสั่ง แต่ ProvONE ไม่มีออบเจ็กต์ที่สามารถเข้ารหัสคำสั่งได้
คำสั่งเกี่ยวข้องกับ provone:Program ระดับสคริปต์ผ่าน provone:hasSubProgram
ยกตัวอย่างสคริปต์ที่มีสี่คำสั่งอยู่ข้างใน สิ่งเหล่านี้ถูกสร้างแบบจำลองใน ProvONE เป็น
การไหลของข้อมูลใน ProvONE ในอนาคตใช้ provone:Port
และ provone:Workflow
object ตัวอย่างเช่น ลองพิจารณาข้อมูลโค้ดของ SDTL ที่แสดงถึงคำสั่ง "โหลด" โปรดทราบว่าคำสั่งอยู่ในอาร์เรย์ "คำสั่ง"
"commands": [
{
"$type": "Load",
"fileName": "df.csv",
"software": "csv",
"producesDataframe": [
{
"dataframeName": "df",
],
}
}
]
จากลักษณะคำสั่งจะชัดเจนว่ามีการใช้ไฟล์ ไฟล์นี้แสดงเป็น port/1
จาก producesDataFrame
เราสามารถอนุมานได้ว่าพอร์ตใหม่ถูกสร้างขึ้นเพื่อเป็นตัวแทนของ data frame, port/2
หากมีการเพิ่มคำสั่งที่สอง ซึ่งเป็นคำสั่งที่ใช้ data frame ดังนั้น provone:Channel
object จะถูกใช้เพื่อเชื่อมต่อ port object ตัวอย่างเช่น พิจารณา SDTL ด้านล่างที่อธิบายคำสั่ง 'Load' และจากนั้นใช้คำสั่งที่ใช้ data frame และสร้างคำสั่งใหม่
"commands": [
{
"$type": "Load",
"fileName": "df.csv",
"software": "csv",
"producesDataframe": [
{
"dataframeName": "df",
],
}
},
{
"$type": "Compute",
"consumesDataframe": [
{
"dataframeName": "df",
}
"producesDataframe": [
{
"dataframeName": "df"
}
}
]
สายตา
แบบฟอร์มนี้สามารถทำซ้ำเพื่อสร้างสายข้อมูลยาวตามอำเภอใจระหว่างคำสั่งในสคริปต์ แบบฟอร์มจะใช้ provone:Program
type เพื่อแสดงคำสั่ง เสมอ และ provone:Port
เพื่อแสดงไฟล์หรือเฟรมข้อมูล
ที่มาย้อนหลังทำงานในลักษณะเดียวกันโดยที่คำสั่งจะแสดงเป็นการดำเนินการย่อยของการดำเนินการไฟล์สคริปต์หลัก
รูปภาพต่อไปนี้แสดงสคริปต์ที่มีสี่คำสั่งอยู่ภายใน
การไหลของข้อมูลที่มีที่มาย้อนหลังมีความเกี่ยวข้องมากกว่าแหล่งที่มาที่คาดหวังเล็กน้อย
การใช้คำสั่ง 'โหลด' SDTL ที่ใช้สำหรับแหล่งที่มาในอนาคต
"commands": [
{
"$type": "Load",
"fileName": "df.csv",
"software": "csv",
"producesDataframe": [
{
"dataframeName": "df",
],
}
}
]
ในภาพด้านล่าง entity/1
แสดงถึงไฟล์ที่คำสั่งใช้ entity/2
แสดงถึงกรอบข้อมูลที่ถูกสร้างขึ้น
อ็อบเจ็กต์ provone:Port
& provone:Entity
ในส่วนด้านบนจะมีประโยชน์มากกว่าสำหรับการสืบค้นเพิ่มเติม หากข้อมูลเมตาบางส่วนเกี่ยวกับกรอบข้อมูลถูกเก็บรักษาไว้
คำอธิบายเฟรมข้อมูลแบบเต็มประกอบด้วยข้อมูลเกี่ยวกับตัวแปรภายในและชื่อของเฟรมข้อมูลในซอร์สโค้ด พิจารณาคำสั่งที่โหลด data frame ซึ่งมีตัวแปรอยู่ภายในจากไฟล์
{
"$type": "Load",
"command": "Load",
"fileName": "df.csv",
"software": "csv",
"producesDataframe": [
{
"dataframeName": "df",
"variableInventory": [
"A",
"B"
]
}
],
}
วัตถุกรอบข้อมูลมีการแสดง RDF ต่อไปนี้ภายใต้ ProvONE โปรดทราบว่าโหนดรูทคือ provone:Port
อ็อบเจ็กต์ data frame สามารถแนบกับ 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 มีคุณสมบัติที่เรียกว่าเงื่อนไข
คำสั่งเปลี่ยนชื่อมีคุณสมบัติที่เรียกว่าเปลี่ยนชื่อ
ทั้งหมดนี้แนบมากับโพรโวนระดับคำสั่ง:โปรแกรม ดังที่แสดงด้านล่าง
ดูเหมือนว่า provone:Program ที่แสดงคำสั่งสามารถเป็น SDTL CommandBase ได้เช่นกัน สิ่งนี้ทำให้สามารถสืบค้นแบบไฮบริดได้อย่างราบรื่นยิ่งขึ้น
provone: โปรแกรมที่เป็น sdlt: Load คืออะไร?
provone:Ports ไปยังคำสั่งประเภท sdtl:Load ทั้งหมดคืออะไร
โพรโวนอินพุต: พอร์ตไปยังคำสั่ง sdt: Load ที่มีคุณสมบัติ X คืออะไร
โมเดลที่นำเสนอแปลงอ็อบเจ็กต์ sdtl:CommandBase เป็นอ็อบเจ็กต์ provone:Program แนบการแสดงกรอบข้อมูลกับอ็อบเจ็กต์ provone:Port และแนบคุณสมบัติ SDTL ที่เลือกกับ provone:Program
โมเดลนี้ช่วยให้สามารถสืบค้นเกี่ยวกับการไหลของข้อมูลผ่านสคริปต์โดยใช้ ProvONE สามารถสอบถามออบเจ็กต์ SDTL เพิ่มเติม (SourceInformation, นิพจน์ ฯลฯ) ได้โดยใช้ภาษา SDTL เพื่อระบุข้อมูลเพิ่มเติมเกี่ยวกับคำสั่งที่เป็นปัญหา