For our work on the Provenance Challenge, our team will be demonstrating a system known as ProtoProv?.
This system is designed to perform the following tasks: (i) Take in provenance metadata in either the OPM or Proof Markup Language (PML) format, and store it in an RDF-based format, known as ProtoProv? (a format designed for easy conversion back to OPM or PML). (ii) Facilitate the modeling and querying of the ProtoProv? RDF data, using Jena and SPARQL respectively.
The following equivalencies can be observed in ProtoProv?, OPM, and PML syntax:
ProtoProv? | OPM | PML |
---|---|---|
ProtoProv?:Variable | Artifact | pmlj:NodeSet |
ProtoProv?:Function | Process | pmlp:InferenceRule |
ProtoProv?:Controller | Agent | pmlp:InferenceEngine |
ProtoProv?:Usd | Used | pmlj:hasAntecedentList |
ProtoProv?:Wgb | WasGeneratedBy? | pmlj:isConsequentOf |
ProtoProv?:Wcb | WasControlledBy? | pmlj:hasInferenceEngine |
Where the following prefix mappings apply:
ProtoProv? | <http://www.cs.rpi.edu/~michaj6/ProtoProv.owl> |
pmlp | <http://inference-web.org/2.0/pml-provenance.owl> |
pmlj | <http://inference-web.org/2.0/pml-justification.owl> |
Object | ID | Value |
---|---|---|
Artifact | <Artifact Name>_<Instance Number>_<Scope> | <Scope>_<Datatype>_<Datavalue> |
Process | <Process Name>_<Instance Number>_<Scope> | <Scope>_<Process Name> |
Agent | <Agent Name>_<Instance Number> | <Agent Name> |
Where <Instance Number> is derived from a counter of all instances of (X Name), <Datatype> corresponds to a variable datatype (e.g., boolean), <Datavalue> corresponds to a variable's value (e.g., true) and <Scope> corresponds to the scope something existed in. The four possible scopes which are defined are as follows:
Scope ID | Definition |
---|---|
main | outside the workflow for loop |
ForIter1? | first iteration of the workflow for loop |
ForIter2? | second iteration |
ForIter3? | third iteration |
Control Flow Representation: In cases where a control flow check would be necessary to reach a function (for instance, checking that IsCSVReadyFileExistsOutput? evaluates to true before proceeding to the function ReadCSVReadyFile?), we would establish a ProtoProv?:usd relation between the control flow variable and following function. We do this for two reasons: (i) to eliminate the need for declaring additional ProtoProv?:Function instances for the control checks, and (ii) to highlight the necessity of control flow checks to reach upcoming functions.
Unclear Variable Values: In a number of situations, it was unclear what <Datavalue> to assign certain artifacts. These situations (along with current assigned datavalues) are enumerated below:
Artifact | Datavalue |
---|---|
DatabaseEntry? FileName | The name of the variable itself |
List<CSVFileEntry> FileName | The name of the variable itself |
CSVFileEntry? FileName | FileName.FilePath_FileName.TargetTable |
Sample Detection Entry | DBEntry_P2Detection_<detectID> |
Sample Image Entry | DBEntry_P2Detection_<imageID> |
Description:
ProtoProv:wgb
instance (?wgb
) which has the detection entry pc:DBEntryP2Detection_0_ForIter3
as its source
ProtoProv:Function
instance (?fxn
) corresponding to (?wgb
) - this should be a LoadCSVFileIntoTable
instance
ProtoProv:Variable
instances (?var
) which were used by the LoadCSVFileIntoTable
instance
?var
), and filter out any which do not have the datatype CSVFileEntry
SPARQL Query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX ProtoProv: <http://www.cs.rpi.edu/~michaj6/ProtoProv.owl#> PREFIX pc: <http://www.cs.rpi.edu/~michaj6/PC3/PC3.owl#> SELECT ?value WHERE { ?wgb ProtoProv:wgbSource pc:DBEntryP2Detection_0_ForIter3 . ?wgb ProtoProv:wgbTarget ?fxn . ?usd ProtoProv:usdSource ?fxn . ?usd ProtoProv:usdTarget ?var . ?var ProtoProv:hasType ?type . FILTER(?type = "CSVFileEntry") ?var ProtoProv:hasValue ?value }
Output:
[./Data/J062941/P2_J062941_B001_P2fits0_20081115_P2Detection.csv-P2Detection]
pc:ReadCSVFileColumnNamesOutput_0_ForIter1
.
Description:
ProtoProv:usd
instance (?usd
) which has the detection entry pc:ReadCSVFileColumnNamesOutput_0_ForIter1
as its target
ProtoProv:Function
instance (?fxn
) corresponding to (?usd
) - this should be an IsMatchTableColumnRanges
instance
?fxn
), and filter out any which do not have the datatype IsMatchTableColumnRanges
SPARQL Query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX ProtoProv: <http://www.cs.rpi.edu/~michaj6/ProtoProv.owl#> PREFIX pc: <http://www.cs.rpi.edu/~michaj6/PC3/PC3.owl#> SELECT ?usd WHERE { ?usd ProtoProv:usdTarget pc:ReadCSVFileColumnNamesOutput_0_ForIter1 . ?usd ProtoProv:usdSource ?fxn . ?fxn ProtoProv:hasValue ?val . FILTER(?val="IsMatchTableColumnRanges") }
Output:
[YES]
Ultimately, we chose to handle this query through a combination of SPARQL querying and recursive function calls. Initially, the query assigns
(see below) the value of the image entry pc:DBEntryP2ImageMeta_0_ForIter2
. From here, each query execution returns any non control-flow variables (?var
) (e.g., non-boolean) used by the function (?fxn
) which generated
. In turn, the SPARQL query is re-executed for each (?var
). This recursion proceeds until the SPARQL query returns no results.
Description:
ProtoProv:wgb
instance (?wgb
) which has the ProtoProv:Variable
=ProtoProv:Function
instance (?fxn
) corresponding to (?wgb
)
?value
) of these (?fxn
) for later reference
ProtoProv:Variable
instances (?var
) which were used by the (?fxn
) instances
?var
), and filter out any which have the datatype boolean
?value
) equals (ForEach
), discard the entry. Else, put (?fxn
) in the solution set.
?var
) for
SPARQL Query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX ProtoProv: <http://www.cs.rpi.edu/~michaj6/ProtoProv.owl#> PREFIX pc: <http://www.cs.rpi.edu/~michaj6/PC3/PC3.owl#> SELECT ?fxn ?value ?var WHERE { ?wgb ProtoProv:wgbSource <r> . ?wgb ProtoProv:wgbTarget ?fxn . ?fxn ProtoProv:hasValue ?value . ?usd ProtoProv:usdSource ?fxn . ?usd ProtoProv:usdTarget ?var . ?var ProtoProv:hasType ?type . FILTER(?type != "boolean") . }
Output:
[LoadCSVFileIntoTable_1_ForIter2, CreateEmptyLoadDB?_0_main, ReadCSVFileColumnNames?_1_ForIter2, ReadCSVReadyFile?_0_main]
SPARQL Query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX ProtoProv: <http://www.cs.rpi.edu/~michaj6/ProtoProv.owl#> PREFIX pc: <http://www.cs.rpi.edu/~michaj6/PC3/PC3.owl#> SELECT ?fxn WHERE { ?fxn rdf:type ProtoProv:Function . }
Output:
[DirectAssertion_0_main, ForEach?_2_ForIter3, ReadCSVFileColumnNames?_0_ForIter1, IsMatchTableRowCount?_1_ForIter2, ForEach?_0_ForIter1, IsMatchCSVFileColumnNames?_2_ForIter3, LoadCSVFileIntoTable?_0_ForIter1, ReadCSVFileColumnNames?_2_ForIter3, IsMatchCSVFileColumnNames?_0_ForIter1, IsExistsCSVFile?_0_ForIter1, CompactDatabase?_0_main, IsMatchTableColumnRanges?_2_ForIter3, IsMatchCSVFileTables?_0_main, IsMatchTableRowCount?_0_ForIter1, IsCSVReadyFileExists?_0_main, IsExistsCSVFile?_2_ForIter3, LoadCSVFileIntoTable?_2_ForIter3, IsExistsCSVFile?_1_ForIter2, LoadCSVFileIntoTable?_1_ForIter2, ReadCSVFileColumnNames?_1_ForIter2, UpdateComputedColumns?_1_ForIter2, IsMatchTableRowCount?_2_ForIter3, IsMatchTableColumnRanges?_0_ForIter1, UpdateComputedColumns?_0_ForIter1, UpdateComputedColumns?_2_ForIter3, IsMatchCSVFileColumnNames?_1_ForIter2, IsMatchTableColumnRanges?_1_ForIter2, ForEach?_1_ForIter2, CreateEmptyLoadDB?_0_main, ReadCSVReadyFile?_0_main]
?var
) generated through direct assertion by a user.
SPARQL Query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX ProtoProv: <http://www.cs.rpi.edu/~michaj6/ProtoProv.owl#> PREFIX pc: <http://www.cs.rpi.edu/~michaj6/PC3/PC3.owl#> SELECT ?var WHERE { ?var rdf:type ProtoProv:Variable . ?wgb ProtoProv:wgbSource ?var . ?wgb ProtoProv:wgbTarget ?fxn . ?fxn ProtoProv:hasValue ?value . FILTER(?value = "DirectAssertion") }
Output:
[JobId_0_main, CSVRootPath?_0_main]
?fxn
) which used variables (?var
) which were in turn generated through direct assertion by a user.
SPARQL Query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX ProtoProv: <http://www.cs.rpi.edu/~michaj6/ProtoProv.owl#> PREFIX pc: <http://www.cs.rpi.edu/~michaj6/PC3/PC3.owl#> SELECT ?fxn WHERE { ?fxn rdf:type ProtoProv:Function . ?usd ProtoProv:usdSource ?fxn . ?usd ProtoProv:usdTarget ?var . ?wgb ProtoProv:wgbSource ?var . ?wgb ProtoProv:wgbTarget ?fxn2 . ?fxn2 ProtoProv:hasValue ?value . FILTER(?value = "DirectAssertion") }
Output:
[CreateEmptyLoadDB_0_main, ReadCSVReadyFile?_0_main, IsCSVReadyFileExists?_0_main]
Description:
SPARQL Query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX PC3: <http://www.cs.rpi.edu/~michaj6/provenance/PC3.owl#> PREFIX PC3OPM: <http://www.cs.rpi.edu/~michaj6/provenance/PC3OPM.owl#> SELECT ?VALUE FROM <http://www.cs.rpi.edu/~michaj6/provenance/PC3.owl#> WHERE { ?WGB PC3OPM:wgbSource PC3:provVarDbEntryP2Detection_0 . ?WGB PC3OPM:wgbTarget ?FXN . ?USD PC3OPM:usdSource ?FXN . ?USD PC3OPM:usdTarget ?VAR . ?VAR rdf:type PC3OPM:CSVFileEntry . ?VAR PC3OPM:hasValue ?VALUE }
Output:
---------------------------------------------------------------------------------------------------------------------------- | VALUE | ============================================================================================================================ | "/Data/J062941//P2_J062941_B001_P2fits0_20081115_P2Detection.csv-P2Detection"^^<http://www.w3.org/2001/XMLSchema#string> | ----------------------------------------------------------------------------------------------------------------------------
Description:
SPARQL Query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX PC3: <http://www.cs.rpi.edu/~michaj6/provenance/PC3.owl#> PREFIX PC3OPM: <http://www.cs.rpi.edu/~michaj6/provenance/PC3OPM.owl#> SELECT ?FXN FROM <http://www.cs.rpi.edu/~michaj6/provenance/PC3.owl#> WHERE { ?USD PC3OPM:usdTarget PC3:ReadCSVFileColumnNamesOutput_2 . ?USD PC3OPM:usdSource ?FXN . ?FXN PC3OPM:hasValue ?VALUE FILTER(?VALUE = "IsMatchTableColumnRanges") . ?WGB PC3OPM:wgbTarget ?FXN . }
Output:
---------------------------------- | FXN | ================================== | PC3:IsMatchTableColumnRanges_2 | ----------------------------------
Note: this relies upon the Construct queries ConstructOpWTB?, ConstructOpWTBForEach?
Description:
SPARQL Query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX PC3: <http://www.cs.rpi.edu/~michaj6/provenance/PC3.owl#> PREFIX PC3OPM: <http://www.cs.rpi.edu/~michaj6/provenance/PC3OPM.owl#> SELECT ?FXN1 ?FXN2 FROM <http://www.cs.rpi.edu/~michaj6/provenance/PC3.owl> FROM <http://www.cs.rpi.edu/~michaj6/provenance/PC3OPM.owl> FROM <http://onto.rpi.edu/sw4j/sparql?queryURL=http://www.cs.rpi.edu/~michaj6/provenance/queries/general/ConstructOpWTB.sparql> FROM <http://onto.rpi.edu/sw4j/sparql?queryURL=http://www.cs.rpi.edu/~michaj6/provenance/queries/general/ConstructOpWTBForEach.sparql> WHERE { ?WGB PC3OPM:wgbSource PC3:provVarDbEntryP2ImageMeta_0 . ?WGB PC3OPM:wgbTarget ?FXN1 . ?FXN1 PC3OPM:opWasTriggeredBy ?FXN2 . ?FXN2 a PC3OPM:DataRetProc }
Output:
------------------------------------------------------------- | FXN1 | FXN2 | ============================================================= | PC3:LoadCSVFileIntoTable_1 | PC3:ReadCSVFileColumnNames_1 | | PC3:LoadCSVFileIntoTable_1 | PC3:CreateEmptyLoadDB_0 | | PC3:LoadCSVFileIntoTable_1 | PC3:ReadCSVReadyFile_0 | -------------------------------------------------------------
Description:
SPARQL Query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX PC3: <http://www.cs.rpi.edu/~michaj6/provenance/PC3Halt.owl#> PREFIX PC3OPM: <http://www.cs.rpi.edu/~michaj6/provenance/PC3OPM.owl#> SELECT ?FXN FROM <http://www.cs.rpi.edu/~michaj6/provenance/PC3Halt.owl#> WHERE { ?WGB PC3OPM:wgbTarget ?FXN . ?FXN PC3OPM:hasValue ?VALUE2 FILTER (?VALUE2 = "IsMatchTableColumnRanges") . ?WGB PC3OPM:wgbSource ?VAR . ?VAR PC3OPM:hasValue ?VALUE1 FILTER (?VALUE1 = "true") . }
Output:
---------------------------------- | FXN | ================================== | PC3:IsMatchTableColumnRanges_1 | | PC3:IsMatchTableColumnRanges_0 | ----------------------------------
Description:
SPARQL Query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX PC3: <http://www.cs.rpi.edu/~michaj6/provenance/PC3.owl#> PREFIX PC3OPM: <http://www.cs.rpi.edu/~michaj6/provenance/PC3OPM.owl#> SELECT ?Time_IsMatchCSVFileTables ?Time_IsExistsCSVFile FROM <http://www.cs.rpi.edu/~michaj6/provenance/PC3.owl> WHERE { ?WGB1 PC3OPM:wgbTarget PC3:IsMatchCSVFileTables_0 . ?WGB1 PC3OPM:hasTime ?TIME1 . ?TIME1 PC3OPM:stopTime ?Time_IsMatchCSVFileTables . ?WGB2 PC3OPM:wgbTarget PC3:IsExistsCSVFile_1 . ?WGB2 PC3OPM:hasTime ?TIME2 . ?TIME2 PC3OPM:stopTime ?Time_IsExistsCSVFile . }
Output:
----------------------------------------------------------------------------------------------------------------------- | Time_IsMatchCSVFileTables | Time_IsExistsCSVFile | ======================================================================================================================= | "1244069850697"^^<http://www.w3.org/2001/XMLSchema#long> | "1244069852894"^^<http://www.w3.org/2001/XMLSchema#long> | -----------------------------------------------------------------------------------------------------------------------
Description:
SPARQL Query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX PC3: <http://www.cs.rpi.edu/~michaj6/provenance/PC3ALLHalt.owl#> PREFIX PC3OPM: <http://www.cs.rpi.edu/~michaj6/provenance/PC3OPM.owl#> SELECT ?ACCOUNT FROM <http://www.cs.rpi.edu/~michaj6/provenance/PC3ALLHalt.owl> WHERE { ?ENDSTATE rdf:type PC3OPM:EndState . ?WTB PC3OPM:wtbSource ?ENDSTATE . ?WTB PC3OPM:wtbTarget ?FXN . ?FXN PC3OPM:hasValue ?VALUE FILTER (?VALUE != "CompactDatabase") . ?ENDSTATE PC3OPM:hasAccount ?ACCOUNT . }
Output:
--------------- | ACCOUNT | =============== | PC3:J062943 | ---------------
Description:
SPARQL Query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX PC3: <http://www.cs.rpi.edu/~michaj6/provenance/PC3Halt.owl#> PREFIX PC3OPM: <http://www.cs.rpi.edu/~michaj6/provenance/PC3OPM.owl#> SELECT ?FXN FROM <http://www.cs.rpi.edu/~michaj6/provenance/PC3Halt.owl> WHERE { ?WGB PC3OPM:wgbTarget ?FXN . ?WGB PC3OPM:wgbSource ?VAR . ?VAR PC3OPM:hasValue ?VALUE FILTER (?VALUE = "false") . ?VAR rdf:type PC3OPM:ControlFlowArtifact . }
Output:
---------------------------------- | FXN | ================================== | PC3:IsMatchTableColumnRanges_2 | ----------------------------------
Description:
SPARQL Query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX PC3: <http://www.cs.rpi.edu/~michaj6/provenance/PC3Halt.owl#> PREFIX PC3OPM: <http://www.cs.rpi.edu/~michaj6/provenance/PC3OPM.owl#> SELECT ?FXN FROM <http://www.cs.rpi.edu/~michaj6/provenance/PC3OPM.owl> FROM <http://www.cs.rpi.edu/~michaj6/provenance/PC3Halt.owl> WHERE { ?FXN rdf:type PC3OPM:DataFlowProc }
Output:
----------------------------------- | FXN | =================================== | PC3:IsMatchTableColumnRanges_0 | | PC3:CreateEmptyLoadDB_0 | | PC3:LoadCSVFileIntoTable_2 | | PC3:IsExistsCSVFile_0 | | PC3:IsMatchTableRowCount_1 | | PC3:ReadCSVFileColumnNames_1 | | PC3:ReadCSVFileColumnNames_0 | | PC3:UpdateComputedColumns_2 | | PC3:IsMatchTableRowCount_2 | | PC3:IsMatchCSVFileTables_0 | | PC3:IsMatchCSVFileColumnNames_0 | | PC3:UpdateComputedColumns_0 | | PC3:IsMatchCSVFileColumnNames_2 | | PC3:IsExistsCSVFile_2 | | PC3:IsMatchTableColumnRanges_1 | | PC3:IsExistsCSVFile_1 | | PC3:LoadCSVFileIntoTable_1 | | PC3:LoadCSVFileIntoTable_0 | | PC3:ReadCSVFileColumnNames_2 | | PC3:IsMatchCSVFileColumnNames_1 | | PC3:IsCSVReadyFileExists_0 | | PC3:IsMatchTableRowCount_0 | | PC3:ReadCSVReadyFile_0 | | PC3:IsMatchTableColumnRanges_2 | | PC3:UpdateComputedColumns_1 | -----------------------------------
Description:
SPARQL Query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX PC3: <http://www.cs.rpi.edu/~michaj6/provenance/PC3.owl#> PREFIX PC3OPM: <http://www.cs.rpi.edu/~michaj6/provenance/PC3OPM.owl#> SELECT ?VAR FROM <http://www.cs.rpi.edu/~michaj6/provenance/PC3.owl#> WHERE { ?FXN rdf:type PC3OPM:Process . ?FXN PC3OPM:hasValue ?VALUE FILTER (?VALUE = "DirectAssertion") . ?WGB PC3OPM:wgbTarget ?FXN . ?WGB PC3OPM:wgbSource ?VAR . }
Output:
--------------------- | VAR | ===================== | PC3:CSVRootPath_0 | | PC3:JobId_0 | ---------------------
Description:
SPARQL Query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX PC3: <http://www.cs.rpi.edu/~michaj6/provenance/PC3.owl#> PREFIX PC3OPM: <http://www.cs.rpi.edu/~michaj6/provenance/PC3OPM.owl#> SELECT ?VAR ?FXN FROM <http://www.cs.rpi.edu/~michaj6/provenance/PC3.owl#> WHERE { ?FXN1 rdf:type PC3OPM:Process . ?FXN1 PC3OPM:hasValue ?VALUE FILTER (?VALUE = "DirectAssertion") . ?WGB PC3OPM:wgbSource ?VAR . ?WGB PC3OPM:wgbTarget ?FXN1 . ?USD PC3OPM:usdSource ?FXN . ?USD PC3OPM:usdTarget ?VAR }
Output:
-------------------------------------------------- | VAR | FXN | ================================================== | PC3:CSVRootPath_0 | PC3:ReadCSVReadyFile_0 | | PC3:CSVRootPath_0 | PC3:IsCSVReadyFileExists_0 | | PC3:JobId_0 | PC3:CreateEmptyLoadDB_0 | --------------------------------------------------
Description:
SPARQL Query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX PC3: <http://www.cs.rpi.edu/~michaj6/provenance/PC3Halt.owl#> PREFIX PC3OPM: <http://www.cs.rpi.edu/~michaj6/provenance/PC3OPM.owl#> SELECT ?VALUE FROM <http://www.cs.rpi.edu/~michaj6/provenance/PC3OPM.owl> FROM <http://www.cs.rpi.edu/~michaj6/provenance/PC3Halt.owl> WHERE { ?WGB PC3OPM:wgbTarget ?FXN . ?FXN PC3OPM:hasValue ?VALUE2 FILTER (?VALUE2 = "IsMatchTableColumnRanges") . ?WGB PC3OPM:wgbSource ?VAR1 . ?VAR1 PC3OPM:hasValue ?VALUE1 FILTER (?VALUE1 = "true") . ?USD PC3OPM:usdSource ?FXN . ?USD PC3OPM:usdTarget ?VAR . ?VAR rdf:type PC3OPM:CSVFileEntry . ?VAR PC3OPM:hasValue ?VALUE . }
Output:
-------------------------------------------------- | VAR | FXN | ================================================== | PC3:CSVRootPath_0 | PC3:ReadCSVReadyFile_0 | | PC3:CSVRootPath_0 | PC3:IsCSVReadyFileExists_0 | | PC3:JobId_0 | PC3:CreateEmptyLoadDB_0 | --------------------------------------------------
Note: this relies upon the Construct queries ConstructOpWTB?, ConstructOpWTBForEach?
Description:
SPARQL Query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX PC3: <http://www.cs.rpi.edu/~michaj6/provenance/PC3.owl#> PREFIX PC3OPM: <http://www.cs.rpi.edu/~michaj6/provenance/PC3OPM.owl#> SELECT ?fxn1 ?fxn2 FROM <http://www.cs.rpi.edu/~michaj6/provenance/PC3OPM.owl> FROM <http://www.cs.rpi.edu/~michaj6/provenance/PC3.owl> FROM <http://onto.rpi.edu/sw4j/sparql?queryURL=http://www.cs.rpi.edu/~michaj6/provenance/queries/general/ConstructOpWTB.sparql> FROM <http://onto.rpi.edu/sw4j/sparql?queryURL=http://www.cs.rpi.edu/~michaj6/provenance/queries/general/ConstructOpWTBForEach.sparql> WHERE { ?fxn1 PC3OPM:opWasTriggeredBy ?fxn2 . ?fxn2 a PC3OPM:DataRetProc . ?fxn1 a PC3OPM:DataFlowProc }
Output:
------------------------------------------------------------------ | fxn1 | fxn2 | ================================================================== | PC3:IsMatchTableColumnRanges_1 | PC3:ReadCSVFileColumnNames_1 | | PC3:CompactDatabase_0 | PC3:ReadCSVFileColumnNames_1 | | PC3:IsMatchCSVFileColumnNames_1 | PC3:ReadCSVFileColumnNames_1 | | PC3:IsMatchTableRowCount_1 | PC3:ReadCSVFileColumnNames_1 | | PC3:LoadCSVFileIntoTable_1 | PC3:ReadCSVFileColumnNames_1 | | PC3:UpdateComputedColumns_1 | PC3:ReadCSVFileColumnNames_1 | | PC3:IsExistsCSVFile_1 | PC3:CreateEmptyLoadDB_0 | | PC3:ReadCSVFileColumnNames_1 | PC3:CreateEmptyLoadDB_0 | | PC3:IsMatchCSVFileColumnNames_2 | PC3:CreateEmptyLoadDB_0 | | PC3:IsMatchTableRowCount_0 | PC3:CreateEmptyLoadDB_0 | | PC3:ReadCSVFileColumnNames_0 | PC3:CreateEmptyLoadDB_0 | | PC3:LoadCSVFileIntoTable_0 | PC3:CreateEmptyLoadDB_0 | | PC3:IsMatchTableColumnRanges_0 | PC3:CreateEmptyLoadDB_0 | | PC3:IsExistsCSVFile_0 | PC3:CreateEmptyLoadDB_0 | | PC3:UpdateComputedColumns_0 | PC3:CreateEmptyLoadDB_0 | | PC3:CompactDatabase_0 | PC3:CreateEmptyLoadDB_0 | | PC3:IsMatchCSVFileColumnNames_0 | PC3:CreateEmptyLoadDB_0 | | PC3:ReadCSVFileColumnNames_2 | PC3:CreateEmptyLoadDB_0 | | PC3:IsMatchTableRowCount_2 | PC3:CreateEmptyLoadDB_0 | | PC3:UpdateComputedColumns_2 | PC3:CreateEmptyLoadDB_0 | | PC3:IsMatchTableRowCount_1 | PC3:CreateEmptyLoadDB_0 | | PC3:LoadCSVFileIntoTable_1 | PC3:CreateEmptyLoadDB_0 | | PC3:UpdateComputedColumns_1 | PC3:CreateEmptyLoadDB_0 | | PC3:IsExistsCSVFile_2 | PC3:CreateEmptyLoadDB_0 | | PC3:IsMatchTableColumnRanges_1 | PC3:CreateEmptyLoadDB_0 | | PC3:LoadCSVFileIntoTable_2 | PC3:CreateEmptyLoadDB_0 | | PC3:IsMatchTableColumnRanges_2 | PC3:CreateEmptyLoadDB_0 | | PC3:IsMatchCSVFileColumnNames_1 | PC3:CreateEmptyLoadDB_0 | | PC3:IsExistsCSVFile_1 | PC3:ReadCSVReadyFile_0 | | PC3:ReadCSVFileColumnNames_1 | PC3:ReadCSVReadyFile_0 | | PC3:IsMatchCSVFileColumnNames_2 | PC3:ReadCSVReadyFile_0 | | PC3:IsMatchTableRowCount_0 | PC3:ReadCSVReadyFile_0 | | PC3:ReadCSVFileColumnNames_0 | PC3:ReadCSVReadyFile_0 | | PC3:LoadCSVFileIntoTable_0 | PC3:ReadCSVReadyFile_0 | | PC3:IsMatchTableColumnRanges_0 | PC3:ReadCSVReadyFile_0 | | PC3:IsExistsCSVFile_0 | PC3:ReadCSVReadyFile_0 | | PC3:UpdateComputedColumns_0 | PC3:ReadCSVReadyFile_0 | | PC3:CompactDatabase_0 | PC3:ReadCSVReadyFile_0 | | PC3:CreateEmptyLoadDB_0 | PC3:ReadCSVReadyFile_0 | | PC3:IsMatchCSVFileColumnNames_0 | PC3:ReadCSVReadyFile_0 | | PC3:ReadCSVFileColumnNames_2 | PC3:ReadCSVReadyFile_0 | | PC3:IsMatchTableRowCount_2 | PC3:ReadCSVReadyFile_0 | | PC3:LoadCSVFileIntoTable_1 | PC3:ReadCSVReadyFile_0 | | PC3:IsMatchTableRowCount_1 | PC3:ReadCSVReadyFile_0 | | PC3:UpdateComputedColumns_2 | PC3:ReadCSVReadyFile_0 | | PC3:UpdateComputedColumns_1 | PC3:ReadCSVReadyFile_0 | | PC3:IsMatchCSVFileTables_0 | PC3:ReadCSVReadyFile_0 | | PC3:IsExistsCSVFile_2 | PC3:ReadCSVReadyFile_0 | | PC3:IsMatchTableColumnRanges_1 | PC3:ReadCSVReadyFile_0 | | PC3:LoadCSVFileIntoTable_2 | PC3:ReadCSVReadyFile_0 | | PC3:IsMatchTableColumnRanges_2 | PC3:ReadCSVReadyFile_0 | | PC3:IsMatchCSVFileColumnNames_1 | PC3:ReadCSVReadyFile_0 | | PC3:IsMatchCSVFileColumnNames_2 | PC3:ReadCSVFileColumnNames_2 | | PC3:CompactDatabase_0 | PC3:ReadCSVFileColumnNames_2 | | PC3:LoadCSVFileIntoTable_2 | PC3:ReadCSVFileColumnNames_2 | | PC3:IsMatchTableColumnRanges_2 | PC3:ReadCSVFileColumnNames_2 | | PC3:IsMatchTableRowCount_2 | PC3:ReadCSVFileColumnNames_2 | | PC3:UpdateComputedColumns_2 | PC3:ReadCSVFileColumnNames_2 | | PC3:IsMatchTableRowCount_0 | PC3:ReadCSVFileColumnNames_0 | | PC3:IsMatchTableColumnRanges_0 | PC3:ReadCSVFileColumnNames_0 | | PC3:LoadCSVFileIntoTable_0 | PC3:ReadCSVFileColumnNames_0 | | PC3:CompactDatabase_0 | PC3:ReadCSVFileColumnNames_0 | | PC3:UpdateComputedColumns_0 | PC3:ReadCSVFileColumnNames_0 | | PC3:IsMatchCSVFileColumnNames_0 | PC3:ReadCSVFileColumnNames_0 | ------------------------------------------------------------------
Description: Find one of two patterns in the workflow data
SPARQL Query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX PC3: <http://www.cs.rpi.edu/~michaj6/provenance/PC3.owl#> PREFIX PC3OPM: <http://www.cs.rpi.edu/~michaj6/provenance/PC3OPM.owl#> CONSTRUCT { ?FXN PC3OPM:opWasTriggeredBy ?FXN2 } FROM <http://www.cs.rpi.edu/~michaj6/provenance/PC3.owl> FROM <http://www.cs.rpi.edu/~michaj6/provenance/PC3OPM.owl> WHERE { { ?WTB PC3OPM:wtbSource ?FXN . ?WTB PC3OPM:wtbTarget ?FXN2 } UNION { ?USD PC3OPM:usdSource ?FXN . ?USD PC3OPM:usdTarget ?VAR . ?WGB PC3OPM:wgbSource ?VAR . ?WGB PC3OPM:wgbTarget ?FXN2 } }
Description:
SPARQL Query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX PC3: <http://www.cs.rpi.edu/~michaj6/provenance/PC3.owl#> PREFIX PC3OPM: <http://www.cs.rpi.edu/~michaj6/provenance/PC3OPM.owl#> CONSTRUCT { ?FXN1 PC3OPM:opWasTriggeredBy ?FXN2 } FROM <http://www.cs.rpi.edu/~michaj6/provenance/PC3.owl> FROM <http://onto.rpi.edu/sw4j/sparql?queryURL=http://www.cs.rpi.edu/~michaj6/provenance/queries/general/ConstructOpWTB.sparql> WHERE { ?FXN1 PC3OPM:opWasTriggeredBy PC3:ForEach_0 . PC3:ForEach_0 PC3OPM:opWasTriggeredBy ?FXN2 . }
Description: Find one of two patterns in the workflow data
SPARQL Query:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX PC3: <http://www.cs.rpi.edu/~michaj6/provenance/PC3.owl#> PREFIX PC3OPM: <http://www.cs.rpi.edu/~michaj6/provenance/PC3OPM.owl#> CONSTRUCT { ?VAR PC3OPM:opWasDerivedFrom ?VAR2 } FROM <http://www.cs.rpi.edu/~michaj6/provenance/PC3.owl> FROM <http://www.cs.rpi.edu/~michaj6/provenance/PC3OPM.owl> WHERE { { ?WDF PC3OPM:wdfSource ?VAR . ?WDF PC3OPM:wdfTarget ?VAR2 } UNION { ?USD PC3OPM:wgbSource ?VAR . ?USD PC3OPM:wgbTarget ?FXN . ?WGB PC3OPM:usdSource ?FXN . ?WGB PC3OPM:usdTarget ?VAR2 } }
I | Attachment ![]() | Action | Size | Date | Who | Comment |
---|---|---|---|---|---|---|
![]() | opm.xml | manage | 39.1 K | 21 Apr 2009 - 21:05 | JamesMichaelis | Exported OPM Graph for TetherlessPC3 |
![]() | opm.pdf | manage | 33.5 K | 21 Apr 2009 - 21:05 | JamesMichaelis | Rendering of OPM Graph, using opm2dot |
![]() | PML-A.owl | manage | 64.1 K | 21 Apr 2009 - 21:06 | JamesMichaelis | PML Proof for entire workflow |
![]() | PML-B.owl | manage | 58.4 K | 21 Apr 2009 - 21:06 | JamesMichaelis | PML Proof for existence of database detection (Core Query 1) |
![]() | PML-C.owl | manage | 39.0 K | 21 Apr 2009 - 21:07 | JamesMichaelis | PML Proof for existence of image entry (Core Query 3) |
![]() | PC3.owl | manage | 95.7 K | 21 Apr 2009 - 21:07 | JamesMichaelis | ProtoProv? (pre-provenance) representation, in RDF |
![]() | OPMV2.xml | manage | 41.4 K | 10 Jun 2009 - 07:18 | JamesMichaelis |