From a715af3f870dd8abeaf9b401c493582c3c727a03 Mon Sep 17 00:00:00 2001 From: Meng Li <34143965+Meng6@users.noreply.github.com> Date: Sun, 1 Oct 2023 11:40:20 -0500 Subject: [PATCH 01/22] Fix typos: trace-vocab.jsonld Remove duplicates: trace-vocab.jsonld Update vocab: use rdfs:Class instead --- exports/trace-vocab.jsonld | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/exports/trace-vocab.jsonld b/exports/trace-vocab.jsonld index 4cfc372..4e47bfe 100644 --- a/exports/trace-vocab.jsonld +++ b/exports/trace-vocab.jsonld @@ -9,57 +9,50 @@ { "@id": "trov:TrustedResearchElement", - "@type": "rdf:Class", + "@type": "rdfs:Class", "rdfs:label": "TrustedResearchElement", "rdfs:comment": "Common base class for TRSs, TRPs, and TROs." }, { "@id": "trov:TrustedResearchSystem", - "@type": "rdf:Class", + "@type": "rdfs:Class", "rdfs:subClassOf": { "@id": "trov:TrustedResearchElement" }, "rdfs:label": "TrustedResearchSystem", "rdfs:comment": "A system certified to perform TRPs and assemble TROs." }, { "@id": "trov:TrustedResearchPerformance", - "@type": "rdf:Class", + "@type": "rdfs:Class", "rdfs:subClassOf": { "@id": "trov:TrustedResearchElement" }, "rdfs:label": "TrustedResearchPerformance", "rdfs:comment": "A set of research operations performed by a TRS." }, { "@id": "trov:TransparentResearchObject", - "@type": "rdf:Class", + "@type": "rdfs:Class", "rdfs:subClassOf": { "@id": "trov:TrustedResearchElement" }, "rdfs:label": "TransparentResearchObject", "rdfs:comment": "A set of research artifacts produced by a TRP and signed by the performing TRS." }, { "@id": "trov:TimeStampingAuthority", - "@type": "rdf:Class", + "@type": "rdfs:Class", "rdfs:subClassOf": { "@id": "trov:TrustedResearchElement" }, "rdfs:label": "TimeStampingAuthority", "rdfs:comment": "A timestamping authority trusted by a TRS." }, { "@id": "trov:TREAttribute", - "@type": "rdf:Class", + "@type": "rdfs:Class", "rdfs:label": "TREAttribute", "rdfs:comment": "An attribute of a TRS, TRP, or TRO." }, - { - "@id": "trov:TRSAttribute", - "@type": "rdf:Class", - "rdfs:subClassOf": { "@id": "trov:TREAttribute" }, - "rdfs:label": "TRSAttribute", - "rdfs:comment": "An attribute of a TRS." - }, { "@id": "trov:TRSCapability", "@type": "rdfs:Class", "rdfs:label": "TRSCapability", "rdfs:subClassOf": { "@id": "trov:TRSAttribute" }, - "rdfs:comment": "A policy always enforced by a particular TRS." + "rdfs:comment": "A capability of a TRS." }, { "@id": "trov:CanProvideInternetIsolation", @@ -80,7 +73,7 @@ "@type": "rdfs:Class", "rdfs:label": "EnforcesInternetIsolation", "rdfs:subClassOf": { "@id": "trov:TRSPolicy" }, - "rdfs:comment": "The policy of always preeventing Internet access during a TRP." + "rdfs:comment": "The policy of always preventing Internet access during a TRP." }, { "@id": "trov:TROAttribute", @@ -94,7 +87,7 @@ "@type": "rdfs:Class", "rdfs:label": "TRSAttribute", "rdfs:subClassOf": { "@id": "trov:TREAttribute" }, - "rdfs:comment": "A property of a particular TRS." + "rdfs:comment": "An attribute of a TRS." }, { "@id": "trov:IncludesAllInputData", From db69db700c8d08381427a1e10b4d1fa901e655cf Mon Sep 17 00:00:00 2001 From: Meng Li <34143965+Meng6@users.noreply.github.com> Date: Wed, 4 Oct 2023 14:45:24 -0500 Subject: [PATCH 02/22] Add a tag for geist installation --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index ec97f3d..ac4dabf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,4 +8,4 @@ rdfvr jinja2 jinja2_simple_tags tabulate -geist-p@git+https://github.com/CIRSS/geist-p \ No newline at end of file +geist-p@git+https://github.com/CIRSS/geist-p@v0.0.1 \ No newline at end of file From e955d034ac22e8e27befea55ddbcca40c2df740d Mon Sep 17 00:00:00 2001 From: Meng Li <34143965+Meng6@users.noreply.github.com> Date: Fri, 6 Oct 2023 10:12:31 -0500 Subject: [PATCH 03/22] Update demos --- .gitignore | 3 +- .../01-two-artifacts-no-trp/products/img.gv | 22 + .../01-two-artifacts-no-trp/products/img.svg | 188 ++ .../products/report_subclass.html | 62 + .../01-two-artifacts-no-trp/run.txt | 218 ++- .../products/img.gv | 22 + .../products/img.svg | 188 ++ .../products/report_subclass.html | 62 + .../02-three-artifacts-one-trp/run.txt | 218 ++- .../03-skope-lbda-processing/products/img.gv | 22 + .../03-skope-lbda-processing/products/img.svg | 188 ++ .../products/report_subclass.html | 62 + .../overall_tro_graph.html | 20 - .../report_inline_graph2/tro.svg | 1678 ----------------- .../03-skope-lbda-processing/run.sh | 24 - .../03-skope-lbda-processing/run.txt | 264 ++- .../03-skope-lbda-processing/templates.geist | 9 - demo/01-trov-examples/common/query-tro.sh | 125 ++ .../common/templates.geist} | 51 +- .../01-generate-key}/Makefile | 0 .../01-generate-key/run.sh | 21 +- .../01-generate-key/run.txt | 38 - .../02-simple-tro}/Makefile | 0 .../02-simple-tro/data/private.asc | 20 + .../02-simple-tro/data/public.gpg | 12 + .../01-gpg-runtime/02-simple-tro/run.sh | 63 + .../01-gpg-runtime/02-simple-tro/run.txt | 74 + .../{03-type-b2 => 01-gpg-runtime}/Makefile | 0 demo/02-explorations/01-minimal/data/query | 7 - demo/02-explorations/01-minimal/run.sh | 65 - demo/02-explorations/01-minimal/run.txt | 317 ---- .../01-generate-key}/Makefile | 0 .../01-generate-key/run.sh | 24 +- .../01-generate-key/run.txt | 45 +- .../02-simple-tro}/Makefile | 0 .../02-gpg-api/02-simple-tro/data/private.asc | 20 + .../02-gpg-api/02-simple-tro/data/public.gpg | 12 + .../02-simple-tro/run.sh | 68 +- .../02-gpg-api/02-simple-tro/run.txt | 92 + .../01-generate-key => 02-gpg-api}/Makefile | 0 demo/02-explorations/02-type-a/run.sh | 39 - demo/02-explorations/02-type-a/run.txt | 294 --- .../Makefile | 0 .../data/file1.csv | 0 .../data/file2.csv | 0 .../products/after.csv | 0 .../products/before.csv | 0 .../products/fingerprint_state.csv | 0 .../run.sh | 0 .../run.txt | 0 .../runtime/file1.csv | 0 .../runtime/file3.csv | 0 .../test.py | 0 demo/02-explorations/03-type-b2/run.sh | 30 - demo/02-explorations/03-type-b2/run.txt | 190 -- .../04-report-subclass-graph/base.gv | 5 - .../04-report-subclass-graph/graphviz.jinja | 34 - .../04-report-subclass-graph/products/img.gv | 14 - .../04-report-subclass-graph/products/img.jpg | Bin 11138 -> 0 bytes .../04-report-subclass-graph/products/img.svg | 52 - .../04-report-subclass-graph/report.html | 48 - .../04-report-subclass-graph/run.sh | 203 -- .../04-report-subclass-graph/run.txt | 349 ---- .../Makefile | 0 .../04-timestamp/data/digest.yaml | 2 + .../04-timestamp/data/file.tsq | Bin 0 -> 91 bytes .../data/signature.asc | 0 .../{10-timestamp => 04-timestamp}/run.sh | 2 +- .../{10-timestamp => 04-timestamp}/run.txt | 2 +- .../02-explorations/05-report-policies/run.sh | 109 -- .../05-report-policies/run.txt | 138 -- .../Makefile | 0 .../data/mappings.json | 2 +- .../data/tro.schema.ttl | 0 .../data/tro1.jsonld | 2 +- .../data/tro2.jsonld | 2 +- .../data/tro3.jsonld | 2 +- .../data/tro4.jsonld | 2 +- .../data/tro5.jsonld | 2 +- .../products/tro1.gv | 0 .../products/tro1.png | Bin .../products/tro2.gv | 0 .../products/tro2.png | Bin .../products/tro3.gv | 0 .../products/tro3.png | Bin .../products/tro4.gv | 0 .../products/tro4.png | Bin .../products/tro5.gv | 0 .../products/tro5.png | Bin .../run.sh | 0 .../run.txt | 0 .../02-simple-tro/data/message/bar.txt | 1 - .../02-simple-tro/data/message/foo.txt | 1 - .../02-simple-tro/data/private.asc | 20 - .../02-simple-tro/data/public.gpg | 12 - .../02-simple-tro/products/digest.txt | 1 - .../02-simple-tro/products/message.tar.gz | Bin 172 -> 0 bytes .../02-simple-tro/products/tro.jsonld | 16 - .../06-gpg-runtime-demos/02-simple-tro/run.sh | 126 -- .../02-simple-tro/run.txt | 148 -- .../07-gpg-api-demos/02-simple-tro/Makefile | 1 - .../02-simple-tro/data/message/bar.txt | 1 - .../02-simple-tro/data/message/foo.txt | 1 - .../02-simple-tro/data/private.asc | 20 - .../02-simple-tro/data/public.gpg | 12 - .../02-simple-tro/products/message.tar.gz | Bin 172 -> 0 bytes .../02-simple-tro/products/tro.jsonld | 19 - .../07-gpg-api-demos/02-simple-tro/run.txt | 137 -- .../02-explorations/07-gpg-api-demos/Makefile | 1 - .../08-tro-fingerprint/Makefile | 1 - .../08-tro-fingerprint/data/message/bar.txt | 1 - .../data/message/baz/baz.txt | 1 - .../08-tro-fingerprint/data/message/foo.txt | 1 - .../message_with_diff_filenames/test1.txt | 1 - .../message_with_diff_filenames/test2.txt | 1 - .../test3/test3.txt | 1 - .../08-tro-fingerprint/products/tro.jsonld | 18 - .../02-explorations/08-tro-fingerprint/run.sh | 255 --- .../08-tro-fingerprint/run.txt | 348 ---- .../09-tro-fingerprint-state/Makefile | 1 - demo/02-explorations/10-timestamp/Makefile | 1 - .../10-timestamp/data/digest.yaml | 2 - .../10-timestamp/data/file.tsq | Bin 91 -> 0 bytes demo/02-explorations/11-jsonld2csv/Makefile | 1 - .../11-jsonld2csv/data/tro2.jsonld | 132 -- .../11-jsonld2csv/data/tro3.jsonld | 260 --- .../tro1#composition_and_arrangement.csv | 3 - .../tro2#composition_and_arrangement.csv | 4 - .../tro2#tro_attribute_justification.csv | 2 - .../products/tro2#trp_and_arrangement.csv | 2 - .../tro3#composition_and_arrangement.csv | 7 - .../tro3#tro_attribute_justification.csv | 4 - .../products/tro3#trp_and_arrangement.csv | 4 - demo/02-explorations/11-jsonld2csv/run.sh | 33 - demo/02-explorations/11-jsonld2csv/run.txt | 59 - .../12-validate-jsonld/01-jsonschema/Makefile | 1 - .../01-jsonschema/data/tro1_c.jsonld | 76 - .../01-jsonschema/data/tro1_w.jsonld | 70 - .../12-validate-jsonld/01-jsonschema/run.sh | 27 - .../12-validate-jsonld/01-jsonschema/run.txt | 152 -- .../01-jsonschema/tro.schema.json | 171 -- .../02-rdflib-owlrl/Makefile | 1 - .../02-rdflib-owlrl/data/tro1.jsonld | 76 - .../02-rdflib-owlrl/data/tro2.jsonld | 102 - .../12-validate-jsonld/02-rdflib-owlrl/run.sh | 282 --- .../02-rdflib-owlrl/run.txt | 1075 ----------- .../12-validate-jsonld/03-pyshacl/Makefile | 1 - .../12-validate-jsonld/03-pyshacl/run.sh | 474 ----- .../12-validate-jsonld/03-pyshacl/run.txt | 574 ------ .../04-report-yfiles/Makefile | 1 - .../04-report-yfiles/data/tro.jsonld | 51 - .../04-report-yfiles/products/triples.csv | 20 - .../04-report-yfiles/run.sh | 55 - .../04-report-yfiles/run.txt | 54 - .../04-report-yfiles/visualize_triples.ipynb | 128 -- .../05-report-pygraphviz/Makefile | 1 - .../05-report-pygraphviz/data/tro.jsonld | 51 - .../05-report-pygraphviz/data/tro.schema.ttl | 128 -- .../products/scratch_report.gv | 24 - .../products/scratch_report.png | Bin 149736 -> 0 bytes .../products/tool_report.png | Bin 120341 -> 0 bytes .../products/tool_report.txt | 4 - .../05-report-pygraphviz/run.sh | 115 -- .../05-report-pygraphviz/run.txt | 111 -- .../06-test-tro-wrong-cases/Makefile | 1 - .../data/tro.schema.ttl | 128 -- .../06-test-tro-wrong-cases/data/tro2.jsonld | 76 - .../06-test-tro-wrong-cases/data/tro4.jsonld | 44 - .../06-test-tro-wrong-cases/data/tro5.jsonld | 46 - .../06-test-tro-wrong-cases/products/tro1.gv | 80 - .../06-test-tro-wrong-cases/products/tro1.png | Bin 120341 -> 0 bytes .../06-test-tro-wrong-cases/products/tro2.png | Bin 318189 -> 0 bytes .../06-test-tro-wrong-cases/products/tro3.gv | 215 --- .../06-test-tro-wrong-cases/products/tro3.png | Bin 391915 -> 0 bytes .../06-test-tro-wrong-cases/products/tro4.gv | 58 - .../06-test-tro-wrong-cases/products/tro4.png | Bin 84092 -> 0 bytes .../06-test-tro-wrong-cases/products/tro5.gv | 71 - .../06-test-tro-wrong-cases/products/tro5.png | Bin 118819 -> 0 bytes .../06-test-tro-wrong-cases/products/tro5.txt | 4 - .../06-test-tro-wrong-cases/run.sh | 95 - .../06-test-tro-wrong-cases/run.txt | 914 --------- .../07-report-rdfvr/Makefile | 1 - .../07-report-rdfvr/data/tro.schema.ttl | 128 -- .../07-report-rdfvr/data/tro1.jsonld | 51 - .../07-report-rdfvr/data/tro3.jsonld | 102 - .../07-report-rdfvr/products/tro2.gv | 168 -- .../12-validate-jsonld/Makefile | 1 - .../02-explorations/common/trace-vocab.jsonld | 102 - .../common/tro-01-from-minimal-trs.jsonld | 14 - .../common/tro-02-from-type-a-trs.jsonld | 21 - .../common/tro-03-from-type-b2-trs.jsonld | 21 - demo/02-explorations/common/tro/file1 | 1 + demo/02-explorations/common/tro/file2 | 1 + .../tro1.jsonld => common/tro/tro.jsonld} | 0 .../common/trs-01-minimal.jsonld | 15 - .../common/trs-02-type-a.jsonld | 34 - .../common/trs-03-type-b2.jsonld | 35 - demo/02-explorations/common/trs-queries.sh | 144 -- pyproject.toml | 6 - src/trace_model/format_string.py | 36 - src/trace_model/jsonld2csv.py | 79 - src/trace_model/tro_fingerprint.py | 51 - src/trace_model/validate_jsonld.py | 30 - src/trace_model/validate_tro.py | 200 -- 204 files changed, 1921 insertions(+), 12364 deletions(-) create mode 100644 demo/01-trov-examples/01-two-artifacts-no-trp/products/img.gv create mode 100644 demo/01-trov-examples/01-two-artifacts-no-trp/products/img.svg create mode 100644 demo/01-trov-examples/01-two-artifacts-no-trp/products/report_subclass.html create mode 100644 demo/01-trov-examples/02-three-artifacts-one-trp/products/img.gv create mode 100644 demo/01-trov-examples/02-three-artifacts-one-trp/products/img.svg create mode 100644 demo/01-trov-examples/02-three-artifacts-one-trp/products/report_subclass.html create mode 100644 demo/01-trov-examples/03-skope-lbda-processing/products/img.gv create mode 100644 demo/01-trov-examples/03-skope-lbda-processing/products/img.svg create mode 100644 demo/01-trov-examples/03-skope-lbda-processing/products/report_subclass.html delete mode 100644 demo/01-trov-examples/03-skope-lbda-processing/report_inline_graph2/overall_tro_graph.html delete mode 100644 demo/01-trov-examples/03-skope-lbda-processing/report_inline_graph2/tro.svg rename demo/{02-explorations/04-report-subclass-graph/graphviz.geist => 01-trov-examples/common/templates.geist} (61%) rename demo/02-explorations/{01-minimal => 01-gpg-runtime/01-generate-key}/Makefile (100%) rename demo/02-explorations/{06-gpg-runtime-demos => 01-gpg-runtime}/01-generate-key/run.sh (75%) rename demo/02-explorations/{06-gpg-runtime-demos => 01-gpg-runtime}/01-generate-key/run.txt (61%) rename demo/02-explorations/{02-type-a => 01-gpg-runtime/02-simple-tro}/Makefile (100%) create mode 100644 demo/02-explorations/01-gpg-runtime/02-simple-tro/data/private.asc create mode 100644 demo/02-explorations/01-gpg-runtime/02-simple-tro/data/public.gpg create mode 100644 demo/02-explorations/01-gpg-runtime/02-simple-tro/run.sh create mode 100644 demo/02-explorations/01-gpg-runtime/02-simple-tro/run.txt rename demo/02-explorations/{03-type-b2 => 01-gpg-runtime}/Makefile (100%) delete mode 100644 demo/02-explorations/01-minimal/data/query delete mode 100644 demo/02-explorations/01-minimal/run.sh delete mode 100644 demo/02-explorations/01-minimal/run.txt rename demo/02-explorations/{04-report-subclass-graph => 02-gpg-api/01-generate-key}/Makefile (100%) rename demo/02-explorations/{07-gpg-api-demos => 02-gpg-api}/01-generate-key/run.sh (76%) rename demo/02-explorations/{07-gpg-api-demos => 02-gpg-api}/01-generate-key/run.txt (52%) rename demo/02-explorations/{05-report-policies => 02-gpg-api/02-simple-tro}/Makefile (100%) create mode 100644 demo/02-explorations/02-gpg-api/02-simple-tro/data/private.asc create mode 100644 demo/02-explorations/02-gpg-api/02-simple-tro/data/public.gpg rename demo/02-explorations/{07-gpg-api-demos => 02-gpg-api}/02-simple-tro/run.sh (52%) create mode 100644 demo/02-explorations/02-gpg-api/02-simple-tro/run.txt rename demo/02-explorations/{06-gpg-runtime-demos/01-generate-key => 02-gpg-api}/Makefile (100%) delete mode 100644 demo/02-explorations/02-type-a/run.sh delete mode 100644 demo/02-explorations/02-type-a/run.txt rename demo/02-explorations/{06-gpg-runtime-demos/02-simple-tro => 03-tro-fingerprint-state}/Makefile (100%) rename demo/02-explorations/{09-tro-fingerprint-state => 03-tro-fingerprint-state}/data/file1.csv (100%) rename demo/02-explorations/{09-tro-fingerprint-state => 03-tro-fingerprint-state}/data/file2.csv (100%) rename demo/02-explorations/{09-tro-fingerprint-state => 03-tro-fingerprint-state}/products/after.csv (100%) rename demo/02-explorations/{09-tro-fingerprint-state => 03-tro-fingerprint-state}/products/before.csv (100%) rename demo/02-explorations/{09-tro-fingerprint-state => 03-tro-fingerprint-state}/products/fingerprint_state.csv (100%) rename demo/02-explorations/{09-tro-fingerprint-state => 03-tro-fingerprint-state}/run.sh (100%) rename demo/02-explorations/{09-tro-fingerprint-state => 03-tro-fingerprint-state}/run.txt (100%) rename demo/02-explorations/{09-tro-fingerprint-state => 03-tro-fingerprint-state}/runtime/file1.csv (100%) rename demo/02-explorations/{09-tro-fingerprint-state => 03-tro-fingerprint-state}/runtime/file3.csv (100%) rename demo/02-explorations/{09-tro-fingerprint-state => 03-tro-fingerprint-state}/test.py (100%) delete mode 100644 demo/02-explorations/03-type-b2/run.sh delete mode 100644 demo/02-explorations/03-type-b2/run.txt delete mode 100644 demo/02-explorations/04-report-subclass-graph/base.gv delete mode 100644 demo/02-explorations/04-report-subclass-graph/graphviz.jinja delete mode 100644 demo/02-explorations/04-report-subclass-graph/products/img.gv delete mode 100644 demo/02-explorations/04-report-subclass-graph/products/img.jpg delete mode 100644 demo/02-explorations/04-report-subclass-graph/products/img.svg delete mode 100644 demo/02-explorations/04-report-subclass-graph/report.html delete mode 100644 demo/02-explorations/04-report-subclass-graph/run.sh delete mode 100644 demo/02-explorations/04-report-subclass-graph/run.txt rename demo/02-explorations/{06-gpg-runtime-demos => 04-timestamp}/Makefile (100%) create mode 100644 demo/02-explorations/04-timestamp/data/digest.yaml create mode 100644 demo/02-explorations/04-timestamp/data/file.tsq rename demo/02-explorations/{10-timestamp => 04-timestamp}/data/signature.asc (100%) rename demo/02-explorations/{10-timestamp => 04-timestamp}/run.sh (95%) rename demo/02-explorations/{10-timestamp => 04-timestamp}/run.txt (96%) delete mode 100644 demo/02-explorations/05-report-policies/run.sh delete mode 100644 demo/02-explorations/05-report-policies/run.txt rename demo/02-explorations/{07-gpg-api-demos/01-generate-key => 05-validate-tro-declaration}/Makefile (100%) rename demo/02-explorations/{12-validate-jsonld/07-report-rdfvr => 05-validate-tro-declaration}/data/mappings.json (78%) rename demo/02-explorations/{12-validate-jsonld/03-pyshacl => 05-validate-tro-declaration}/data/tro.schema.ttl (100%) rename demo/02-explorations/{12-validate-jsonld/06-test-tro-wrong-cases => 05-validate-tro-declaration}/data/tro1.jsonld (95%) rename demo/02-explorations/{12-validate-jsonld/07-report-rdfvr => 05-validate-tro-declaration}/data/tro2.jsonld (98%) rename demo/02-explorations/{12-validate-jsonld/06-test-tro-wrong-cases => 05-validate-tro-declaration}/data/tro3.jsonld (98%) rename demo/02-explorations/{12-validate-jsonld/07-report-rdfvr => 05-validate-tro-declaration}/data/tro4.jsonld (94%) rename demo/02-explorations/{12-validate-jsonld/07-report-rdfvr => 05-validate-tro-declaration}/data/tro5.jsonld (95%) rename demo/02-explorations/{12-validate-jsonld/07-report-rdfvr => 05-validate-tro-declaration}/products/tro1.gv (100%) rename demo/02-explorations/{12-validate-jsonld/07-report-rdfvr => 05-validate-tro-declaration}/products/tro1.png (100%) rename demo/02-explorations/{12-validate-jsonld/06-test-tro-wrong-cases => 05-validate-tro-declaration}/products/tro2.gv (100%) rename demo/02-explorations/{12-validate-jsonld/07-report-rdfvr => 05-validate-tro-declaration}/products/tro2.png (100%) rename demo/02-explorations/{12-validate-jsonld/07-report-rdfvr => 05-validate-tro-declaration}/products/tro3.gv (100%) rename demo/02-explorations/{12-validate-jsonld/07-report-rdfvr => 05-validate-tro-declaration}/products/tro3.png (100%) rename demo/02-explorations/{12-validate-jsonld/07-report-rdfvr => 05-validate-tro-declaration}/products/tro4.gv (100%) rename demo/02-explorations/{12-validate-jsonld/07-report-rdfvr => 05-validate-tro-declaration}/products/tro4.png (100%) rename demo/02-explorations/{12-validate-jsonld/07-report-rdfvr => 05-validate-tro-declaration}/products/tro5.gv (100%) rename demo/02-explorations/{12-validate-jsonld/07-report-rdfvr => 05-validate-tro-declaration}/products/tro5.png (100%) rename demo/02-explorations/{12-validate-jsonld/07-report-rdfvr => 05-validate-tro-declaration}/run.sh (100%) rename demo/02-explorations/{12-validate-jsonld/07-report-rdfvr => 05-validate-tro-declaration}/run.txt (100%) delete mode 100644 demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/data/message/bar.txt delete mode 100644 demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/data/message/foo.txt delete mode 100644 demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/data/private.asc delete mode 100644 demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/data/public.gpg delete mode 100644 demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/products/digest.txt delete mode 100644 demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/products/message.tar.gz delete mode 100644 demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/products/tro.jsonld delete mode 100644 demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/run.sh delete mode 100644 demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/run.txt delete mode 100644 demo/02-explorations/07-gpg-api-demos/02-simple-tro/Makefile delete mode 100644 demo/02-explorations/07-gpg-api-demos/02-simple-tro/data/message/bar.txt delete mode 100644 demo/02-explorations/07-gpg-api-demos/02-simple-tro/data/message/foo.txt delete mode 100644 demo/02-explorations/07-gpg-api-demos/02-simple-tro/data/private.asc delete mode 100644 demo/02-explorations/07-gpg-api-demos/02-simple-tro/data/public.gpg delete mode 100644 demo/02-explorations/07-gpg-api-demos/02-simple-tro/products/message.tar.gz delete mode 100644 demo/02-explorations/07-gpg-api-demos/02-simple-tro/products/tro.jsonld delete mode 100644 demo/02-explorations/07-gpg-api-demos/02-simple-tro/run.txt delete mode 100644 demo/02-explorations/07-gpg-api-demos/Makefile delete mode 100644 demo/02-explorations/08-tro-fingerprint/Makefile delete mode 100644 demo/02-explorations/08-tro-fingerprint/data/message/bar.txt delete mode 100644 demo/02-explorations/08-tro-fingerprint/data/message/baz/baz.txt delete mode 100644 demo/02-explorations/08-tro-fingerprint/data/message/foo.txt delete mode 100644 demo/02-explorations/08-tro-fingerprint/data/message_with_diff_filenames/test1.txt delete mode 100644 demo/02-explorations/08-tro-fingerprint/data/message_with_diff_filenames/test2.txt delete mode 100644 demo/02-explorations/08-tro-fingerprint/data/message_with_diff_filenames/test3/test3.txt delete mode 100644 demo/02-explorations/08-tro-fingerprint/products/tro.jsonld delete mode 100644 demo/02-explorations/08-tro-fingerprint/run.sh delete mode 100644 demo/02-explorations/08-tro-fingerprint/run.txt delete mode 100644 demo/02-explorations/09-tro-fingerprint-state/Makefile delete mode 100644 demo/02-explorations/10-timestamp/Makefile delete mode 100644 demo/02-explorations/10-timestamp/data/digest.yaml delete mode 100644 demo/02-explorations/10-timestamp/data/file.tsq delete mode 100644 demo/02-explorations/11-jsonld2csv/Makefile delete mode 100644 demo/02-explorations/11-jsonld2csv/data/tro2.jsonld delete mode 100644 demo/02-explorations/11-jsonld2csv/data/tro3.jsonld delete mode 100644 demo/02-explorations/11-jsonld2csv/products/tro1#composition_and_arrangement.csv delete mode 100644 demo/02-explorations/11-jsonld2csv/products/tro2#composition_and_arrangement.csv delete mode 100644 demo/02-explorations/11-jsonld2csv/products/tro2#tro_attribute_justification.csv delete mode 100644 demo/02-explorations/11-jsonld2csv/products/tro2#trp_and_arrangement.csv delete mode 100644 demo/02-explorations/11-jsonld2csv/products/tro3#composition_and_arrangement.csv delete mode 100644 demo/02-explorations/11-jsonld2csv/products/tro3#tro_attribute_justification.csv delete mode 100644 demo/02-explorations/11-jsonld2csv/products/tro3#trp_and_arrangement.csv delete mode 100644 demo/02-explorations/11-jsonld2csv/run.sh delete mode 100644 demo/02-explorations/11-jsonld2csv/run.txt delete mode 100644 demo/02-explorations/12-validate-jsonld/01-jsonschema/Makefile delete mode 100644 demo/02-explorations/12-validate-jsonld/01-jsonschema/data/tro1_c.jsonld delete mode 100644 demo/02-explorations/12-validate-jsonld/01-jsonschema/data/tro1_w.jsonld delete mode 100644 demo/02-explorations/12-validate-jsonld/01-jsonschema/run.sh delete mode 100644 demo/02-explorations/12-validate-jsonld/01-jsonschema/run.txt delete mode 100644 demo/02-explorations/12-validate-jsonld/01-jsonschema/tro.schema.json delete mode 100644 demo/02-explorations/12-validate-jsonld/02-rdflib-owlrl/Makefile delete mode 100644 demo/02-explorations/12-validate-jsonld/02-rdflib-owlrl/data/tro1.jsonld delete mode 100644 demo/02-explorations/12-validate-jsonld/02-rdflib-owlrl/data/tro2.jsonld delete mode 100644 demo/02-explorations/12-validate-jsonld/02-rdflib-owlrl/run.sh delete mode 100644 demo/02-explorations/12-validate-jsonld/02-rdflib-owlrl/run.txt delete mode 100644 demo/02-explorations/12-validate-jsonld/03-pyshacl/Makefile delete mode 100644 demo/02-explorations/12-validate-jsonld/03-pyshacl/run.sh delete mode 100644 demo/02-explorations/12-validate-jsonld/03-pyshacl/run.txt delete mode 100644 demo/02-explorations/12-validate-jsonld/04-report-yfiles/Makefile delete mode 100644 demo/02-explorations/12-validate-jsonld/04-report-yfiles/data/tro.jsonld delete mode 100644 demo/02-explorations/12-validate-jsonld/04-report-yfiles/products/triples.csv delete mode 100644 demo/02-explorations/12-validate-jsonld/04-report-yfiles/run.sh delete mode 100644 demo/02-explorations/12-validate-jsonld/04-report-yfiles/run.txt delete mode 100644 demo/02-explorations/12-validate-jsonld/04-report-yfiles/visualize_triples.ipynb delete mode 100644 demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/Makefile delete mode 100644 demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/data/tro.jsonld delete mode 100644 demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/data/tro.schema.ttl delete mode 100644 demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/products/scratch_report.gv delete mode 100644 demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/products/scratch_report.png delete mode 100644 demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/products/tool_report.png delete mode 100644 demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/products/tool_report.txt delete mode 100644 demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/run.sh delete mode 100644 demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/run.txt delete mode 100644 demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/Makefile delete mode 100644 demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/data/tro.schema.ttl delete mode 100644 demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/data/tro2.jsonld delete mode 100644 demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/data/tro4.jsonld delete mode 100644 demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/data/tro5.jsonld delete mode 100644 demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro1.gv delete mode 100644 demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro1.png delete mode 100644 demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro2.png delete mode 100644 demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro3.gv delete mode 100644 demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro3.png delete mode 100644 demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro4.gv delete mode 100644 demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro4.png delete mode 100644 demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro5.gv delete mode 100644 demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro5.png delete mode 100644 demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro5.txt delete mode 100644 demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/run.sh delete mode 100644 demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/run.txt delete mode 100644 demo/02-explorations/12-validate-jsonld/07-report-rdfvr/Makefile delete mode 100644 demo/02-explorations/12-validate-jsonld/07-report-rdfvr/data/tro.schema.ttl delete mode 100644 demo/02-explorations/12-validate-jsonld/07-report-rdfvr/data/tro1.jsonld delete mode 100644 demo/02-explorations/12-validate-jsonld/07-report-rdfvr/data/tro3.jsonld delete mode 100644 demo/02-explorations/12-validate-jsonld/07-report-rdfvr/products/tro2.gv delete mode 100644 demo/02-explorations/12-validate-jsonld/Makefile delete mode 100644 demo/02-explorations/common/trace-vocab.jsonld delete mode 100644 demo/02-explorations/common/tro-01-from-minimal-trs.jsonld delete mode 100644 demo/02-explorations/common/tro-02-from-type-a-trs.jsonld delete mode 100644 demo/02-explorations/common/tro-03-from-type-b2-trs.jsonld create mode 100644 demo/02-explorations/common/tro/file1 create mode 100644 demo/02-explorations/common/tro/file2 rename demo/02-explorations/{11-jsonld2csv/data/tro1.jsonld => common/tro/tro.jsonld} (100%) delete mode 100644 demo/02-explorations/common/trs-01-minimal.jsonld delete mode 100644 demo/02-explorations/common/trs-02-type-a.jsonld delete mode 100644 demo/02-explorations/common/trs-03-type-b2.jsonld delete mode 100644 demo/02-explorations/common/trs-queries.sh delete mode 100644 src/trace_model/format_string.py delete mode 100644 src/trace_model/jsonld2csv.py delete mode 100644 src/trace_model/tro_fingerprint.py delete mode 100644 src/trace_model/validate_jsonld.py delete mode 100644 src/trace_model/validate_tro.py diff --git a/.gitignore b/.gitignore index 2bf72dd..411b5d7 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ build dist *.pyc *.egg-info -.* \ No newline at end of file +.* +__pycache__ \ No newline at end of file diff --git a/demo/01-trov-examples/01-two-artifacts-no-trp/products/img.gv b/demo/01-trov-examples/01-two-artifacts-no-trp/products/img.gv new file mode 100644 index 0000000..9b2aad2 --- /dev/null +++ b/demo/01-trov-examples/01-two-artifacts-no-trp/products/img.gv @@ -0,0 +1,22 @@ + + digraph subclass_vocab_graph { + rankdir=LR + fontname=Courier; fontsize=12; labelloc=t + label="Subclass Vocab Graph" + node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] + + "ArtifactCollection" -> "ArtifactComposition" + "ArtifactCollection" -> "ArtifactLocus" + "TREAttribute" -> "TROAttribute" + "TREAttribute" -> "TRSAttribute" + "TROAttribute" -> "IncludesAllInputData" + "TRSAttribute" -> "TRSCapability" + "TRSCapability" -> "CanProvideInternetIsolation" + "TRSCapability" -> "TRSPolicy" + "TRSPolicy" -> "EnforcesInternetIsolation" + "TrustedResearchElement" -> "TimeStampingAuthority" + "TrustedResearchElement" -> "TransparentResearchObject" + "TrustedResearchElement" -> "TrustedResearchPerformance" + "TrustedResearchElement" -> "TrustedResearchSystem" + + } \ No newline at end of file diff --git a/demo/01-trov-examples/01-two-artifacts-no-trp/products/img.svg b/demo/01-trov-examples/01-two-artifacts-no-trp/products/img.svg new file mode 100644 index 0000000..1137c3b --- /dev/null +++ b/demo/01-trov-examples/01-two-artifacts-no-trp/products/img.svg @@ -0,0 +1,188 @@ + + + + + + +subclass_vocab_graph + +Subclass Vocab Graph + + +ArtifactCollection + +ArtifactCollection + + + +ArtifactComposition + +ArtifactComposition + + + +ArtifactCollection->ArtifactComposition + + + + + +ArtifactLocus + +ArtifactLocus + + + +ArtifactCollection->ArtifactLocus + + + + + +TREAttribute + +TREAttribute + + + +TROAttribute + +TROAttribute + + + +TREAttribute->TROAttribute + + + + + +TRSAttribute + +TRSAttribute + + + +TREAttribute->TRSAttribute + + + + + +IncludesAllInputData + +IncludesAllInputData + + + +TROAttribute->IncludesAllInputData + + + + + +TRSCapability + +TRSCapability + + + +TRSAttribute->TRSCapability + + + + + +CanProvideInternetIsolation + +CanProvideInternetIsolation + + + +TRSCapability->CanProvideInternetIsolation + + + + + +TRSPolicy + +TRSPolicy + + + +TRSCapability->TRSPolicy + + + + + +EnforcesInternetIsolation + +EnforcesInternetIsolation + + + +TRSPolicy->EnforcesInternetIsolation + + + + + +TrustedResearchElement + +TrustedResearchElement + + + +TimeStampingAuthority + +TimeStampingAuthority + + + +TrustedResearchElement->TimeStampingAuthority + + + + + +TransparentResearchObject + +TransparentResearchObject + + + +TrustedResearchElement->TransparentResearchObject + + + + + +TrustedResearchPerformance + +TrustedResearchPerformance + + + +TrustedResearchElement->TrustedResearchPerformance + + + + + +TrustedResearchSystem + +TrustedResearchSystem + + + +TrustedResearchElement->TrustedResearchSystem + + + + + diff --git a/demo/01-trov-examples/01-two-artifacts-no-trp/products/report_subclass.html b/demo/01-trov-examples/01-two-artifacts-no-trp/products/report_subclass.html new file mode 100644 index 0000000..abb0246 --- /dev/null +++ b/demo/01-trov-examples/01-two-artifacts-no-trp/products/report_subclass.html @@ -0,0 +1,62 @@ + + + + + + + + + Subclass Report + +

Visualize subclass of the vocabularies

+

1. SVG

+ +

2. GV

+

+    digraph subclass_vocab_graph {
+    rankdir=LR
+    fontname=Courier; fontsize=12; labelloc=t
+    label="Subclass Vocab Graph"
+            node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier]
+                            
+    "ArtifactCollection" -> "ArtifactComposition"                            
+    "ArtifactCollection" -> "ArtifactLocus"                            
+    "TREAttribute" -> "TROAttribute"                            
+    "TREAttribute" -> "TRSAttribute"                            
+    "TROAttribute" -> "IncludesAllInputData"                            
+    "TRSAttribute" -> "TRSCapability"                            
+    "TRSCapability" -> "CanProvideInternetIsolation"                            
+    "TRSCapability" -> "TRSPolicy"                            
+    "TRSPolicy" -> "EnforcesInternetIsolation"                            
+    "TrustedResearchElement" -> "TimeStampingAuthority"                            
+    "TrustedResearchElement" -> "TransparentResearchObject"                            
+    "TrustedResearchElement" -> "TrustedResearchPerformance"                            
+    "TrustedResearchElement" -> "TrustedResearchSystem"            
+            
+    }        
+

3. Table

+ + + + + + + + + + + + + + + + +
ParentLabelChildLabel
"ArtifactCollection""ArtifactComposition"
"ArtifactCollection""ArtifactLocus"
"TREAttribute""TROAttribute"
"TREAttribute""TRSAttribute"
"TROAttribute""IncludesAllInputData"
"TRSAttribute""TRSCapability"
"TRSCapability""CanProvideInternetIsolation"
"TRSCapability""TRSPolicy"
"TRSPolicy""EnforcesInternetIsolation"
"TrustedResearchElement""TimeStampingAuthority"
"TrustedResearchElement""TransparentResearchObject"
"TrustedResearchElement""TrustedResearchPerformance"
"TrustedResearchElement""TrustedResearchSystem"
+ + diff --git a/demo/01-trov-examples/01-two-artifacts-no-trp/run.txt b/demo/01-trov-examples/01-two-artifacts-no-trp/run.txt index 95ad208..01b3fda 100644 --- a/demo/01-trov-examples/01-two-artifacts-no-trp/run.txt +++ b/demo/01-trov-examples/01-two-artifacts-no-trp/run.txt @@ -40,7 +40,7 @@ geist export --dataset kb --outputformat nt | sort | grep trov "CompositionFingerprint" . . . - "The policy of always preeventing Internet access during a TRP." . + "The policy of always preventing Internet access during a TRP." . "EnforcesInternetIsolation" . . . @@ -57,7 +57,7 @@ geist export --dataset kb --outputformat nt | sort | grep trov "A research artifact described by a TRO." . "ResearchArtifact" . . - . + . "An attribute of a TRS, TRP, or TRO." . "TREAttribute" . . @@ -66,15 +66,13 @@ geist export --dataset kb --outputformat nt | sort | grep trov "TROAttribute" . . . - . . - "A property of a particular TRS." . "An attribute of a TRS." . "TRSAttribute" . . . . - "A policy always enforced by a particular TRS." . + "A capability of a TRS." . "TRSCapability" . . . @@ -86,28 +84,27 @@ geist export --dataset kb --outputformat nt | sort | grep trov . . . - . + . "A timestamping authority trusted by a TRS." . "TimeStampingAuthority" . . . - . + . "A set of research artifacts produced by a TRP and signed by the performing TRS." . "TransparentResearchObject" . . . - . + . "Common base class for TRSs, TRPs, and TROs." . "TrustedResearchElement" . . - . . "A set of research operations performed by a TRS." . "An execution of a research process" . "TrustedResearchPerformance" . . . - . + . "A system certified to perform TRPs and assemble TROs." . "TrustedResearchSystem" . . @@ -189,9 +186,6 @@ geist load --dataset kb --inputformat json-ld --inputfile tro/tro.jsonld # Import TRO and TRS as JSON-LD and export as N-TRIPLES geist export --dataset kb --outputformat nt | sort | grep trov-example -# Destroy the dataset -geist destroy --dataset kb - ----------------------------------------------------------- cell outputs ----------------------------------------------------------- . . @@ -238,3 +232,201 @@ geist destroy --dataset kb ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +================================================= bash cell | query tro attributes ================================================= + +# What subclasses of TROAttribute have been defined? + +geist query --dataset kb << __END_QUERY__ + + PREFIX rdfs: + PREFIX trov: + + SELECT DISTINCT ?attribute ?attributeLabel ?attributeComment + WHERE { + ?attribute rdfs:subClassOf trov:TROAttribute . + ?attribute rdfs:label ?attributeLabel . + ?attribute rdfs:comment ?attributeComment . + } ORDER BY ?attribute ?attributeLabel ?attributeComment + +__END_QUERY__ + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- +| | attribute | attributeLabel | attributeComment | +|---:|:-----------------------------------------------------------|:-----------------------|:------------------------------------------------------------------------| +| 0 | | "IncludesAllInputData" | "TRO composition includes all input data employed in creating the TRO." | +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +================================================= bash cell | query trs attributes ================================================= + +# What subclasses of TRSAttribute have been defined? + +geist query --dataset kb << __END_QUERY__ + + PREFIX rdfs: + PREFIX trov: + + SELECT DISTINCT ?attribute ?attributeLabel ?attributeComment + WHERE { + ?attribute rdfs:subClassOf trov:TRSAttribute . + ?attribute rdfs:label ?attributeLabel . + ?attribute rdfs:comment ?attributeComment . + } ORDER BY ?attribute ?attributeLabel ?attributeComment + +__END_QUERY__ + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- +| | attribute | attributeLabel | attributeComment | +|---:|:------------------------------------------------------------------|:------------------------------|:----------------------------------------------------------------| +| 0 | | "CanProvideInternetIsolation" | "The capability to prevent Internet access during a TRP." | +| 1 | | "EnforcesInternetIsolation" | "The policy of always preventing Internet access during a TRP." | +| 2 | | "TRSCapability" | "A capability of a TRS." | +| 3 | | "TRSPolicy" | "A policy always enforced by a particular TRS." | +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +====================================== bash cell | reload trov vocabulary without inferences ======================================= + +# Destroy the dataset +geist destroy --dataset kb + +# Import TRACE vocabulary and TRO Manifest and export as N-TRIPLES +geist create --dataset kb --inputformat json-ld --inputfile /mnt/trace-model/exports/trace-vocab.jsonld --infer none + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +================================================= bash cell | query subclass vocab ================================================= + +# What (ParentClass, ChildClass) pairs does trov vocabulary have? + +geist report --outputroot products << END_TEMPLATE + +{%- use "../common/templates.geist" %} +{%- query isfilepath=False as query_subclass_vocab_str %} + PREFIX rdf: + PREFIX rdfs: + + SELECT DISTINCT ?ParentLabel ?ChildLabel + WHERE { + ?ParentClass rdf:type rdfs:Class ; + rdfs:label ?ParentLabel . + + ?ChildClass rdfs:subClassOf ?ParentClass ; + rdf:type rdfs:Class ; + rdfs:label ?ChildLabel . + + FILTER (?ParentLabel != ?ChildLabel) + } + ORDER BY ?ParentLabel ?ChildLabel +{% endquery %} +{%- set query_subclass_vocab = query_subclass_vocab_str | json2df %} + +{%- html "report_subclass.html" %} +{%- head "Subclass Report" %} + +

Visualize subclass of the vocabularies

+

1. SVG

+ {% img src="img.svg", width="80%" %} + {%- gv_graph "subclass_vocab_graph", "LR" %} + {%- gv_title "Subclass Vocab Graph" %} + + node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] + {% for _, row in query_subclass_vocab.iterrows() %} + {% gv_edge row["ParentLabel"], row["ChildLabel"] %} + {% endfor %} + + {% gv_end %} + {% endimg %} + +

2. GV

+ {% img src="img.gv" %} + {%- gv_graph "subclass_vocab_graph", "LR" %} + {%- gv_title "Subclass Vocab Graph" %} + + node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] + {% for _, row in query_subclass_vocab.iterrows() %} + {% gv_edge row["ParentLabel"], row["ChildLabel"] %} + {% endfor %} + + {% gv_end %} + {% endimg %} + +

3. Table

+ {%- table %} + {{ query_subclass_vocab_str }} + {% endtable %} + +{% endhtml %} +{%- destroy %} + +END_TEMPLATE + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- + + + + + + + + + Subclass Report + +

Visualize subclass of the vocabularies

+

1. SVG

+ +

2. GV

+

+    digraph subclass_vocab_graph {
+    rankdir=LR
+    fontname=Courier; fontsize=12; labelloc=t
+    label="Subclass Vocab Graph"
+            node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier]
+                            
+    "ArtifactCollection" -> "ArtifactComposition"                            
+    "ArtifactCollection" -> "ArtifactLocus"                            
+    "TREAttribute" -> "TROAttribute"                            
+    "TREAttribute" -> "TRSAttribute"                            
+    "TROAttribute" -> "IncludesAllInputData"                            
+    "TRSAttribute" -> "TRSCapability"                            
+    "TRSCapability" -> "CanProvideInternetIsolation"                            
+    "TRSCapability" -> "TRSPolicy"                            
+    "TRSPolicy" -> "EnforcesInternetIsolation"                            
+    "TrustedResearchElement" -> "TimeStampingAuthority"                            
+    "TrustedResearchElement" -> "TransparentResearchObject"                            
+    "TrustedResearchElement" -> "TrustedResearchPerformance"                            
+    "TrustedResearchElement" -> "TrustedResearchSystem"            
+            
+    }        
+

3. Table

+ + + + + + + + + + + + + + + + +
ParentLabelChildLabel
"ArtifactCollection""ArtifactComposition"
"ArtifactCollection""ArtifactLocus"
"TREAttribute""TROAttribute"
"TREAttribute""TRSAttribute"
"TROAttribute""IncludesAllInputData"
"TRSAttribute""TRSCapability"
"TRSCapability""CanProvideInternetIsolation"
"TRSCapability""TRSPolicy"
"TRSPolicy""EnforcesInternetIsolation"
"TrustedResearchElement""TimeStampingAuthority"
"TrustedResearchElement""TransparentResearchObject"
"TrustedResearchElement""TrustedResearchPerformance"
"TrustedResearchElement""TrustedResearchSystem"
+ + + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + diff --git a/demo/01-trov-examples/02-three-artifacts-one-trp/products/img.gv b/demo/01-trov-examples/02-three-artifacts-one-trp/products/img.gv new file mode 100644 index 0000000..9b2aad2 --- /dev/null +++ b/demo/01-trov-examples/02-three-artifacts-one-trp/products/img.gv @@ -0,0 +1,22 @@ + + digraph subclass_vocab_graph { + rankdir=LR + fontname=Courier; fontsize=12; labelloc=t + label="Subclass Vocab Graph" + node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] + + "ArtifactCollection" -> "ArtifactComposition" + "ArtifactCollection" -> "ArtifactLocus" + "TREAttribute" -> "TROAttribute" + "TREAttribute" -> "TRSAttribute" + "TROAttribute" -> "IncludesAllInputData" + "TRSAttribute" -> "TRSCapability" + "TRSCapability" -> "CanProvideInternetIsolation" + "TRSCapability" -> "TRSPolicy" + "TRSPolicy" -> "EnforcesInternetIsolation" + "TrustedResearchElement" -> "TimeStampingAuthority" + "TrustedResearchElement" -> "TransparentResearchObject" + "TrustedResearchElement" -> "TrustedResearchPerformance" + "TrustedResearchElement" -> "TrustedResearchSystem" + + } \ No newline at end of file diff --git a/demo/01-trov-examples/02-three-artifacts-one-trp/products/img.svg b/demo/01-trov-examples/02-three-artifacts-one-trp/products/img.svg new file mode 100644 index 0000000..1137c3b --- /dev/null +++ b/demo/01-trov-examples/02-three-artifacts-one-trp/products/img.svg @@ -0,0 +1,188 @@ + + + + + + +subclass_vocab_graph + +Subclass Vocab Graph + + +ArtifactCollection + +ArtifactCollection + + + +ArtifactComposition + +ArtifactComposition + + + +ArtifactCollection->ArtifactComposition + + + + + +ArtifactLocus + +ArtifactLocus + + + +ArtifactCollection->ArtifactLocus + + + + + +TREAttribute + +TREAttribute + + + +TROAttribute + +TROAttribute + + + +TREAttribute->TROAttribute + + + + + +TRSAttribute + +TRSAttribute + + + +TREAttribute->TRSAttribute + + + + + +IncludesAllInputData + +IncludesAllInputData + + + +TROAttribute->IncludesAllInputData + + + + + +TRSCapability + +TRSCapability + + + +TRSAttribute->TRSCapability + + + + + +CanProvideInternetIsolation + +CanProvideInternetIsolation + + + +TRSCapability->CanProvideInternetIsolation + + + + + +TRSPolicy + +TRSPolicy + + + +TRSCapability->TRSPolicy + + + + + +EnforcesInternetIsolation + +EnforcesInternetIsolation + + + +TRSPolicy->EnforcesInternetIsolation + + + + + +TrustedResearchElement + +TrustedResearchElement + + + +TimeStampingAuthority + +TimeStampingAuthority + + + +TrustedResearchElement->TimeStampingAuthority + + + + + +TransparentResearchObject + +TransparentResearchObject + + + +TrustedResearchElement->TransparentResearchObject + + + + + +TrustedResearchPerformance + +TrustedResearchPerformance + + + +TrustedResearchElement->TrustedResearchPerformance + + + + + +TrustedResearchSystem + +TrustedResearchSystem + + + +TrustedResearchElement->TrustedResearchSystem + + + + + diff --git a/demo/01-trov-examples/02-three-artifacts-one-trp/products/report_subclass.html b/demo/01-trov-examples/02-three-artifacts-one-trp/products/report_subclass.html new file mode 100644 index 0000000..abb0246 --- /dev/null +++ b/demo/01-trov-examples/02-three-artifacts-one-trp/products/report_subclass.html @@ -0,0 +1,62 @@ + + + + + + + + + Subclass Report + +

Visualize subclass of the vocabularies

+

1. SVG

+ +

2. GV

+

+    digraph subclass_vocab_graph {
+    rankdir=LR
+    fontname=Courier; fontsize=12; labelloc=t
+    label="Subclass Vocab Graph"
+            node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier]
+                            
+    "ArtifactCollection" -> "ArtifactComposition"                            
+    "ArtifactCollection" -> "ArtifactLocus"                            
+    "TREAttribute" -> "TROAttribute"                            
+    "TREAttribute" -> "TRSAttribute"                            
+    "TROAttribute" -> "IncludesAllInputData"                            
+    "TRSAttribute" -> "TRSCapability"                            
+    "TRSCapability" -> "CanProvideInternetIsolation"                            
+    "TRSCapability" -> "TRSPolicy"                            
+    "TRSPolicy" -> "EnforcesInternetIsolation"                            
+    "TrustedResearchElement" -> "TimeStampingAuthority"                            
+    "TrustedResearchElement" -> "TransparentResearchObject"                            
+    "TrustedResearchElement" -> "TrustedResearchPerformance"                            
+    "TrustedResearchElement" -> "TrustedResearchSystem"            
+            
+    }        
+

3. Table

+ + + + + + + + + + + + + + + + +
ParentLabelChildLabel
"ArtifactCollection""ArtifactComposition"
"ArtifactCollection""ArtifactLocus"
"TREAttribute""TROAttribute"
"TREAttribute""TRSAttribute"
"TROAttribute""IncludesAllInputData"
"TRSAttribute""TRSCapability"
"TRSCapability""CanProvideInternetIsolation"
"TRSCapability""TRSPolicy"
"TRSPolicy""EnforcesInternetIsolation"
"TrustedResearchElement""TimeStampingAuthority"
"TrustedResearchElement""TransparentResearchObject"
"TrustedResearchElement""TrustedResearchPerformance"
"TrustedResearchElement""TrustedResearchSystem"
+ + diff --git a/demo/01-trov-examples/02-three-artifacts-one-trp/run.txt b/demo/01-trov-examples/02-three-artifacts-one-trp/run.txt index 4f31f87..58bc476 100644 --- a/demo/01-trov-examples/02-three-artifacts-one-trp/run.txt +++ b/demo/01-trov-examples/02-three-artifacts-one-trp/run.txt @@ -40,7 +40,7 @@ geist export --dataset kb --outputformat nt | sort | grep trov "CompositionFingerprint" . . . - "The policy of always preeventing Internet access during a TRP." . + "The policy of always preventing Internet access during a TRP." . "EnforcesInternetIsolation" . . . @@ -57,7 +57,7 @@ geist export --dataset kb --outputformat nt | sort | grep trov "A research artifact described by a TRO." . "ResearchArtifact" . . - . + . "An attribute of a TRS, TRP, or TRO." . "TREAttribute" . . @@ -66,15 +66,13 @@ geist export --dataset kb --outputformat nt | sort | grep trov "TROAttribute" . . . - . . - "A property of a particular TRS." . "An attribute of a TRS." . "TRSAttribute" . . . . - "A policy always enforced by a particular TRS." . + "A capability of a TRS." . "TRSCapability" . . . @@ -86,28 +84,27 @@ geist export --dataset kb --outputformat nt | sort | grep trov . . . - . + . "A timestamping authority trusted by a TRS." . "TimeStampingAuthority" . . . - . + . "A set of research artifacts produced by a TRP and signed by the performing TRS." . "TransparentResearchObject" . . . - . + . "Common base class for TRSs, TRPs, and TROs." . "TrustedResearchElement" . . - . . "A set of research operations performed by a TRS." . "An execution of a research process" . "TrustedResearchPerformance" . . . - . + . "A system certified to perform TRPs and assemble TROs." . "TrustedResearchSystem" . . @@ -189,9 +186,6 @@ geist load --dataset kb --inputformat json-ld --inputfile tro/tro.jsonld # Import TRO and TRS as JSON-LD and export as N-TRIPLES geist export --dataset kb --outputformat nt | sort | grep trov-example -# Destroy the dataset -geist destroy --dataset kb - ----------------------------------------------------------- cell outputs ----------------------------------------------------------- . . @@ -278,3 +272,201 @@ geist destroy --dataset kb ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +================================================= bash cell | query tro attributes ================================================= + +# What subclasses of TROAttribute have been defined? + +geist query --dataset kb << __END_QUERY__ + + PREFIX rdfs: + PREFIX trov: + + SELECT DISTINCT ?attribute ?attributeLabel ?attributeComment + WHERE { + ?attribute rdfs:subClassOf trov:TROAttribute . + ?attribute rdfs:label ?attributeLabel . + ?attribute rdfs:comment ?attributeComment . + } ORDER BY ?attribute ?attributeLabel ?attributeComment + +__END_QUERY__ + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- +| | attribute | attributeLabel | attributeComment | +|---:|:-----------------------------------------------------------|:-----------------------|:------------------------------------------------------------------------| +| 0 | | "IncludesAllInputData" | "TRO composition includes all input data employed in creating the TRO." | +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +================================================= bash cell | query trs attributes ================================================= + +# What subclasses of TRSAttribute have been defined? + +geist query --dataset kb << __END_QUERY__ + + PREFIX rdfs: + PREFIX trov: + + SELECT DISTINCT ?attribute ?attributeLabel ?attributeComment + WHERE { + ?attribute rdfs:subClassOf trov:TRSAttribute . + ?attribute rdfs:label ?attributeLabel . + ?attribute rdfs:comment ?attributeComment . + } ORDER BY ?attribute ?attributeLabel ?attributeComment + +__END_QUERY__ + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- +| | attribute | attributeLabel | attributeComment | +|---:|:------------------------------------------------------------------|:------------------------------|:----------------------------------------------------------------| +| 0 | | "CanProvideInternetIsolation" | "The capability to prevent Internet access during a TRP." | +| 1 | | "EnforcesInternetIsolation" | "The policy of always preventing Internet access during a TRP." | +| 2 | | "TRSCapability" | "A capability of a TRS." | +| 3 | | "TRSPolicy" | "A policy always enforced by a particular TRS." | +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +====================================== bash cell | reload trov vocabulary without inferences ======================================= + +# Destroy the dataset +geist destroy --dataset kb + +# Import TRACE vocabulary and TRO Manifest and export as N-TRIPLES +geist create --dataset kb --inputformat json-ld --inputfile /mnt/trace-model/exports/trace-vocab.jsonld --infer none + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +================================================= bash cell | query subclass vocab ================================================= + +# What (ParentClass, ChildClass) pairs does trov vocabulary have? + +geist report --outputroot products << END_TEMPLATE + +{%- use "../common/templates.geist" %} +{%- query isfilepath=False as query_subclass_vocab_str %} + PREFIX rdf: + PREFIX rdfs: + + SELECT DISTINCT ?ParentLabel ?ChildLabel + WHERE { + ?ParentClass rdf:type rdfs:Class ; + rdfs:label ?ParentLabel . + + ?ChildClass rdfs:subClassOf ?ParentClass ; + rdf:type rdfs:Class ; + rdfs:label ?ChildLabel . + + FILTER (?ParentLabel != ?ChildLabel) + } + ORDER BY ?ParentLabel ?ChildLabel +{% endquery %} +{%- set query_subclass_vocab = query_subclass_vocab_str | json2df %} + +{%- html "report_subclass.html" %} +{%- head "Subclass Report" %} + +

Visualize subclass of the vocabularies

+

1. SVG

+ {% img src="img.svg", width="80%" %} + {%- gv_graph "subclass_vocab_graph", "LR" %} + {%- gv_title "Subclass Vocab Graph" %} + + node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] + {% for _, row in query_subclass_vocab.iterrows() %} + {% gv_edge row["ParentLabel"], row["ChildLabel"] %} + {% endfor %} + + {% gv_end %} + {% endimg %} + +

2. GV

+ {% img src="img.gv" %} + {%- gv_graph "subclass_vocab_graph", "LR" %} + {%- gv_title "Subclass Vocab Graph" %} + + node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] + {% for _, row in query_subclass_vocab.iterrows() %} + {% gv_edge row["ParentLabel"], row["ChildLabel"] %} + {% endfor %} + + {% gv_end %} + {% endimg %} + +

3. Table

+ {%- table %} + {{ query_subclass_vocab_str }} + {% endtable %} + +{% endhtml %} +{%- destroy %} + +END_TEMPLATE + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- + + + + + + + + + Subclass Report + +

Visualize subclass of the vocabularies

+

1. SVG

+ +

2. GV

+

+    digraph subclass_vocab_graph {
+    rankdir=LR
+    fontname=Courier; fontsize=12; labelloc=t
+    label="Subclass Vocab Graph"
+            node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier]
+                            
+    "ArtifactCollection" -> "ArtifactComposition"                            
+    "ArtifactCollection" -> "ArtifactLocus"                            
+    "TREAttribute" -> "TROAttribute"                            
+    "TREAttribute" -> "TRSAttribute"                            
+    "TROAttribute" -> "IncludesAllInputData"                            
+    "TRSAttribute" -> "TRSCapability"                            
+    "TRSCapability" -> "CanProvideInternetIsolation"                            
+    "TRSCapability" -> "TRSPolicy"                            
+    "TRSPolicy" -> "EnforcesInternetIsolation"                            
+    "TrustedResearchElement" -> "TimeStampingAuthority"                            
+    "TrustedResearchElement" -> "TransparentResearchObject"                            
+    "TrustedResearchElement" -> "TrustedResearchPerformance"                            
+    "TrustedResearchElement" -> "TrustedResearchSystem"            
+            
+    }        
+

3. Table

+ + + + + + + + + + + + + + + + +
ParentLabelChildLabel
"ArtifactCollection""ArtifactComposition"
"ArtifactCollection""ArtifactLocus"
"TREAttribute""TROAttribute"
"TREAttribute""TRSAttribute"
"TROAttribute""IncludesAllInputData"
"TRSAttribute""TRSCapability"
"TRSCapability""CanProvideInternetIsolation"
"TRSCapability""TRSPolicy"
"TRSPolicy""EnforcesInternetIsolation"
"TrustedResearchElement""TimeStampingAuthority"
"TrustedResearchElement""TransparentResearchObject"
"TrustedResearchElement""TrustedResearchPerformance"
"TrustedResearchElement""TrustedResearchSystem"
+ + + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + diff --git a/demo/01-trov-examples/03-skope-lbda-processing/products/img.gv b/demo/01-trov-examples/03-skope-lbda-processing/products/img.gv new file mode 100644 index 0000000..9b2aad2 --- /dev/null +++ b/demo/01-trov-examples/03-skope-lbda-processing/products/img.gv @@ -0,0 +1,22 @@ + + digraph subclass_vocab_graph { + rankdir=LR + fontname=Courier; fontsize=12; labelloc=t + label="Subclass Vocab Graph" + node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] + + "ArtifactCollection" -> "ArtifactComposition" + "ArtifactCollection" -> "ArtifactLocus" + "TREAttribute" -> "TROAttribute" + "TREAttribute" -> "TRSAttribute" + "TROAttribute" -> "IncludesAllInputData" + "TRSAttribute" -> "TRSCapability" + "TRSCapability" -> "CanProvideInternetIsolation" + "TRSCapability" -> "TRSPolicy" + "TRSPolicy" -> "EnforcesInternetIsolation" + "TrustedResearchElement" -> "TimeStampingAuthority" + "TrustedResearchElement" -> "TransparentResearchObject" + "TrustedResearchElement" -> "TrustedResearchPerformance" + "TrustedResearchElement" -> "TrustedResearchSystem" + + } \ No newline at end of file diff --git a/demo/01-trov-examples/03-skope-lbda-processing/products/img.svg b/demo/01-trov-examples/03-skope-lbda-processing/products/img.svg new file mode 100644 index 0000000..1137c3b --- /dev/null +++ b/demo/01-trov-examples/03-skope-lbda-processing/products/img.svg @@ -0,0 +1,188 @@ + + + + + + +subclass_vocab_graph + +Subclass Vocab Graph + + +ArtifactCollection + +ArtifactCollection + + + +ArtifactComposition + +ArtifactComposition + + + +ArtifactCollection->ArtifactComposition + + + + + +ArtifactLocus + +ArtifactLocus + + + +ArtifactCollection->ArtifactLocus + + + + + +TREAttribute + +TREAttribute + + + +TROAttribute + +TROAttribute + + + +TREAttribute->TROAttribute + + + + + +TRSAttribute + +TRSAttribute + + + +TREAttribute->TRSAttribute + + + + + +IncludesAllInputData + +IncludesAllInputData + + + +TROAttribute->IncludesAllInputData + + + + + +TRSCapability + +TRSCapability + + + +TRSAttribute->TRSCapability + + + + + +CanProvideInternetIsolation + +CanProvideInternetIsolation + + + +TRSCapability->CanProvideInternetIsolation + + + + + +TRSPolicy + +TRSPolicy + + + +TRSCapability->TRSPolicy + + + + + +EnforcesInternetIsolation + +EnforcesInternetIsolation + + + +TRSPolicy->EnforcesInternetIsolation + + + + + +TrustedResearchElement + +TrustedResearchElement + + + +TimeStampingAuthority + +TimeStampingAuthority + + + +TrustedResearchElement->TimeStampingAuthority + + + + + +TransparentResearchObject + +TransparentResearchObject + + + +TrustedResearchElement->TransparentResearchObject + + + + + +TrustedResearchPerformance + +TrustedResearchPerformance + + + +TrustedResearchElement->TrustedResearchPerformance + + + + + +TrustedResearchSystem + +TrustedResearchSystem + + + +TrustedResearchElement->TrustedResearchSystem + + + + + diff --git a/demo/01-trov-examples/03-skope-lbda-processing/products/report_subclass.html b/demo/01-trov-examples/03-skope-lbda-processing/products/report_subclass.html new file mode 100644 index 0000000..abb0246 --- /dev/null +++ b/demo/01-trov-examples/03-skope-lbda-processing/products/report_subclass.html @@ -0,0 +1,62 @@ + + + + + + + + + Subclass Report + +

Visualize subclass of the vocabularies

+

1. SVG

+ +

2. GV

+

+    digraph subclass_vocab_graph {
+    rankdir=LR
+    fontname=Courier; fontsize=12; labelloc=t
+    label="Subclass Vocab Graph"
+            node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier]
+                            
+    "ArtifactCollection" -> "ArtifactComposition"                            
+    "ArtifactCollection" -> "ArtifactLocus"                            
+    "TREAttribute" -> "TROAttribute"                            
+    "TREAttribute" -> "TRSAttribute"                            
+    "TROAttribute" -> "IncludesAllInputData"                            
+    "TRSAttribute" -> "TRSCapability"                            
+    "TRSCapability" -> "CanProvideInternetIsolation"                            
+    "TRSCapability" -> "TRSPolicy"                            
+    "TRSPolicy" -> "EnforcesInternetIsolation"                            
+    "TrustedResearchElement" -> "TimeStampingAuthority"                            
+    "TrustedResearchElement" -> "TransparentResearchObject"                            
+    "TrustedResearchElement" -> "TrustedResearchPerformance"                            
+    "TrustedResearchElement" -> "TrustedResearchSystem"            
+            
+    }        
+

3. Table

+ + + + + + + + + + + + + + + + +
ParentLabelChildLabel
"ArtifactCollection""ArtifactComposition"
"ArtifactCollection""ArtifactLocus"
"TREAttribute""TROAttribute"
"TREAttribute""TRSAttribute"
"TROAttribute""IncludesAllInputData"
"TRSAttribute""TRSCapability"
"TRSCapability""CanProvideInternetIsolation"
"TRSCapability""TRSPolicy"
"TRSPolicy""EnforcesInternetIsolation"
"TrustedResearchElement""TimeStampingAuthority"
"TrustedResearchElement""TransparentResearchObject"
"TrustedResearchElement""TrustedResearchPerformance"
"TrustedResearchElement""TrustedResearchSystem"
+ + diff --git a/demo/01-trov-examples/03-skope-lbda-processing/report_inline_graph2/overall_tro_graph.html b/demo/01-trov-examples/03-skope-lbda-processing/report_inline_graph2/overall_tro_graph.html deleted file mode 100644 index 230019c..0000000 --- a/demo/01-trov-examples/03-skope-lbda-processing/report_inline_graph2/overall_tro_graph.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - Overall TRO Graph - - -

Overall TRO Graph

- - diff --git a/demo/01-trov-examples/03-skope-lbda-processing/report_inline_graph2/tro.svg b/demo/01-trov-examples/03-skope-lbda-processing/report_inline_graph2/tro.svg deleted file mode 100644 index aa2e34d..0000000 --- a/demo/01-trov-examples/03-skope-lbda-processing/report_inline_graph2/tro.svg +++ /dev/null @@ -1,1678 +0,0 @@ - - - - - - - - - -arrangement/1 - -arrangement/1 - - - -trov:WebResourceArtifactArrangement - -trov:WebResourceArtifactArrangement - - - -arrangement/1->trov:WebResourceArtifactArrangement - - -rdf:type - - - -Arrangement decscribing location of LBDA NetCDF file on NOAA web server - -Arrangement decscribing location of LBDA NetCDF file on NOAA web server - - - -arrangement/1->Arrangement decscribing location of LBDA NetCDF file on NOAA web server - - -rdfs:comment - - - -arrangement/1/locus/1 - -arrangement/1/locus/1 - - - -arrangement/1->arrangement/1/locus/1 - - -trov:hasLocus - - - -trov:ArtifactLocus - -trov:ArtifactLocus - - - -arrangement/1/locus/1->trov:ArtifactLocus - - -rdf:type - - - -composition/1/artifact/1 - -composition/1/artifact/1 - - - -arrangement/1/locus/1->composition/1/artifact/1 - - -trov:hasArtifact - - - -https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc - -https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc - - - -arrangement/1/locus/1->https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc - - -trov:hasLocation - - - -trov:DataArtifact - -trov:DataArtifact - - - -composition/1/artifact/1->trov:DataArtifact - - -rdf:type - - - -NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset - -NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset - - - -composition/1/artifact/1->NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset - - -rdfs:comment - - - -application/x-netcdf - -application/x-netcdf - - - -composition/1/artifact/1->application/x-netcdf - - -trov:mimeType - - - -b02edb8d27cf9ac19087938dd3d306895e208bd3a9f0458e63292ea2695a1f78 - -b02edb8d27cf9ac19087938dd3d306895e208bd3a9f0458e63292ea2695a1f78 - - - -composition/1/artifact/1->b02edb8d27cf9ac19087938dd3d306895e208bd3a9f0458e63292ea2695a1f78 - - -trov:sha256 - - - -arrangement/2 - -arrangement/2 - - - -trov:LocalFilesystemArtifactArrangement - -trov:LocalFilesystemArtifactArrangement - - - -arrangement/2->trov:LocalFilesystemArtifactArrangement - - -rdf:type - - - -Arrangement on fileserver managed by TRS after downloading dataset and before running Jupyter notebook - -Arrangement on fileserver managed by TRS after downloading dataset and before running Jupyter notebook - - - -arrangement/2->Arrangement on fileserver managed by TRS after downloading dataset and before running Jupyter notebook - - -rdfs:comment - - - -arrangement/2/locus/1 - -arrangement/2/locus/1 - - - -arrangement/2->arrangement/2/locus/1 - - -trov:hasLocus - - - -arrangement/2/locus/2 - -arrangement/2/locus/2 - - - -arrangement/2->arrangement/2/locus/2 - - -trov:hasLocus - - - -arrangement/2/locus/1->trov:ArtifactLocus - - -rdf:type - - - -arrangement/2/locus/1->composition/1/artifact/1 - - -trov:hasArtifact - - - -data/lbda-v2_kddm_pmdi_2017.nc - -data/lbda-v2_kddm_pmdi_2017.nc - - - -arrangement/2/locus/1->data/lbda-v2_kddm_pmdi_2017.nc - - -trov:hasLocation - - - -arrangement/2/locus/2->trov:ArtifactLocus - - -rdf:type - - - -composition/1/artifact/2 - -composition/1/artifact/2 - - - -arrangement/2/locus/2->composition/1/artifact/2 - - -trov:hasArtifact - - - -analysis.ipynb - -analysis.ipynb - - - -arrangement/2/locus/2->analysis.ipynb - - -trov:hasLocation - - - -trov:ComputationalNotebookArtifact - -trov:ComputationalNotebookArtifact - - - -composition/1/artifact/2->trov:ComputationalNotebookArtifact - - -rdf:type - - - -Initial state of Jupyter notebook for processing the LBDA dataset - -Initial state of Jupyter notebook for processing the LBDA dataset - - - -composition/1/artifact/2->Initial state of Jupyter notebook for processing the LBDA dataset - - -rdfs:comment - - - -text/plain - -text/plain - - - -composition/1/artifact/2->text/plain - - -trov:mimeType - - - -8fcf663f1c40cbf846d0e5a136f0797fa560545f5d8c1391a5b13406f3814ad6 - -8fcf663f1c40cbf846d0e5a136f0797fa560545f5d8c1391a5b13406f3814ad6 - - - -composition/1/artifact/2->8fcf663f1c40cbf846d0e5a136f0797fa560545f5d8c1391a5b13406f3814ad6 - - -trov:sha256 - - - -arrangement/3 - -arrangement/3 - - - -arrangement/3->trov:LocalFilesystemArtifactArrangement - - -rdf:type - - - -Arrangement on fileserver managed by TRS after running Jupyter notebook - -Arrangement on fileserver managed by TRS after running Jupyter notebook - - - -arrangement/3->Arrangement on fileserver managed by TRS after running Jupyter notebook - - -rdfs:comment - - - -arrangement/3/locus/1 - -arrangement/3/locus/1 - - - -arrangement/3->arrangement/3/locus/1 - - -trov:hasLocus - - - -arrangement/3/locus/2 - -arrangement/3/locus/2 - - - -arrangement/3->arrangement/3/locus/2 - - -trov:hasLocus - - - -arrangement/3/locus/3 - -arrangement/3/locus/3 - - - -arrangement/3->arrangement/3/locus/3 - - -trov:hasLocus - - - -arrangement/3/locus/4 - -arrangement/3/locus/4 - - - -arrangement/3->arrangement/3/locus/4 - - -trov:hasLocus - - - -arrangement/3/locus/5 - -arrangement/3/locus/5 - - - -arrangement/3->arrangement/3/locus/5 - - -trov:hasLocus - - - -arrangement/3/locus/1->trov:ArtifactLocus - - -rdf:type - - - -arrangement/3/locus/1->composition/1/artifact/1 - - -trov:hasArtifact - - - -arrangement/3/locus/1->data/lbda-v2_kddm_pmdi_2017.nc - - -trov:hasLocation - - - -arrangement/3/locus/2->trov:ArtifactLocus - - -rdf:type - - - -arrangement/3/locus/2->analysis.ipynb - - -trov:hasLocation - - - -composition/1/artifact/3 - -composition/1/artifact/3 - - - -arrangement/3/locus/2->composition/1/artifact/3 - - -trov:hasArtifact - - - -arrangement/3/locus/3->trov:ArtifactLocus - - -rdf:type - - - -composition/1/artifact/4 - -composition/1/artifact/4 - - - -arrangement/3/locus/3->composition/1/artifact/4 - - -trov:hasArtifact - - - -output/analysis.html - -output/analysis.html - - - -arrangement/3/locus/3->output/analysis.html - - -trov:hasLocation - - - -arrangement/3/locus/4->trov:ArtifactLocus - - -rdf:type - - - -composition/1/artifact/5 - -composition/1/artifact/5 - - - -arrangement/3/locus/4->composition/1/artifact/5 - - -trov:hasArtifact - - - -output/histogram.png - -output/histogram.png - - - -arrangement/3/locus/4->output/histogram.png - - -trov:hasLocation - - - -arrangement/3/locus/5->trov:ArtifactLocus - - -rdf:type - - - -composition/1/artifact/6 - -composition/1/artifact/6 - - - -arrangement/3/locus/5->composition/1/artifact/6 - - -trov:hasArtifact - - - -lbda-v2_kddm_pmdi_2017.tiff - -lbda-v2_kddm_pmdi_2017.tiff - - - -arrangement/3/locus/5->lbda-v2_kddm_pmdi_2017.tiff - - -trov:hasLocation - - - -output/lbda-v2_kddm_pmdi_2017.tiff - -output/lbda-v2_kddm_pmdi_2017.tiff - - - -arrangement/3/locus/5->output/lbda-v2_kddm_pmdi_2017.tiff - - -trov:hasLocation - - - -composition/1/artifact/3->trov:ComputationalNotebookArtifact - - -rdf:type - - - -composition/1/artifact/3->text/plain - - -trov:mimeType - - - -Final state of Jupyter notebook for processing the LBDA dataset - -Final state of Jupyter notebook for processing the LBDA dataset - - - -composition/1/artifact/3->Final state of Jupyter notebook for processing the LBDA dataset - - -rdfs:comment - - - -8cf4f26b27e83a967bd7ddd97a24e6d4b7a9a7a14fff7ffeb47e2fa9085bccaf - -8cf4f26b27e83a967bd7ddd97a24e6d4b7a9a7a14fff7ffeb47e2fa9085bccaf - - - -composition/1/artifact/3->8cf4f26b27e83a967bd7ddd97a24e6d4b7a9a7a14fff7ffeb47e2fa9085bccaf - - -trov:sha256 - - - -trov:HTMLArtifact - -trov:HTMLArtifact - - - -composition/1/artifact/4->trov:HTMLArtifact - - -rdf:type - - - -HTML rendering of final state of the Jupyter notebook - -HTML rendering of final state of the Jupyter notebook - - - -composition/1/artifact/4->HTML rendering of final state of the Jupyter notebook - - -rdfs:comment - - - -text/html - -text/html - - - -composition/1/artifact/4->text/html - - -trov:mimeType - - - -870c9297ae7439c283697761c90028312cc0312f13182afb0a0125eb29e5f7f0 - -870c9297ae7439c283697761c90028312cc0312f13182afb0a0125eb29e5f7f0 - - - -composition/1/artifact/4->870c9297ae7439c283697761c90028312cc0312f13182afb0a0125eb29e5f7f0 - - -trov:sha256 - - - -trov:ImageArtifact - -trov:ImageArtifact - - - -composition/1/artifact/5->trov:ImageArtifact - - -rdf:type - - - -Graphical rendering of the histogram of dataset values - -Graphical rendering of the histogram of dataset values - - - -composition/1/artifact/5->Graphical rendering of the histogram of dataset values - - -rdfs:comment - - - -image/png - -image/png - - - -composition/1/artifact/5->image/png - - -trov:mimeType - - - -cfc6e4d5e76754d4802d42a2d6ff79a901c7f0e5daccb256cab542bb7953b2bf - -cfc6e4d5e76754d4802d42a2d6ff79a901c7f0e5daccb256cab542bb7953b2bf - - - -composition/1/artifact/5->cfc6e4d5e76754d4802d42a2d6ff79a901c7f0e5daccb256cab542bb7953b2bf - - -trov:sha256 - - - -composition/1/artifact/6->trov:DataArtifact - - -rdf:type - - - -GeoTIFF file containing LBDA data cube ready for staging to SKOPE server - -GeoTIFF file containing LBDA data cube ready for staging to SKOPE server - - - -composition/1/artifact/6->GeoTIFF file containing LBDA data cube ready for staging to SKOPE server - - -rdfs:comment - - - -image/tiff - -image/tiff - - - -composition/1/artifact/6->image/tiff - - -trov:mimeType - - - -e035f3af957c4f761c1d502cc28f91676fbf2bbdf5f7045a7151a6d3ff04789d - -e035f3af957c4f761c1d502cc28f91676fbf2bbdf5f7045a7151a6d3ff04789d - - - -composition/1/artifact/6->e035f3af957c4f761c1d502cc28f91676fbf2bbdf5f7045a7151a6d3ff04789d - - -trov:sha256 - - - -arrangement/4 - -arrangement/4 - - - -arrangement/4->arrangement/3/locus/5 - - -trov:hasLocus - - - -trov:ZipArtifactArrangement - -trov:ZipArtifactArrangement - - - -arrangement/4->trov:ZipArtifactArrangement - - -rdf:type - - - -Arrangement of final products packaged in a Zip file - -Arrangement of final products packaged in a Zip file - - - -arrangement/4->Arrangement of final products packaged in a Zip file - - -rdfs:comment - - - -arrangement/4/locus/1 - -arrangement/4/locus/1 - - - -arrangement/4->arrangement/4/locus/1 - - -trov:hasLocus - - - -arrangement/4/locus/2 - -arrangement/4/locus/2 - - - -arrangement/4->arrangement/4/locus/2 - - -trov:hasLocus - - - -arrangement/4/locus/3 - -arrangement/4/locus/3 - - - -arrangement/4->arrangement/4/locus/3 - - -trov:hasLocus - - - -arrangement/4/locus/1->trov:ArtifactLocus - - -rdf:type - - - -arrangement/4/locus/1->analysis.ipynb - - -trov:hasLocation - - - -arrangement/4/locus/1->composition/1/artifact/3 - - -trov:hasArtifact - - - -arrangement/4/locus/2->trov:ArtifactLocus - - -rdf:type - - - -arrangement/4/locus/2->composition/1/artifact/4 - - -trov:hasArtifact - - - -analysis.html - -analysis.html - - - -arrangement/4/locus/2->analysis.html - - -trov:hasLocation - - - -arrangement/4/locus/3->trov:ArtifactLocus - - -rdf:type - - - -arrangement/4/locus/3->composition/1/artifact/5 - - -trov:hasArtifact - - - -histogram.png - -histogram.png - - - -arrangement/4/locus/3->histogram.png - - -trov:hasLocation - - - -composition/1 - -composition/1 - - - -composition/1->composition/1/artifact/1 - - -trov:hasArtifact - - - -composition/1->composition/1/artifact/2 - - -trov:hasArtifact - - - -composition/1->composition/1/artifact/3 - - -trov:hasArtifact - - - -composition/1->composition/1/artifact/4 - - -trov:hasArtifact - - - -composition/1->composition/1/artifact/5 - - -trov:hasArtifact - - - -composition/1->composition/1/artifact/6 - - -trov:hasArtifact - - - -trov:ArtifactComposition - -trov:ArtifactComposition - - - -composition/1->trov:ArtifactComposition - - -rdf:type - - - -fingerprint - -fingerprint - - - -composition/1->fingerprint - - -trov:hasFingerprint - - - -trov:CompositionFingerprint - -trov:CompositionFingerprint - - - -fingerprint->trov:CompositionFingerprint - - -rdf:type - - - -b2b65040893f35d112979c564121c7425f4aad10838aadcb232be5db715ec2b2 - -b2b65040893f35d112979c564121c7425f4aad10838aadcb232be5db715ec2b2 - - - -fingerprint->b2b65040893f35d112979c564121c7425f4aad10838aadcb232be5db715ec2b2 - - -trov:sha256 - - - -tro - -tro - - - -tro->arrangement/1 - - -trov:hasArrangement - - - -tro->arrangement/2 - - -trov:hasArrangement - - - -tro->arrangement/3 - - -trov:hasArrangement - - - -tro->arrangement/4 - - -trov:hasArrangement - - - -tro->composition/1 - - -trov:hasComposition - - - -trov:TransparentResearchObject - -trov:TransparentResearchObject - - - -tro->trov:TransparentResearchObject - - -rdf:type - - - -Download LBDA dataset from NOAA website and prepare for use by researchers employing the SKOPE application - -Download LBDA dataset from NOAA website and prepare for use by researchers employing the SKOPE application - - - -tro->Download LBDA dataset from NOAA website and prepare for use by researchers employing the SKOPE application - - -rdfs:comment - - - -tro/attribute/1 - -tro/attribute/1 - - - -tro->tro/attribute/1 - - -trov:hasAttribute - - - -trp/1 - -trp/1 - - - -tro->trp/1 - - -trov:hasPerformance - - - -trp/2 - -trp/2 - - - -tro->trp/2 - - -trov:hasPerformance - - - -trp/3 - -trp/3 - - - -tro->trp/3 - - -trov:hasPerformance - - - -trs - -trs - - - -tro->trs - - -trov:wasAssembledBy - - - -tsa - -tsa - - - -tro->tsa - - -trov:wasTimestampedBy - - - -trov:IncludesAllInputData - -trov:IncludesAllInputData - - - -tro/attribute/1->trov:IncludesAllInputData - - -rdf:type - - - -trp/1/attribute/1 - -trp/1/attribute/1 - - - -tro/attribute/1->trp/1/attribute/1 - - -trov:warrantedBy - - - -trp/2/attribute/1 - -trp/2/attribute/1 - - - -tro/attribute/1->trp/2/attribute/1 - - -trov:warrantedBy - - - -trp/3/attribute/1 - -trp/3/attribute/1 - - - -tro/attribute/1->trp/3/attribute/1 - - -trov:warrantedBy - - - -trp/1->arrangement/1 - - -trov:accessedArrangement - - - -trp/1->arrangement/2 - - -trov:contributedToArrangement - - - -trp/1->trs - - -trov:wasConductedBy - - - -trp/1->trp/1/attribute/1 - - -trov:hadPerformanceAttribute - - - -trov:TrustedResearchPerformance - -trov:TrustedResearchPerformance - - - -trp/1->trov:TrustedResearchPerformance - - -rdf:type - - - -Process that downloaded the LBDA NetCDF file from NOAA server to local filesystem - -Process that downloaded the LBDA NetCDF file from NOAA server to local filesystem - - - -trp/1->Process that downloaded the LBDA NetCDF file from NOAA server to local filesystem - - -rdfs:comment - - - -2023-05-08T01:40:00Z - -2023-05-08T01:40:00Z - - - -trp/1->2023-05-08T01:40:00Z - - -trov:endedAtTime - - - -2023-05-08T01:30:00Z - -2023-05-08T01:30:00Z - - - -trp/1->2023-05-08T01:30:00Z - - -trov:startedAtTime - - - -trp/2->arrangement/2 - - -trov:accessedArrangement - - - -trp/2->arrangement/3 - - -trov:contributedToArrangement - - - -trp/2->trs - - -trov:wasConductedBy - - - -trp/2->trp/2/attribute/1 - - -trov:hadPerformanceAttribute - - - -trp/2->trov:TrustedResearchPerformance - - -rdf:type - - - -Process that ran Jupyter notebook - -Process that ran Jupyter notebook - - - -trp/2->Process that ran Jupyter notebook - - -rdfs:comment - - - -2023-05-08T01:50:00Z - -2023-05-08T01:50:00Z - - - -trp/2->2023-05-08T01:50:00Z - - -trov:endedAtTime - - - -2023-05-08T01:41:00Z - -2023-05-08T01:41:00Z - - - -trp/2->2023-05-08T01:41:00Z - - -trov:startedAtTime - - - -trp/3->arrangement/3 - - -trov:accessedArrangement - - - -trp/3->arrangement/4 - - -trov:contributedToArrangement - - - -trp/3->trs - - -trov:wasConductedBy - - - -trp/3->trp/3/attribute/1 - - -trov:hadPerformanceAttribute - - - -trp/3->trov:TrustedResearchPerformance - - -rdf:type - - - -Process that packaged products of the Jupyter notebook execution in a Zip file - -Process that packaged products of the Jupyter notebook execution in a Zip file - - - -trp/3->Process that packaged products of the Jupyter notebook execution in a Zip file - - -rdfs:comment - - - -2023-05-08T02:00:00Z - -2023-05-08T02:00:00Z - - - -trp/3->2023-05-08T02:00:00Z - - -trov:endedAtTime - - - -2023-05-08T01:51:00Z - -2023-05-08T01:51:00Z - - - -trp/3->2023-05-08T01:51:00Z - - -trov:startedAtTime - - - -trs/capability/1 - -trs/capability/1 - - - -trs->trs/capability/1 - - -trov:hasCapability - - - -trs/capability/2 - -trs/capability/2 - - - -trs->trs/capability/2 - - -trov:hasCapability - - - -trov:TrustedResearchSystem - -trov:TrustedResearchSystem - - - -trs->trov:TrustedResearchSystem - - -rdf:type - - - -TRS that can monitor netowrk accesses or provide Internet isolation - -TRS that can monitor netowrk accesses or provide Internet isolation - - - -trs->TRS that can monitor netowrk accesses or provide Internet isolation - - -rdfs:comment - - - ------BEGIN PGP PUBLIC KEY BLOCK----- -mI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f -PFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6 -TbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0 -HXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb -HbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK -CRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS -xrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N -IsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg== -=vuaX ------END PGP PUBLIC KEY BLOCK----- - - ------BEGIN PGP PUBLIC KEY BLOCK----- -mI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f -PFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6 -TbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0 -HXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb -HbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK -CRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS -xrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N -IsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg== -=vuaX ------END PGP PUBLIC KEY BLOCK----- - - - -trs->-----BEGIN PGP PUBLIC KEY BLOCK----- -mI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f -PFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6 -TbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0 -HXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb -HbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK -CRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS -xrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N -IsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg== -=vuaX ------END PGP PUBLIC KEY BLOCK----- - - - -trov:publicKey - - - -tsa->-----BEGIN PGP PUBLIC KEY BLOCK----- -mI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f -PFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6 -TbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0 -HXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb -HbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK -CRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS -xrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N -IsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg== -=vuaX ------END PGP PUBLIC KEY BLOCK----- - - - -trov:publicKey - - - -trov:TimeStampingAuthority - -trov:TimeStampingAuthority - - - -tsa->trov:TimeStampingAuthority - - -rdf:type - - - -trp/1/attribute/1->trs/capability/1 - - -trov:warrantedBy - - - -trov:InternetAccessRecording - -trov:InternetAccessRecording - - - -trp/1/attribute/1->trov:InternetAccessRecording - - -rdf:type - - - -trp/2/attribute/1->trs/capability/2 - - -trov:warrantedBy - - - -trov:InternetIsolation - -trov:InternetIsolation - - - -trp/2/attribute/1->trov:InternetIsolation - - -rdf:type - - - -trp/3/attribute/1->trs/capability/2 - - -trov:warrantedBy - - - -trp/3/attribute/1->trov:InternetIsolation - - -rdf:type - - - -trov:CanRecordInternetAccess - -trov:CanRecordInternetAccess - - - -trs/capability/1->trov:CanRecordInternetAccess - - -rdf:type - - - -trov:CanProvideInternetIsolation - -trov:CanProvideInternetIsolation - - - -trs/capability/2->trov:CanProvideInternetIsolation - - -rdf:type - - - diff --git a/demo/01-trov-examples/03-skope-lbda-processing/run.sh b/demo/01-trov-examples/03-skope-lbda-processing/run.sh index 85445b5..522fb7e 100644 --- a/demo/01-trov-examples/03-skope-lbda-processing/run.sh +++ b/demo/01-trov-examples/03-skope-lbda-processing/run.sh @@ -91,27 +91,3 @@ geist report --file tro_report --outputroot report_file END_CELL # ------------------------------------------------------------------------------ - -bash_cell tro_report_inline_graph2 << END_CELL - -geist report --outputroot report_inline_graph2 << END_TEMPLATE - -{%- use "templates.geist" %} -{%- create %} tro/tro.jsonld {% endcreate %} - -{%- html "overall_tro_graph.html" %} -{%- head "Overall TRO Graph" %} - - -

Overall TRO Graph

- {%- graph2 dataset="kb", rankdir="LR", mappings="mappings.json" as tro_graph %} - {% img src="tro.svg", width="100%" %} {{ tro_graph }} {% endimg %} - - -{% endhtml %} - -END_TEMPLATE - -END_CELL - -# ------------------------------------------------------------------------------ \ No newline at end of file diff --git a/demo/01-trov-examples/03-skope-lbda-processing/run.txt b/demo/01-trov-examples/03-skope-lbda-processing/run.txt index ec4ab71..77ebf7c 100644 --- a/demo/01-trov-examples/03-skope-lbda-processing/run.txt +++ b/demo/01-trov-examples/03-skope-lbda-processing/run.txt @@ -40,7 +40,7 @@ geist export --dataset kb --outputformat nt | sort | grep trov "CompositionFingerprint" . . . - "The policy of always preeventing Internet access during a TRP." . + "The policy of always preventing Internet access during a TRP." . "EnforcesInternetIsolation" . . . @@ -57,7 +57,7 @@ geist export --dataset kb --outputformat nt | sort | grep trov "A research artifact described by a TRO." . "ResearchArtifact" . . - . + . "An attribute of a TRS, TRP, or TRO." . "TREAttribute" . . @@ -66,15 +66,13 @@ geist export --dataset kb --outputformat nt | sort | grep trov "TROAttribute" . . . - . . - "A property of a particular TRS." . "An attribute of a TRS." . "TRSAttribute" . . . . - "A policy always enforced by a particular TRS." . + "A capability of a TRS." . "TRSCapability" . . . @@ -86,28 +84,27 @@ geist export --dataset kb --outputformat nt | sort | grep trov . . . - . + . "A timestamping authority trusted by a TRS." . "TimeStampingAuthority" . . . - . + . "A set of research artifacts produced by a TRP and signed by the performing TRS." . "TransparentResearchObject" . . . - . + . "Common base class for TRSs, TRPs, and TROs." . "TrustedResearchElement" . . - . . "A set of research operations performed by a TRS." . "An execution of a research process" . "TrustedResearchPerformance" . . . - . + . "A system certified to perform TRPs and assemble TROs." . "TrustedResearchSystem" . . @@ -189,9 +186,6 @@ geist load --dataset kb --inputformat json-ld --inputfile tro/tro.jsonld # Import TRO and TRS as JSON-LD and export as N-TRIPLES geist export --dataset kb --outputformat nt | sort | grep trov-example -# Destroy the dataset -geist destroy --dataset kb - ----------------------------------------------------------- cell outputs ----------------------------------------------------------- . . @@ -375,6 +369,204 @@ geist destroy --dataset kb ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +================================================= bash cell | query tro attributes ================================================= + +# What subclasses of TROAttribute have been defined? + +geist query --dataset kb << __END_QUERY__ + + PREFIX rdfs: + PREFIX trov: + + SELECT DISTINCT ?attribute ?attributeLabel ?attributeComment + WHERE { + ?attribute rdfs:subClassOf trov:TROAttribute . + ?attribute rdfs:label ?attributeLabel . + ?attribute rdfs:comment ?attributeComment . + } ORDER BY ?attribute ?attributeLabel ?attributeComment + +__END_QUERY__ + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- +| | attribute | attributeLabel | attributeComment | +|---:|:-----------------------------------------------------------|:-----------------------|:------------------------------------------------------------------------| +| 0 | | "IncludesAllInputData" | "TRO composition includes all input data employed in creating the TRO." | +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +================================================= bash cell | query trs attributes ================================================= + +# What subclasses of TRSAttribute have been defined? + +geist query --dataset kb << __END_QUERY__ + + PREFIX rdfs: + PREFIX trov: + + SELECT DISTINCT ?attribute ?attributeLabel ?attributeComment + WHERE { + ?attribute rdfs:subClassOf trov:TRSAttribute . + ?attribute rdfs:label ?attributeLabel . + ?attribute rdfs:comment ?attributeComment . + } ORDER BY ?attribute ?attributeLabel ?attributeComment + +__END_QUERY__ + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- +| | attribute | attributeLabel | attributeComment | +|---:|:------------------------------------------------------------------|:------------------------------|:----------------------------------------------------------------| +| 0 | | "CanProvideInternetIsolation" | "The capability to prevent Internet access during a TRP." | +| 1 | | "EnforcesInternetIsolation" | "The policy of always preventing Internet access during a TRP." | +| 2 | | "TRSCapability" | "A capability of a TRS." | +| 3 | | "TRSPolicy" | "A policy always enforced by a particular TRS." | +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +====================================== bash cell | reload trov vocabulary without inferences ======================================= + +# Destroy the dataset +geist destroy --dataset kb + +# Import TRACE vocabulary and TRO Manifest and export as N-TRIPLES +geist create --dataset kb --inputformat json-ld --inputfile /mnt/trace-model/exports/trace-vocab.jsonld --infer none + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +================================================= bash cell | query subclass vocab ================================================= + +# What (ParentClass, ChildClass) pairs does trov vocabulary have? + +geist report --outputroot products << END_TEMPLATE + +{%- use "../common/templates.geist" %} +{%- query isfilepath=False as query_subclass_vocab_str %} + PREFIX rdf: + PREFIX rdfs: + + SELECT DISTINCT ?ParentLabel ?ChildLabel + WHERE { + ?ParentClass rdf:type rdfs:Class ; + rdfs:label ?ParentLabel . + + ?ChildClass rdfs:subClassOf ?ParentClass ; + rdf:type rdfs:Class ; + rdfs:label ?ChildLabel . + + FILTER (?ParentLabel != ?ChildLabel) + } + ORDER BY ?ParentLabel ?ChildLabel +{% endquery %} +{%- set query_subclass_vocab = query_subclass_vocab_str | json2df %} + +{%- html "report_subclass.html" %} +{%- head "Subclass Report" %} + +

Visualize subclass of the vocabularies

+

1. SVG

+ {% img src="img.svg", width="80%" %} + {%- gv_graph "subclass_vocab_graph", "LR" %} + {%- gv_title "Subclass Vocab Graph" %} + + node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] + {% for _, row in query_subclass_vocab.iterrows() %} + {% gv_edge row["ParentLabel"], row["ChildLabel"] %} + {% endfor %} + + {% gv_end %} + {% endimg %} + +

2. GV

+ {% img src="img.gv" %} + {%- gv_graph "subclass_vocab_graph", "LR" %} + {%- gv_title "Subclass Vocab Graph" %} + + node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] + {% for _, row in query_subclass_vocab.iterrows() %} + {% gv_edge row["ParentLabel"], row["ChildLabel"] %} + {% endfor %} + + {% gv_end %} + {% endimg %} + +

3. Table

+ {%- table %} + {{ query_subclass_vocab_str }} + {% endtable %} + +{% endhtml %} +{%- destroy %} + +END_TEMPLATE + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- + + + + + + + + + Subclass Report + +

Visualize subclass of the vocabularies

+

1. SVG

+ +

2. GV

+

+    digraph subclass_vocab_graph {
+    rankdir=LR
+    fontname=Courier; fontsize=12; labelloc=t
+    label="Subclass Vocab Graph"
+            node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier]
+                            
+    "ArtifactCollection" -> "ArtifactComposition"                            
+    "ArtifactCollection" -> "ArtifactLocus"                            
+    "TREAttribute" -> "TROAttribute"                            
+    "TREAttribute" -> "TRSAttribute"                            
+    "TROAttribute" -> "IncludesAllInputData"                            
+    "TRSAttribute" -> "TRSCapability"                            
+    "TRSCapability" -> "CanProvideInternetIsolation"                            
+    "TRSCapability" -> "TRSPolicy"                            
+    "TRSPolicy" -> "EnforcesInternetIsolation"                            
+    "TrustedResearchElement" -> "TimeStampingAuthority"                            
+    "TrustedResearchElement" -> "TransparentResearchObject"                            
+    "TrustedResearchElement" -> "TrustedResearchPerformance"                            
+    "TrustedResearchElement" -> "TrustedResearchSystem"            
+            
+    }        
+

3. Table

+ + + + + + + + + + + + + + + + +
ParentLabelChildLabel
"ArtifactCollection""ArtifactComposition"
"ArtifactCollection""ArtifactLocus"
"TREAttribute""TROAttribute"
"TREAttribute""TRSAttribute"
"TROAttribute""IncludesAllInputData"
"TRSAttribute""TRSCapability"
"TRSCapability""CanProvideInternetIsolation"
"TRSCapability""TRSPolicy"
"TRSPolicy""EnforcesInternetIsolation"
"TrustedResearchElement""TimeStampingAuthority"
"TrustedResearchElement""TransparentResearchObject"
"TrustedResearchElement""TrustedResearchPerformance"
"TrustedResearchElement""TrustedResearchSystem"
+ + + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + ================================================== bash cell | tro_report_inline =================================================== geist report --outputroot report_inline << END_TEMPLATE @@ -617,49 +809,3 @@ geist report --file tro_report --outputroot report_file ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -=============================================== bash cell | tro_report_inline_graph2 =============================================== - -geist report --outputroot report_inline_graph2 << END_TEMPLATE - -{%- use "templates.geist" %} -{%- create %} tro/tro.jsonld {% endcreate %} - -{%- html "overall_tro_graph.html" %} -{%- head "Overall TRO Graph" %} - - -

Overall TRO Graph

- {%- graph2 dataset="kb", rankdir="LR", mappings="mappings.json" as tro_graph %} - {% img src="tro.svg", width="100%" %} {{ tro_graph }} {% endimg %} - - -{% endhtml %} - -END_TEMPLATE - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- - - - - - - - - - Overall TRO Graph - - -

Overall TRO Graph

- - - - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - diff --git a/demo/01-trov-examples/03-skope-lbda-processing/templates.geist b/demo/01-trov-examples/03-skope-lbda-processing/templates.geist index b07b577..9e6dc63 100644 --- a/demo/01-trov-examples/03-skope-lbda-processing/templates.geist +++ b/demo/01-trov-examples/03-skope-lbda-processing/templates.geist @@ -18,19 +18,10 @@ rankdir={{ direction }} {% endtemplate %} -{% template gv_title title %} - fontname=Courier; fontsize=12; labelloc=t - label="{{ title }}" -{% endtemplate %} - {% template gv_end %} } {% endtemplate %} -{% template gv_labeled_node nodeID nodeLabel %} - "{{ nodeID }}" [label="{{ nodeLabel }}"] -{% endtemplate %} - {% template gv_edge tail head %} {{ tail }} -> {{ head }} {% endtemplate %} diff --git a/demo/01-trov-examples/common/query-tro.sh b/demo/01-trov-examples/common/query-tro.sh index 8165623..db8c39d 100644 --- a/demo/01-trov-examples/common/query-tro.sh +++ b/demo/01-trov-examples/common/query-tro.sh @@ -3,6 +3,7 @@ TRACE_VOCAB=$REPRO_MNT/exports/trace-vocab.jsonld TRO_DECLARATION=tro/tro.jsonld TRS_CERTIFICATE=trs/trs.jsonld +GEIST_TEMPLATES=../common/templates.geist # ------------------------------------------------------------------------------ @@ -29,9 +30,133 @@ geist load --dataset kb --inputformat json-ld --inputfile ${TRO_DECLARATION} # Import TRO and TRS as JSON-LD and export as N-TRIPLES geist export --dataset kb --outputformat nt | sort | grep trov-example +END_CELL + +# ------------------------------------------------------------------------------ + +bash_cell 'query tro attributes' << END_CELL + +# What subclasses of TROAttribute have been defined? + +geist query --dataset kb << __END_QUERY__ + + PREFIX rdfs: + PREFIX trov: + + SELECT DISTINCT ?attribute ?attributeLabel ?attributeComment + WHERE { + ?attribute rdfs:subClassOf trov:TROAttribute . + ?attribute rdfs:label ?attributeLabel . + ?attribute rdfs:comment ?attributeComment . + } ORDER BY ?attribute ?attributeLabel ?attributeComment + +__END_QUERY__ + +END_CELL + +# ------------------------------------------------------------------------------ + +bash_cell 'query trs attributes' << END_CELL + +# What subclasses of TRSAttribute have been defined? + +geist query --dataset kb << __END_QUERY__ + + PREFIX rdfs: + PREFIX trov: + + SELECT DISTINCT ?attribute ?attributeLabel ?attributeComment + WHERE { + ?attribute rdfs:subClassOf trov:TRSAttribute . + ?attribute rdfs:label ?attributeLabel . + ?attribute rdfs:comment ?attributeComment . + } ORDER BY ?attribute ?attributeLabel ?attributeComment + +__END_QUERY__ + +END_CELL + +# ------------------------------------------------------------------------------ + +bash_cell 'reload trov vocabulary without inferences' << END_CELL + # Destroy the dataset geist destroy --dataset kb +# Import TRACE vocabulary and TRO Manifest and export as N-TRIPLES +geist create --dataset kb --inputformat json-ld --inputfile ${TRACE_VOCAB} --infer none + +END_CELL + +# ------------------------------------------------------------------------------ + + +bash_cell 'query subclass vocab' << END_CELL + +# What (ParentClass, ChildClass) pairs does trov vocabulary have? + +geist report --outputroot products << END_TEMPLATE + +{%- use "${GEIST_TEMPLATES}" %} +{%- query isfilepath=False as query_subclass_vocab_str %} + PREFIX rdf: + PREFIX rdfs: + + SELECT DISTINCT ?ParentLabel ?ChildLabel + WHERE { + ?ParentClass rdf:type rdfs:Class ; + rdfs:label ?ParentLabel . + + ?ChildClass rdfs:subClassOf ?ParentClass ; + rdf:type rdfs:Class ; + rdfs:label ?ChildLabel . + + FILTER (?ParentLabel != ?ChildLabel) + } + ORDER BY ?ParentLabel ?ChildLabel +{% endquery %} +{%- set query_subclass_vocab = query_subclass_vocab_str | json2df %} + +{%- html "report_subclass.html" %} +{%- head "Subclass Report" %} + +

Visualize subclass of the vocabularies

+

1. SVG

+ {% img src="img.svg", width="80%" %} + {%- gv_graph "subclass_vocab_graph", "LR" %} + {%- gv_title "Subclass Vocab Graph" %} + + node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] + {% for _, row in query_subclass_vocab.iterrows() %} + {% gv_edge row["ParentLabel"], row["ChildLabel"] %} + {% endfor %} + + {% gv_end %} + {% endimg %} + +

2. GV

+ {% img src="img.gv" %} + {%- gv_graph "subclass_vocab_graph", "LR" %} + {%- gv_title "Subclass Vocab Graph" %} + + node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] + {% for _, row in query_subclass_vocab.iterrows() %} + {% gv_edge row["ParentLabel"], row["ChildLabel"] %} + {% endfor %} + + {% gv_end %} + {% endimg %} + +

3. Table

+ {%- table %} + {{ query_subclass_vocab_str }} + {% endtable %} + +{% endhtml %} +{%- destroy %} + +END_TEMPLATE + END_CELL # ------------------------------------------------------------------------------ diff --git a/demo/02-explorations/04-report-subclass-graph/graphviz.geist b/demo/01-trov-examples/common/templates.geist similarity index 61% rename from demo/02-explorations/04-report-subclass-graph/graphviz.geist rename to demo/01-trov-examples/common/templates.geist index 87473a3..ec7d732 100644 --- a/demo/02-explorations/04-report-subclass-graph/graphviz.geist +++ b/demo/01-trov-examples/common/templates.geist @@ -1,3 +1,18 @@ +{% template head title %} + + + + + {{ title }} + +{% endtemplate %} + {% template gv_graph name direction %} digraph {{ name }} { rankdir={{ direction }} @@ -8,42 +23,10 @@ label="{{ title }}" {% endtemplate %} -{% template gv_end %} - } -{% endtemplate %} - -{% template gv_cluster name %} - subgraph cluster_{{ name }} { label=""; color=white; penwidth=0 - subgraph cluster_{{ name }}_inner { label=""; color=white -{% endtemplate %} - -{% template gv_cluster_end %} - }} -{% endtemplate %} - -{% template gv_labeled_node nodeID nodeLabel %} - "{{ nodeID }}" [label="{{ nodeLabel }}"] -{% endtemplate %} - {% template gv_edge tail head %} {{ tail }} -> {{ head }} {% endtemplate %} -{% template gv_labeled_edge tail head edgeLabel %} - "{{ tail }}" -> "{{ head }}" [label="{{ edgeLabel }}"] -{% endtemplate %} - -{% template head title %} - - - - - {{ title }} - +{% template gv_end %} + } {% endtemplate %} diff --git a/demo/02-explorations/01-minimal/Makefile b/demo/02-explorations/01-gpg-runtime/01-generate-key/Makefile similarity index 100% rename from demo/02-explorations/01-minimal/Makefile rename to demo/02-explorations/01-gpg-runtime/01-generate-key/Makefile diff --git a/demo/02-explorations/06-gpg-runtime-demos/01-generate-key/run.sh b/demo/02-explorations/01-gpg-runtime/01-generate-key/run.sh similarity index 75% rename from demo/02-explorations/06-gpg-runtime-demos/01-generate-key/run.sh rename to demo/02-explorations/01-gpg-runtime/01-generate-key/run.sh index 0621b63..5eeb63c 100644 --- a/demo/02-explorations/06-gpg-runtime-demos/01-generate-key/run.sh +++ b/demo/02-explorations/01-gpg-runtime/01-generate-key/run.sh @@ -1,8 +1,13 @@ #!/usr/bin/env bash +TRO_DECLARATION=../../common/tro/tro.jsonld +PUBLIC_KEY_FILE=tmp/public.gpg +PRIVATE_KEY_FILE=tmp/private.asc +SIGNATURE_FILE=tmp/signature.asc + # ------------------------------------------------------------------------------ -bash_cell 'delete gnupg home directory' << 'END_CELL' +bash_cell 'delete gnupg home directory' << END_CELL # delete contents of the .gnupg directory for this REPRO gnupg-runtime.purge-keys @@ -41,26 +46,20 @@ END_CELL # ------------------------------------------------------------------------------ -bash_cell 'export the public key' << 'END_CELL' +bash_cell 'export the public key' << END_CELL # export the public key -gpg --export -a -o tmp/public.gpg repro@repros.dev - -# print a redacted view of the public key -gnupg-runtime.redact-key tmp/public.gpg +gpg --export -a -o ${PUBLIC_KEY_FILE} repro@repros.dev END_CELL # ------------------------------------------------------------------------------ -bash_cell 'export the private key' << 'END_CELL' +bash_cell 'export the private key' << END_CELL # export the private key -gpg --export-secret-key -a --pinentry-mode loopback --passphrase=repro > tmp/private.asc - -# print a redacted view of the private key -gnupg-runtime.redact-key tmp/private.asc +gpg --export-secret-key -a --pinentry-mode loopback --passphrase=repro > ${PRIVATE_KEY_FILE} END_CELL diff --git a/demo/02-explorations/06-gpg-runtime-demos/01-generate-key/run.txt b/demo/02-explorations/01-gpg-runtime/01-generate-key/run.txt similarity index 61% rename from demo/02-explorations/06-gpg-runtime-demos/01-generate-key/run.txt rename to demo/02-explorations/01-gpg-runtime/01-generate-key/run.txt index 29ae7a0..a0b1f2d 100644 --- a/demo/02-explorations/06-gpg-runtime-demos/01-generate-key/run.txt +++ b/demo/02-explorations/01-gpg-runtime/01-generate-key/run.txt @@ -52,22 +52,7 @@ uid [ultimate] repro user # export the public key gpg --export -a -o tmp/public.gpg repro@repros.dev -# print a redacted view of the public key -gnupg-runtime.redact-key tmp/public.gpg - ----------------------------------------------------------- cell outputs ----------------------------------------------------------- ------BEGIN PGP PUBLIC KEY BLOCK----- - -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxx ------END PGP PUBLIC KEY BLOCK----- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -76,30 +61,7 @@ xxxxx # export the private key gpg --export-secret-key -a --pinentry-mode loopback --passphrase=repro > tmp/private.asc -# print a redacted view of the private key -gnupg-runtime.redact-key tmp/private.asc - ----------------------------------------------------------- cell outputs ----------------------------------------------------------- ------BEGIN PGP PRIVATE KEY BLOCK----- - -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxx ------END PGP PRIVATE KEY BLOCK----- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/demo/02-explorations/02-type-a/Makefile b/demo/02-explorations/01-gpg-runtime/02-simple-tro/Makefile similarity index 100% rename from demo/02-explorations/02-type-a/Makefile rename to demo/02-explorations/01-gpg-runtime/02-simple-tro/Makefile diff --git a/demo/02-explorations/01-gpg-runtime/02-simple-tro/data/private.asc b/demo/02-explorations/01-gpg-runtime/02-simple-tro/data/private.asc new file mode 100644 index 0000000..c25edd1 --- /dev/null +++ b/demo/02-explorations/01-gpg-runtime/02-simple-tro/data/private.asc @@ -0,0 +1,20 @@ +-----BEGIN PGP PRIVATE KEY BLOCK----- + +lQIGBGUgICgBBACnqSMevqKr0pY+I7NH/3E45SkMWyutmbt06SqQPLyWRQ/8lrcJ +v8ANqetWUqTKgIRlTWJ4pm8m4Cs7SJN4KBNkKdy6cfUTTQNadDRPrOZ8gxfvPKkF +cORqBGdRHTdCdim0fAk72MLZKx8CTi0Kp/pyL1UAMeP3cqY4HtjGAmK1+wARAQAB +/gcDAoBkG/XYcTnW/1sgcatAehk5nAk5WtSdN82iX7UMXU/Rfx3+8AOoz6PPq8kE +fL3oBE6lGDZLhWTE0Mesn20NXMNfjVPMOdZBhFqowk7orPuF54f0PuKxlqalHjLW +FNe3vQ2aoemrWC+V790fH2X7GldaF70nJb78HEX/OMo6EDL0lQzhVU1j6Zg2m/F0 +4odREmJOdvQRg849pMKDmUeKe/+3ONcu5JhmZxpcbsK/qhJwzMHjHo0QLOkLLwPm +J1jfd/Bo+FCKcbXNE/RFQgrd1OHeQBRmKxooY1ndyr5j0WWIzdbNi+puUyPRafuD +E5hz+kqrvWndbSTriNUhB+t88wl5cK82v93gckCHCpyy6STwmURZr6SWcMoo7MHp +RSF4N3ppa6BM42eXGBHx76J2N7zVB8IhFssxI4tWKc1aCYntFWxtHW6ESr3xbrFp +qtfKYimLwc3ZwzbxiCcZt3TdaBgyO7ZPOpF3v+vZiJnpUx9TeSNQLn60HXJlcHJv +IHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQ/vdYZD9vELJCPIDxR +jxVtzElN/wUCZSAgKAIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRBRjxVt +zElN/7d4BACmRSgot6XaSrKLE9iSZIvGU3etZWhGlzXb3eXYxYrW9E22EACKk8Wv +HXNKJQqxMljQnJDh2Jvw4v3nF6N3eLK8Ak8FAc9zBSz+GzwTC17qM+oPuxrf1G0W +7u69FbZ7JFw2ZkO1Aifk0zOuwORdNZwt5yIGeEBgCWg8TVwCsvbAyw== +=XJdS +-----END PGP PRIVATE KEY BLOCK----- diff --git a/demo/02-explorations/01-gpg-runtime/02-simple-tro/data/public.gpg b/demo/02-explorations/01-gpg-runtime/02-simple-tro/data/public.gpg new file mode 100644 index 0000000..6f5dc42 --- /dev/null +++ b/demo/02-explorations/01-gpg-runtime/02-simple-tro/data/public.gpg @@ -0,0 +1,12 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mI0EZSAgKAEEAKepIx6+oqvSlj4js0f/cTjlKQxbK62Zu3TpKpA8vJZFD/yWtwm/ +wA2p61ZSpMqAhGVNYnimbybgKztIk3goE2Qp3Lpx9RNNA1p0NE+s5nyDF+88qQVw +5GoEZ1EdN0J2KbR8CTvYwtkrHwJOLQqn+nIvVQAx4/dypjge2MYCYrX7ABEBAAG0 +HXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQ/vdYZD9vE +LJCPIDxRjxVtzElN/wUCZSAgKAIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK +CRBRjxVtzElN/7d4BACmRSgot6XaSrKLE9iSZIvGU3etZWhGlzXb3eXYxYrW9E22 +EACKk8WvHXNKJQqxMljQnJDh2Jvw4v3nF6N3eLK8Ak8FAc9zBSz+GzwTC17qM+oP +uxrf1G0W7u69FbZ7JFw2ZkO1Aifk0zOuwORdNZwt5yIGeEBgCWg8TVwCsvbAyw== +=IW7u +-----END PGP PUBLIC KEY BLOCK----- diff --git a/demo/02-explorations/01-gpg-runtime/02-simple-tro/run.sh b/demo/02-explorations/01-gpg-runtime/02-simple-tro/run.sh new file mode 100644 index 0000000..aa52e6e --- /dev/null +++ b/demo/02-explorations/01-gpg-runtime/02-simple-tro/run.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash + +TRO_DECLARATION=../../common/tro/tro.jsonld +PUBLIC_KEY_FILE=data/public.gpg +PRIVATE_KEY_FILE=data/private.asc +SIGNATURE_FILE=tmp/signature.asc + +# ------------------------------------------------------------------------------ + +bash_cell 'delete gnupg home directory' << 'END_CELL' + +# delete contents of the .gnupg directory for this REPRO +gnupg-runtime.purge-keys + +END_CELL + +# ------------------------------------------------------------------------------ + +bash_cell 'import jsonld' << END_CELL + +# Import TRO as JSON-LD and export as N-TRIPLES +geist destroy --dataset kb --quiet +geist create --dataset kb --inputformat json-ld --inputfile ${TRO_DECLARATION} --infer owl + +END_CELL + +# ------------------------------------------------------------------------------ + +bash_cell 'import the private key for repro@repros.dev' << END_CELL + +# delete contents of the .gnupg directory for this REPRO +gnupg-runtime.purge-keys + +# import the private key file +gpg --import --pinentry-mode loopback --passphrase=repro ${PRIVATE_KEY_FILE} 2>&1 +echo + +# list the gpg keys +gpg --list-keys + +END_CELL + +# ------------------------------------------------------------------------------ + +bash_cell 'sign the tro.jsonld file with the private key' << END_CELL + +rm -f ${SIGNATURE_FILE} +gpg --detach-sign --local-user repro@repros.dev \ + --pinentry-mode loopback --passphrase=repro \ + -a -o ${SIGNATURE_FILE} \ + ${TRO_DECLARATION} 2>&1 + +END_CELL + +# ------------------------------------------------------------------------------ + +bash_cell 'verify the signature with the public key' << END_CELL + +gpg -v --verify ${SIGNATURE_FILE} ${TRO_DECLARATION} 2>&1 | tail -6 + +END_CELL + +# ------------------------------------------------------------------------------ \ No newline at end of file diff --git a/demo/02-explorations/01-gpg-runtime/02-simple-tro/run.txt b/demo/02-explorations/01-gpg-runtime/02-simple-tro/run.txt new file mode 100644 index 0000000..8216905 --- /dev/null +++ b/demo/02-explorations/01-gpg-runtime/02-simple-tro/run.txt @@ -0,0 +1,74 @@ +============================================= bash cell | delete gnupg home directory ============================================== + +# delete contents of the .gnupg directory for this REPRO +gnupg-runtime.purge-keys + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +==================================================== bash cell | import jsonld ===================================================== + +# Import TRO as JSON-LD and export as N-TRIPLES +geist destroy --dataset kb --quiet +geist create --dataset kb --inputformat json-ld --inputfile ../../common/tro/tro.jsonld --infer owl + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +===================================== bash cell | import the private key for repro@repros.dev ====================================== + +# delete contents of the .gnupg directory for this REPRO +gnupg-runtime.purge-keys + +# import the private key file +gpg --import --pinentry-mode loopback --passphrase=repro data/private.asc 2>&1 +echo + +# list the gpg keys +gpg --list-keys + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- +gpg: directory '/mnt/trace-model/.gnupg-runtime/.gnupg' created +gpg: keybox '/mnt/trace-model/.gnupg-runtime/.gnupg/pubring.kbx' created +gpg: /mnt/trace-model/.gnupg-runtime/.gnupg/trustdb.gpg: trustdb created +gpg: key 518F156DCC494DFF: public key "repro user " imported +gpg: key 518F156DCC494DFF: secret key imported +gpg: Total number processed: 1 +gpg: imported: 1 +gpg: secret keys read: 1 +gpg: secret keys imported: 1 + +/mnt/trace-model/.gnupg-runtime/.gnupg/pubring.kbx +-------------------------------------------------- +pub rsa1024 2023-10-06 [SCEA] + 3FBDD6190FDBC42C908F203C518F156DCC494DFF +uid [ unknown] repro user + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +==================================== bash cell | sign the tro.jsonld file with the private key ===================================== + +rm -f tmp/signature.asc +gpg --detach-sign --local-user repro@repros.dev --pinentry-mode loopback --passphrase=repro -a -o tmp/signature.asc ../../common/tro/tro.jsonld 2>&1 + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +======================================= bash cell | verify the signature with the public key ======================================= + +gpg -v --verify tmp/signature.asc ../../common/tro/tro.jsonld 2>&1 | tail -6 + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- +gpg: using pgp trust model +gpg: Good signature from "repro user " [unknown] +gpg: WARNING: This key is not certified with a trusted signature! +gpg: There is no indication that the signature belongs to the owner. +Primary key fingerprint: 3FBD D619 0FDB C42C 908F 203C 518F 156D CC49 4DFF +gpg: binary signature, digest algorithm SHA512, key algorithm rsa1024 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + diff --git a/demo/02-explorations/03-type-b2/Makefile b/demo/02-explorations/01-gpg-runtime/Makefile similarity index 100% rename from demo/02-explorations/03-type-b2/Makefile rename to demo/02-explorations/01-gpg-runtime/Makefile diff --git a/demo/02-explorations/01-minimal/data/query b/demo/02-explorations/01-minimal/data/query deleted file mode 100644 index 31eaa5f..0000000 --- a/demo/02-explorations/01-minimal/data/query +++ /dev/null @@ -1,7 +0,0 @@ -PREFIX rdfs: - -SELECT ?s ?o -WHERE { - ?s rdfs:comment ?o -} -ORDER BY ?s ?o \ No newline at end of file diff --git a/demo/02-explorations/01-minimal/run.sh b/demo/02-explorations/01-minimal/run.sh deleted file mode 100644 index 5484379..0000000 --- a/demo/02-explorations/01-minimal/run.sh +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env bash - -# paths to data files -COMMON=../common - -# ------------------------------------------------------------------------------ - -bash_cell 'import jsonld' << END_CELL - -# Import TRO and TRS as JSON-LD and export as N-TRIPLES -geist destroy --dataset kb --quiet -geist create --dataset kb --inputformat json-ld --inputfile ${COMMON}/trace-vocab.jsonld --infer owl -geist load --dataset kb --inputformat json-ld --inputfile ${COMMON}/trs-01-minimal.jsonld -geist load --dataset kb --inputformat json-ld --inputfile ${COMMON}/tro-01-from-minimal-trs.jsonld - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'export ntriples' << END_CELL - -# Import TRO and TRS as JSON-LD and export as N-TRIPLES -geist export --dataset kb --outputformat nt | sort | grep trov - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'query comments with file' << END_CELL - -geist query --dataset kb --file data/query - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'query comments with string' << END_CELL - -geist query --dataset kb << __END_QUERY__ - -PREFIX rdfs: - -SELECT ?s ?o -WHERE { - ?s rdfs:comment ?o -} -ORDER BY ?s ?o - -__END_QUERY__ - -END_CELL - -# ------------------------------------------------------------------------------ - -source ../common/trs-queries.sh - -# ------------------------------------------------------------------------------ - -bash_cell 'destroy kb dataset' << END_CELL - -geist destroy --dataset kb - -END_CELL - -# ------------------------------------------------------------------------------ \ No newline at end of file diff --git a/demo/02-explorations/01-minimal/run.txt b/demo/02-explorations/01-minimal/run.txt deleted file mode 100644 index 29cdf38..0000000 --- a/demo/02-explorations/01-minimal/run.txt +++ /dev/null @@ -1,317 +0,0 @@ -==================================================== bash cell | import jsonld ===================================================== - -# Import TRO and TRS as JSON-LD and export as N-TRIPLES -geist destroy --dataset kb --quiet -geist create --dataset kb --inputformat json-ld --inputfile ../common/trace-vocab.jsonld --infer owl -geist load --dataset kb --inputformat json-ld --inputfile ../common/trs-01-minimal.jsonld -geist load --dataset kb --inputformat json-ld --inputfile ../common/tro-01-from-minimal-trs.jsonld - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -=================================================== bash cell | export ntriples ==================================================== - -# Import TRO and TRS as JSON-LD and export as N-TRIPLES -geist export --dataset kb --outputformat nt | sort | grep trov - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- - . - . - "Research system makes all inputs available after runtime." . - "AllInputAvailableAfterRuntime" . - . - . - . - "Research system makes all inputs available prior to runtime." . - "AllInputAvailableBeforeRuntime" . - . - . - . - "Research object describes the full software environment." . - "DescribeSoftwareEnvironment" . - . - . - . - "Research system shows evidence of runtime." . - "EvidenceRuntime" . - . - . - . - "Research object includes all code." . - "IncludeAllCode" . - . - . - . - "Research object includes all inputs." . - "IncludeAllInput" . - . - . - . - "Research object includes all outputs." . - "IncludeAllOutput" . - . - . - "ObjectPolicy" . - . - . - . - "Policy" . - . - . - . - "Research system prevents internet access during execution." . - "PreventInternetAccess" . - . - . - . - "Research system prevents interaction with author prior to runtime." . - "PreventInterventionBeforeRuntime" . - . - . - . - "Research system prevents interaction with author of package during runtime." . - "PreventInterventionDuringRuntime" . - . - . - . - . - "SystemPolicy" . - . - . - . - . - "Research system tracks intermediate steps." . - "TrackIntermediateSteps" . - . - . - "enforces" . - . - . - . - . - . - . - . - . - . - . - "TRS that enforces no policies." . - "Minimal TRS" . -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -=============================================== bash cell | query comments with file =============================================== - -geist query --dataset kb --file data/query - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -| | s | o | -|---:|:-----------------------------------------------------------------------|:------------------------------------------------------------------------------| -| 0 | | "Research system makes all inputs available after runtime." | -| 1 | | "Research system makes all inputs available prior to runtime." | -| 2 | | "Research object describes the full software environment." | -| 3 | | "Research system shows evidence of runtime." | -| 4 | | "Research object includes all code." | -| 5 | | "Research object includes all inputs." | -| 6 | | "Research object includes all outputs." | -| 7 | | "Research system prevents internet access during execution." | -| 8 | | "Research system prevents interaction with author prior to runtime." | -| 9 | | "Research system prevents interaction with author of package during runtime." | -| 10 | | "Research system tracks intermediate steps." | -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -============================================== bash cell | query comments with string ============================================== - -geist query --dataset kb << __END_QUERY__ - -PREFIX rdfs: - -SELECT ?s ?o -WHERE { - ?s rdfs:comment ?o -} -ORDER BY ?s ?o - -__END_QUERY__ - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -| | s | o | -|---:|:-----------------------------------------------------------------------|:------------------------------------------------------------------------------| -| 0 | | "Research system makes all inputs available after runtime." | -| 1 | | "Research system makes all inputs available prior to runtime." | -| 2 | | "Research object describes the full software environment." | -| 3 | | "Research system shows evidence of runtime." | -| 4 | | "Research object includes all code." | -| 5 | | "Research object includes all inputs." | -| 6 | | "Research object includes all outputs." | -| 7 | | "Research system prevents internet access during execution." | -| 8 | | "Research system prevents interaction with author prior to runtime." | -| 9 | | "Research system prevents interaction with author of package during runtime." | -| 10 | | "Research system tracks intermediate steps." | -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -============================================= bash cell | query trs enforced policies ============================================== - -# What TRS policies are enforced by the TRS? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX trov: - - SELECT DISTINCT ?trs ?policyName ?policyDescription - WHERE { - ?trs rdf:type trov:System . - ?trs trov:enforces ?policy . - ?policy rdf:type trov:SystemPolicy . - ?policy rdfs:label ?policyName . - ?policy rdfs:comment ?policyDescription . - } ORDER BY ?trs ?policyName - -__END_QUERY__ - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -| trs | policyName | policyDescription | -|-------|--------------|---------------------| -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -============================================= bash cell | query tro enforced policies ============================================== - -# What TRO policies are enforced by the TRS? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX trov: - - SELECT DISTINCT ?trs ?policyName ?policyDescription - WHERE { - ?trs rdf:type trov:System . - ?trs trov:enforces ?policy . - ?policy rdf:type trov:ObjectPolicy . - ?policy rdfs:label ?policyName . - ?policy rdfs:comment ?policyDescription . - } ORDER BY ?trs ?policyName - -__END_QUERY__ - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -| trs | policyName | policyDescription | -|-------|--------------|---------------------| -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -============================================= bash cell | query all enforced policies ============================================== - -# What policies are enforced by the TRS? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX trov: - - SELECT DISTINCT ?trs ?policyName ?policyDescription - WHERE { - ?trs rdf:type trov:System . - ?trs trov:enforces ?policy . - ?policy rdfs:label ?policyName . - ?policy rdfs:comment ?policyDescription . - } ORDER BY ?trs ?policyName - -__END_QUERY__ - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -| trs | policyName | policyDescription | -|-------|--------------|---------------------| -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -============================================= bash cell | query trs prevented policies ============================================= - -# What TRS policies are prevented by the TRS? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX trov: - - SELECT DISTINCT ?trs ?policyName ?policyDescription - WHERE { - ?trs rdf:type trov:System . - ?trs trov:prevents ?policy . - ?policy rdf:type trov:SystemPolicy . - ?policy rdfs:label ?policyName . - ?policy rdfs:comment ?policyDescription . - } ORDER BY ?trs ?policyName - -__END_QUERY__ - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -| trs | policyName | policyDescription | -|-------|--------------|---------------------| -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -============================================= bash cell | query tro prevented policies ============================================= - -# What TRO policies are prevented by the TRS? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX trov: - - SELECT DISTINCT ?trs ?policyName ?policyDescription - WHERE { - ?trs rdf:type trov:System . - ?trs trov:prevents ?policy . - ?policy rdf:type trov:ObjectPolicy . - ?policy rdfs:label ?policyName . - ?policy rdfs:comment ?policyDescription . - } ORDER BY ?trs ?policyName - -__END_QUERY__ - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -| trs | policyName | policyDescription | -|-------|--------------|---------------------| -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -============================================= bash cell | query all prevented policies ============================================= - -# What policies are prevented by the TRS? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX trov: - - SELECT DISTINCT ?trs ?policyName ?policyDescription - WHERE { - ?trs rdf:type trov:System . - ?trs trov:prevents ?policy . - ?policy rdfs:label ?policyName . - ?policy rdfs:comment ?policyDescription . - } ORDER BY ?trs ?policyName - -__END_QUERY__ - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -| trs | policyName | policyDescription | -|-------|--------------|---------------------| -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -================================================== bash cell | destroy kb dataset ================================================== - -geist destroy --dataset kb - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - diff --git a/demo/02-explorations/04-report-subclass-graph/Makefile b/demo/02-explorations/02-gpg-api/01-generate-key/Makefile similarity index 100% rename from demo/02-explorations/04-report-subclass-graph/Makefile rename to demo/02-explorations/02-gpg-api/01-generate-key/Makefile diff --git a/demo/02-explorations/07-gpg-api-demos/01-generate-key/run.sh b/demo/02-explorations/02-gpg-api/01-generate-key/run.sh similarity index 76% rename from demo/02-explorations/07-gpg-api-demos/01-generate-key/run.sh rename to demo/02-explorations/02-gpg-api/01-generate-key/run.sh index f942f06..54ef0cf 100644 --- a/demo/02-explorations/07-gpg-api-demos/01-generate-key/run.sh +++ b/demo/02-explorations/02-gpg-api/01-generate-key/run.sh @@ -1,5 +1,10 @@ #!/usr/bin/env bash +TRO_DECLARATION=../../common/tro/tro.jsonld +PUBLIC_KEY_FILE=tmp/public.gpg +PRIVATE_KEY_FILE=tmp/private.asc +SIGNATURE_FILE=tmp/signature.asc + # ------------------------------------------------------------------------------ bash_cell 'generate a key pair' << END_CELL @@ -32,9 +37,7 @@ END_CELL # ------------------------------------------------------------------------------ -bash_cell 'export the public key' << 'END_CELL' - -PUBLIC_KEY_FILE=tmp/public.pgp +bash_cell 'export the public key' << END_CELL python3 << END_PYTHON @@ -45,22 +48,16 @@ gpg = gnupg.GPG() public_key = gpg.export_keys('repro@repros.dev') # write the public key to a file -with open("tmp/public.pgp", "w") as text_file: +with open("${PUBLIC_KEY_FILE}", "w") as text_file: text_file.write(public_key) END_PYTHON -# print a redacted view of the public key -gnupg-runtime.redact-key ${PUBLIC_KEY_FILE} - END_CELL # ------------------------------------------------------------------------------ -bash_cell 'export the private key' << 'END_CELL' - -# export the private key -PRIVATE_KEY_FILE=tmp/private.asc +bash_cell 'export the private key' << END_CELL python3 << END_PYTHON @@ -71,14 +68,11 @@ gpg = gnupg.GPG() private_key = gpg.export_keys('repro@repros.dev', secret=True, passphrase='repro') # write the private key to a file -with open("tmp/private.asc", "w") as text_file: +with open("${PRIVATE_KEY_FILE}", "w") as text_file: text_file.write(private_key) END_PYTHON -# print a redacted view of the private key -gnupg-runtime.redact-key ${PRIVATE_KEY_FILE} - END_CELL # ------------------------------------------------------------------------------ diff --git a/demo/02-explorations/07-gpg-api-demos/01-generate-key/run.txt b/demo/02-explorations/02-gpg-api/01-generate-key/run.txt similarity index 52% rename from demo/02-explorations/07-gpg-api-demos/01-generate-key/run.txt rename to demo/02-explorations/02-gpg-api/01-generate-key/run.txt index a87896a..933a6b4 100644 --- a/demo/02-explorations/07-gpg-api-demos/01-generate-key/run.txt +++ b/demo/02-explorations/02-gpg-api/01-generate-key/run.txt @@ -31,8 +31,6 @@ uid [ultimate] repro user ================================================ bash cell | export the public key ================================================= -PUBLIC_KEY_FILE=tmp/public.pgp - python3 << END_PYTHON import gnupg @@ -42,35 +40,17 @@ gpg = gnupg.GPG() public_key = gpg.export_keys('repro@repros.dev') # write the public key to a file -with open("tmp/public.pgp", "w") as text_file: +with open("tmp/public.gpg", "w") as text_file: text_file.write(public_key) END_PYTHON -# print a redacted view of the public key -gnupg-runtime.redact-key ${PUBLIC_KEY_FILE} - ----------------------------------------------------------- cell outputs ----------------------------------------------------------- ------BEGIN PGP PUBLIC KEY BLOCK----- - -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxx ------END PGP PUBLIC KEY BLOCK----- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ================================================ bash cell | export the private key ================================================ -# export the private key -PRIVATE_KEY_FILE=tmp/private.asc - python3 << END_PYTHON import gnupg @@ -85,30 +65,7 @@ with open("tmp/private.asc", "w") as text_file: END_PYTHON -# print a redacted view of the private key -gnupg-runtime.redact-key ${PRIVATE_KEY_FILE} - ----------------------------------------------------------- cell outputs ----------------------------------------------------------- ------BEGIN PGP PRIVATE KEY BLOCK----- - -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxx ------END PGP PRIVATE KEY BLOCK----- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/demo/02-explorations/05-report-policies/Makefile b/demo/02-explorations/02-gpg-api/02-simple-tro/Makefile similarity index 100% rename from demo/02-explorations/05-report-policies/Makefile rename to demo/02-explorations/02-gpg-api/02-simple-tro/Makefile diff --git a/demo/02-explorations/02-gpg-api/02-simple-tro/data/private.asc b/demo/02-explorations/02-gpg-api/02-simple-tro/data/private.asc new file mode 100644 index 0000000..c25edd1 --- /dev/null +++ b/demo/02-explorations/02-gpg-api/02-simple-tro/data/private.asc @@ -0,0 +1,20 @@ +-----BEGIN PGP PRIVATE KEY BLOCK----- + +lQIGBGUgICgBBACnqSMevqKr0pY+I7NH/3E45SkMWyutmbt06SqQPLyWRQ/8lrcJ +v8ANqetWUqTKgIRlTWJ4pm8m4Cs7SJN4KBNkKdy6cfUTTQNadDRPrOZ8gxfvPKkF +cORqBGdRHTdCdim0fAk72MLZKx8CTi0Kp/pyL1UAMeP3cqY4HtjGAmK1+wARAQAB +/gcDAoBkG/XYcTnW/1sgcatAehk5nAk5WtSdN82iX7UMXU/Rfx3+8AOoz6PPq8kE +fL3oBE6lGDZLhWTE0Mesn20NXMNfjVPMOdZBhFqowk7orPuF54f0PuKxlqalHjLW +FNe3vQ2aoemrWC+V790fH2X7GldaF70nJb78HEX/OMo6EDL0lQzhVU1j6Zg2m/F0 +4odREmJOdvQRg849pMKDmUeKe/+3ONcu5JhmZxpcbsK/qhJwzMHjHo0QLOkLLwPm +J1jfd/Bo+FCKcbXNE/RFQgrd1OHeQBRmKxooY1ndyr5j0WWIzdbNi+puUyPRafuD +E5hz+kqrvWndbSTriNUhB+t88wl5cK82v93gckCHCpyy6STwmURZr6SWcMoo7MHp +RSF4N3ppa6BM42eXGBHx76J2N7zVB8IhFssxI4tWKc1aCYntFWxtHW6ESr3xbrFp +qtfKYimLwc3ZwzbxiCcZt3TdaBgyO7ZPOpF3v+vZiJnpUx9TeSNQLn60HXJlcHJv +IHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQ/vdYZD9vELJCPIDxR +jxVtzElN/wUCZSAgKAIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRBRjxVt +zElN/7d4BACmRSgot6XaSrKLE9iSZIvGU3etZWhGlzXb3eXYxYrW9E22EACKk8Wv +HXNKJQqxMljQnJDh2Jvw4v3nF6N3eLK8Ak8FAc9zBSz+GzwTC17qM+oPuxrf1G0W +7u69FbZ7JFw2ZkO1Aifk0zOuwORdNZwt5yIGeEBgCWg8TVwCsvbAyw== +=XJdS +-----END PGP PRIVATE KEY BLOCK----- diff --git a/demo/02-explorations/02-gpg-api/02-simple-tro/data/public.gpg b/demo/02-explorations/02-gpg-api/02-simple-tro/data/public.gpg new file mode 100644 index 0000000..6f5dc42 --- /dev/null +++ b/demo/02-explorations/02-gpg-api/02-simple-tro/data/public.gpg @@ -0,0 +1,12 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mI0EZSAgKAEEAKepIx6+oqvSlj4js0f/cTjlKQxbK62Zu3TpKpA8vJZFD/yWtwm/ +wA2p61ZSpMqAhGVNYnimbybgKztIk3goE2Qp3Lpx9RNNA1p0NE+s5nyDF+88qQVw +5GoEZ1EdN0J2KbR8CTvYwtkrHwJOLQqn+nIvVQAx4/dypjge2MYCYrX7ABEBAAG0 +HXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQ/vdYZD9vE +LJCPIDxRjxVtzElN/wUCZSAgKAIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK +CRBRjxVtzElN/7d4BACmRSgot6XaSrKLE9iSZIvGU3etZWhGlzXb3eXYxYrW9E22 +EACKk8WvHXNKJQqxMljQnJDh2Jvw4v3nF6N3eLK8Ak8FAc9zBSz+GzwTC17qM+oP +uxrf1G0W7u69FbZ7JFw2ZkO1Aifk0zOuwORdNZwt5yIGeEBgCWg8TVwCsvbAyw== +=IW7u +-----END PGP PUBLIC KEY BLOCK----- diff --git a/demo/02-explorations/07-gpg-api-demos/02-simple-tro/run.sh b/demo/02-explorations/02-gpg-api/02-simple-tro/run.sh similarity index 52% rename from demo/02-explorations/07-gpg-api-demos/02-simple-tro/run.sh rename to demo/02-explorations/02-gpg-api/02-simple-tro/run.sh index 315e137..716ab6b 100644 --- a/demo/02-explorations/07-gpg-api-demos/02-simple-tro/run.sh +++ b/demo/02-explorations/02-gpg-api/02-simple-tro/run.sh @@ -1,77 +1,43 @@ #!/usr/bin/env bash -MESSAGE_FOLDER=data/message +TRO_DECLARATION=../../common/tro/tro.jsonld PUBLIC_KEY_FILE=data/public.gpg PRIVATE_KEY_FILE=data/private.asc -ZIPPED_MESSAGE_FILE=products/message.tar.gz -TRO_JSONLD_FILE=products/tro.jsonld SIGNATURE_FILE=tmp/signature.asc # ------------------------------------------------------------------------------ bash_cell 'delete the gnupg home directory and keys' << END_CELL + # delete contents of GnuPG home directory for this REPRO gnupg-runtime.purge-keys -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'tar the data dir content' << END_CELL - -find | sort | tar -czvf ${ZIPPED_MESSAGE_FILE} ${MESSAGE_FOLDER} --mtime='1970-01-01' - -END_CELL - -# ------------------------------------------------------------------------------ -bash_cell 'create tro manifest containing the digest of data' << END_CELL -python3 << END_PYTHON -from hashlib import sha256 -import json -with open("products/message.tar.gz", "rb") as fin: - digest = sha256(fin.read()).hexdigest() -fout = open("${TRO_JSONLD_FILE}", mode="w", encoding="utf-8") -jsonld_content = { - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - }], - - "@graph": [{ - - "@id": "trov:tro/01", - "@type": "trov:ResearchObject", - - "trov:generatedBySystem": { "@id": "trov:system/01" }, - "trov:digest": digest, - "trov:troFilePath": "products/message.tar.gz" - }] -} -json.dump(jsonld_content, fout, indent=4) - -fout.close() -END_PYTHON -cat ${TRO_JSONLD_FILE} END_CELL # ------------------------------------------------------------------------------ bash_cell 'import the private key for repro@repros.dev' << END_CELL + python3 << END_PYTHON + import gnupg + # read the private key from the file with open("${PRIVATE_KEY_FILE}", "r") as private_key_file: private_key_text = private_key_file.read() + # import the private key and trust it gpg = gnupg.GPG() gpg.import_keys(private_key_text) -gpg.trust_keys('BD4CA7A2E41893A79420976235AAF11171DB78A7', 'TRUST_ULTIMATE') + END_PYTHON + END_CELL # ------------------------------------------------------------------------------ bash_cell 'list the imported public key using the gpg cli' << END_CELL + echo Public keys: echo gpg --list-keys @@ -80,28 +46,36 @@ echo Private keys: echo gpg --list-secret-keys echo + END_CELL # ------------------------------------------------------------------------------ bash_cell 'sign and verify the tro.jsonld for repro@repros.dev (detach=True)' << END_CELL + python3 << END_PYTHON + import gnupg + # Read the message from the file -with open("${TRO_JSONLD_FILE}", "r") as tro_jsonld_file: - tro_jsonld_text = bytes(tro_jsonld_file.read(), "utf-8") +with open("${TRO_DECLARATION}", "r") as tro_declaration_file: + tro_declaration_text = bytes(tro_declaration_file.read(), "utf-8") + # Sign the message with the private key gpg = gnupg.GPG() -signed_text = gpg.sign(tro_jsonld_text, keyid="repro@repros.dev", passphrase="repro", detach=True) +signed_text = gpg.sign(tro_declaration_text, keyid="repro@repros.dev", passphrase="repro", detach=True) + # Write the signed message to a file with open("${SIGNATURE_FILE}", "w") as text_file: text_file.write(str(signed_text)) -verified = gpg.verify_data("${SIGNATURE_FILE}", tro_jsonld_text) +verified = gpg.verify_data("${SIGNATURE_FILE}", tro_declaration_text) if not verified: raise ValueError("Signature could not be verified!") else: print("Signature has been verified successfully!") + END_PYTHON + END_CELL # ------------------------------------------------------------------------------ \ No newline at end of file diff --git a/demo/02-explorations/02-gpg-api/02-simple-tro/run.txt b/demo/02-explorations/02-gpg-api/02-simple-tro/run.txt new file mode 100644 index 0000000..c89be4b --- /dev/null +++ b/demo/02-explorations/02-gpg-api/02-simple-tro/run.txt @@ -0,0 +1,92 @@ +======================================= bash cell | delete the gnupg home directory and keys ======================================= + +# delete contents of GnuPG home directory for this REPRO +gnupg-runtime.purge-keys + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +===================================== bash cell | import the private key for repro@repros.dev ====================================== + +python3 << END_PYTHON + +import gnupg + +# read the private key from the file +with open("data/private.asc", "r") as private_key_file: + private_key_text = private_key_file.read() + +# import the private key and trust it +gpg = gnupg.GPG() +gpg.import_keys(private_key_text) + +END_PYTHON + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +==================================== bash cell | list the imported public key using the gpg cli ==================================== + +echo Public keys: +echo +gpg --list-keys +echo +echo Private keys: +echo +gpg --list-secret-keys +echo + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- +Public keys: + +/mnt/trace-model/.gnupg-runtime/.gnupg/pubring.kbx +-------------------------------------------------- +pub rsa1024 2023-10-06 [SCEA] + 3FBDD6190FDBC42C908F203C518F156DCC494DFF +uid [ unknown] repro user + + +Private keys: + +/mnt/trace-model/.gnupg-runtime/.gnupg/pubring.kbx +-------------------------------------------------- +sec rsa1024 2023-10-06 [SCEA] + 3FBDD6190FDBC42C908F203C518F156DCC494DFF +uid [ unknown] repro user + + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +========================== bash cell | sign and verify the tro.jsonld for repro@repros.dev (detach=True) =========================== + +python3 << END_PYTHON + +import gnupg + +# Read the message from the file +with open("../../common/tro/tro.jsonld", "r") as tro_declaration_file: + tro_declaration_text = bytes(tro_declaration_file.read(), "utf-8") + +# Sign the message with the private key +gpg = gnupg.GPG() +signed_text = gpg.sign(tro_declaration_text, keyid="repro@repros.dev", passphrase="repro", detach=True) + +# Write the signed message to a file +with open("tmp/signature.asc", "w") as text_file: + text_file.write(str(signed_text)) +verified = gpg.verify_data("tmp/signature.asc", tro_declaration_text) +if not verified: + raise ValueError("Signature could not be verified!") +else: + print("Signature has been verified successfully!") + +END_PYTHON + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- +Signature has been verified successfully! +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + diff --git a/demo/02-explorations/06-gpg-runtime-demos/01-generate-key/Makefile b/demo/02-explorations/02-gpg-api/Makefile similarity index 100% rename from demo/02-explorations/06-gpg-runtime-demos/01-generate-key/Makefile rename to demo/02-explorations/02-gpg-api/Makefile diff --git a/demo/02-explorations/02-type-a/run.sh b/demo/02-explorations/02-type-a/run.sh deleted file mode 100644 index fde5a73..0000000 --- a/demo/02-explorations/02-type-a/run.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env bash - -# paths to data files -COMMON=../common - -# ------------------------------------------------------------------------------ - -bash_cell 'import jsonld' << END_CELL - -# Import TRO and TRS as JSON-LD and export as N-TRIPLES -geist destroy --dataset kb --quiet -geist create --dataset kb --inputformat json-ld --inputfile ${COMMON}/trace-vocab.jsonld --infer owl -geist load --dataset kb --inputformat json-ld --inputfile ${COMMON}/trs-02-type-a.jsonld -geist load --dataset kb --inputformat json-ld --inputfile ${COMMON}/tro-02-from-type-a-trs.jsonld - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'export ntriples' << END_CELL - -# Import TRO and TRS as JSON-LD and export as N-TRIPLES -geist export --dataset kb --outputformat nt | sort | grep trov - -END_CELL - -# ------------------------------------------------------------------------------ - -source ../common/trs-queries.sh - -# ------------------------------------------------------------------------------ - -bash_cell 'destroy kb dataset' << END_CELL - -geist destroy --dataset kb - -END_CELL - -# ------------------------------------------------------------------------------ \ No newline at end of file diff --git a/demo/02-explorations/02-type-a/run.txt b/demo/02-explorations/02-type-a/run.txt deleted file mode 100644 index 44ebcc5..0000000 --- a/demo/02-explorations/02-type-a/run.txt +++ /dev/null @@ -1,294 +0,0 @@ -==================================================== bash cell | import jsonld ===================================================== - -# Import TRO and TRS as JSON-LD and export as N-TRIPLES -geist destroy --dataset kb --quiet -geist create --dataset kb --inputformat json-ld --inputfile ../common/trace-vocab.jsonld --infer owl -geist load --dataset kb --inputformat json-ld --inputfile ../common/trs-02-type-a.jsonld -geist load --dataset kb --inputformat json-ld --inputfile ../common/tro-02-from-type-a-trs.jsonld - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -=================================================== bash cell | export ntriples ==================================================== - -# Import TRO and TRS as JSON-LD and export as N-TRIPLES -geist export --dataset kb --outputformat nt | sort | grep trov - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- - . - . - "Research system makes all inputs available after runtime." . - "AllInputAvailableAfterRuntime" . - . - . - . - "Research system makes all inputs available prior to runtime." . - "AllInputAvailableBeforeRuntime" . - . - . - . - "Research object describes the full software environment." . - "DescribeSoftwareEnvironment" . - . - . - . - "Research system shows evidence of runtime." . - "EvidenceRuntime" . - . - . - . - "Research object includes all code." . - "IncludeAllCode" . - . - . - . - "Research object includes all inputs." . - "IncludeAllInput" . - . - . - . - "Research object includes all outputs." . - "IncludeAllOutput" . - . - . - "ObjectPolicy" . - . - . - . - "Policy" . - . - . - . - "Research system prevents internet access during execution." . - "PreventInternetAccess" . - . - . - . - "Research system prevents interaction with author prior to runtime." . - "PreventInterventionBeforeRuntime" . - . - . - . - "Research system prevents interaction with author of package during runtime." . - "PreventInterventionDuringRuntime" . - . - . - . - . - "SystemPolicy" . - . - . - . - . - "Research system tracks intermediate steps." . - "TrackIntermediateSteps" . - . - . - . - "enforces" . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - "TRS that implements a loose queue." . - "Example Type B.1 TRS" . -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -============================================= bash cell | query trs enforced policies ============================================== - -# What TRS policies are enforced by the TRS? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX trov: - - SELECT DISTINCT ?trs ?policyName ?policyDescription - WHERE { - ?trs rdf:type trov:System . - ?trs trov:enforces ?policy . - ?policy rdf:type trov:SystemPolicy . - ?policy rdfs:label ?policyName . - ?policy rdfs:comment ?policyDescription . - } ORDER BY ?trs ?policyName - -__END_QUERY__ - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -| | trs | policyName | policyDescription | -|---:|:---------------------------------------------|:-----------------------------------|:------------------------------------------------------------------------------| -| 0 | | "EvidenceRuntime" | "Research system shows evidence of runtime." | -| 1 | | "PreventInterventionDuringRuntime" | "Research system prevents interaction with author of package during runtime." | -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -============================================= bash cell | query tro enforced policies ============================================== - -# What TRO policies are enforced by the TRS? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX trov: - - SELECT DISTINCT ?trs ?policyName ?policyDescription - WHERE { - ?trs rdf:type trov:System . - ?trs trov:enforces ?policy . - ?policy rdf:type trov:ObjectPolicy . - ?policy rdfs:label ?policyName . - ?policy rdfs:comment ?policyDescription . - } ORDER BY ?trs ?policyName - -__END_QUERY__ - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -| | trs | policyName | policyDescription | -|---:|:---------------------------------------------|:------------------------------|:-----------------------------------------------------------| -| 0 | | "DescribeSoftwareEnvironment" | "Research object describes the full software environment." | -| 1 | | "IncludeAllCode" | "Research object includes all code." | -| 2 | | "IncludeAllOutput" | "Research object includes all outputs." | -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -============================================= bash cell | query all enforced policies ============================================== - -# What policies are enforced by the TRS? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX trov: - - SELECT DISTINCT ?trs ?policyName ?policyDescription - WHERE { - ?trs rdf:type trov:System . - ?trs trov:enforces ?policy . - ?policy rdfs:label ?policyName . - ?policy rdfs:comment ?policyDescription . - } ORDER BY ?trs ?policyName - -__END_QUERY__ - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -| | trs | policyName | policyDescription | -|---:|:---------------------------------------------|:-----------------------------------|:------------------------------------------------------------------------------| -| 0 | | "DescribeSoftwareEnvironment" | "Research object describes the full software environment." | -| 1 | | "EvidenceRuntime" | "Research system shows evidence of runtime." | -| 2 | | "IncludeAllCode" | "Research object includes all code." | -| 3 | | "IncludeAllOutput" | "Research object includes all outputs." | -| 4 | | "PreventInterventionDuringRuntime" | "Research system prevents interaction with author of package during runtime." | -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -============================================= bash cell | query trs prevented policies ============================================= - -# What TRS policies are prevented by the TRS? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX trov: - - SELECT DISTINCT ?trs ?policyName ?policyDescription - WHERE { - ?trs rdf:type trov:System . - ?trs trov:prevents ?policy . - ?policy rdf:type trov:SystemPolicy . - ?policy rdfs:label ?policyName . - ?policy rdfs:comment ?policyDescription . - } ORDER BY ?trs ?policyName - -__END_QUERY__ - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -| | trs | policyName | policyDescription | -|---:|:---------------------------------------------|:------------------------|:-------------------------------------------------------------| -| 0 | | "PreventInternetAccess" | "Research system prevents internet access during execution." | -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -============================================= bash cell | query tro prevented policies ============================================= - -# What TRO policies are prevented by the TRS? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX trov: - - SELECT DISTINCT ?trs ?policyName ?policyDescription - WHERE { - ?trs rdf:type trov:System . - ?trs trov:prevents ?policy . - ?policy rdf:type trov:ObjectPolicy . - ?policy rdfs:label ?policyName . - ?policy rdfs:comment ?policyDescription . - } ORDER BY ?trs ?policyName - -__END_QUERY__ - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -| trs | policyName | policyDescription | -|-------|--------------|---------------------| -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -============================================= bash cell | query all prevented policies ============================================= - -# What policies are prevented by the TRS? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX trov: - - SELECT DISTINCT ?trs ?policyName ?policyDescription - WHERE { - ?trs rdf:type trov:System . - ?trs trov:prevents ?policy . - ?policy rdfs:label ?policyName . - ?policy rdfs:comment ?policyDescription . - } ORDER BY ?trs ?policyName - -__END_QUERY__ - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -| | trs | policyName | policyDescription | -|---:|:---------------------------------------------|:------------------------|:-------------------------------------------------------------| -| 0 | | "PreventInternetAccess" | "Research system prevents internet access during execution." | -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -================================================== bash cell | destroy kb dataset ================================================== - -geist destroy --dataset kb - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - diff --git a/demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/Makefile b/demo/02-explorations/03-tro-fingerprint-state/Makefile similarity index 100% rename from demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/Makefile rename to demo/02-explorations/03-tro-fingerprint-state/Makefile diff --git a/demo/02-explorations/09-tro-fingerprint-state/data/file1.csv b/demo/02-explorations/03-tro-fingerprint-state/data/file1.csv similarity index 100% rename from demo/02-explorations/09-tro-fingerprint-state/data/file1.csv rename to demo/02-explorations/03-tro-fingerprint-state/data/file1.csv diff --git a/demo/02-explorations/09-tro-fingerprint-state/data/file2.csv b/demo/02-explorations/03-tro-fingerprint-state/data/file2.csv similarity index 100% rename from demo/02-explorations/09-tro-fingerprint-state/data/file2.csv rename to demo/02-explorations/03-tro-fingerprint-state/data/file2.csv diff --git a/demo/02-explorations/09-tro-fingerprint-state/products/after.csv b/demo/02-explorations/03-tro-fingerprint-state/products/after.csv similarity index 100% rename from demo/02-explorations/09-tro-fingerprint-state/products/after.csv rename to demo/02-explorations/03-tro-fingerprint-state/products/after.csv diff --git a/demo/02-explorations/09-tro-fingerprint-state/products/before.csv b/demo/02-explorations/03-tro-fingerprint-state/products/before.csv similarity index 100% rename from demo/02-explorations/09-tro-fingerprint-state/products/before.csv rename to demo/02-explorations/03-tro-fingerprint-state/products/before.csv diff --git a/demo/02-explorations/09-tro-fingerprint-state/products/fingerprint_state.csv b/demo/02-explorations/03-tro-fingerprint-state/products/fingerprint_state.csv similarity index 100% rename from demo/02-explorations/09-tro-fingerprint-state/products/fingerprint_state.csv rename to demo/02-explorations/03-tro-fingerprint-state/products/fingerprint_state.csv diff --git a/demo/02-explorations/09-tro-fingerprint-state/run.sh b/demo/02-explorations/03-tro-fingerprint-state/run.sh similarity index 100% rename from demo/02-explorations/09-tro-fingerprint-state/run.sh rename to demo/02-explorations/03-tro-fingerprint-state/run.sh diff --git a/demo/02-explorations/09-tro-fingerprint-state/run.txt b/demo/02-explorations/03-tro-fingerprint-state/run.txt similarity index 100% rename from demo/02-explorations/09-tro-fingerprint-state/run.txt rename to demo/02-explorations/03-tro-fingerprint-state/run.txt diff --git a/demo/02-explorations/09-tro-fingerprint-state/runtime/file1.csv b/demo/02-explorations/03-tro-fingerprint-state/runtime/file1.csv similarity index 100% rename from demo/02-explorations/09-tro-fingerprint-state/runtime/file1.csv rename to demo/02-explorations/03-tro-fingerprint-state/runtime/file1.csv diff --git a/demo/02-explorations/09-tro-fingerprint-state/runtime/file3.csv b/demo/02-explorations/03-tro-fingerprint-state/runtime/file3.csv similarity index 100% rename from demo/02-explorations/09-tro-fingerprint-state/runtime/file3.csv rename to demo/02-explorations/03-tro-fingerprint-state/runtime/file3.csv diff --git a/demo/02-explorations/09-tro-fingerprint-state/test.py b/demo/02-explorations/03-tro-fingerprint-state/test.py similarity index 100% rename from demo/02-explorations/09-tro-fingerprint-state/test.py rename to demo/02-explorations/03-tro-fingerprint-state/test.py diff --git a/demo/02-explorations/03-type-b2/run.sh b/demo/02-explorations/03-type-b2/run.sh deleted file mode 100644 index 82f7a28..0000000 --- a/demo/02-explorations/03-type-b2/run.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash - -# paths to data files -COMMON=../common - -# ------------------------------------------------------------------------------ - -bash_cell 'import jsonld' << END_CELL - -# Import TRO and TRS as JSON-LD and export as N-TRIPLES -geist destroy --dataset kb --quiet -geist create --dataset kb --inputformat json-ld --inputfile ${COMMON}/trace-vocab.jsonld --infer owl -geist load --dataset kb --inputformat json-ld --inputfile ${COMMON}/trs-03-type-b2.jsonld -geist load --dataset kb --inputformat json-ld --inputfile ${COMMON}/tro-03-from-type-b2-trs.jsonld - -END_CELL - -# ------------------------------------------------------------------------------ - -source ../common/trs-queries.sh - -# ------------------------------------------------------------------------------ - -bash_cell 'destroy kb dataset' << END_CELL - -geist destroy --dataset kb - -END_CELL - -# ------------------------------------------------------------------------------ \ No newline at end of file diff --git a/demo/02-explorations/03-type-b2/run.txt b/demo/02-explorations/03-type-b2/run.txt deleted file mode 100644 index 04a2025..0000000 --- a/demo/02-explorations/03-type-b2/run.txt +++ /dev/null @@ -1,190 +0,0 @@ -==================================================== bash cell | import jsonld ===================================================== - -# Import TRO and TRS as JSON-LD and export as N-TRIPLES -geist destroy --dataset kb --quiet -geist create --dataset kb --inputformat json-ld --inputfile ../common/trace-vocab.jsonld --infer owl -geist load --dataset kb --inputformat json-ld --inputfile ../common/trs-03-type-b2.jsonld -geist load --dataset kb --inputformat json-ld --inputfile ../common/tro-03-from-type-b2-trs.jsonld - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -============================================= bash cell | query trs enforced policies ============================================== - -# What TRS policies are enforced by the TRS? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX trov: - - SELECT DISTINCT ?trs ?policyName ?policyDescription - WHERE { - ?trs rdf:type trov:System . - ?trs trov:enforces ?policy . - ?policy rdf:type trov:SystemPolicy . - ?policy rdfs:label ?policyName . - ?policy rdfs:comment ?policyDescription . - } ORDER BY ?trs ?policyName - -__END_QUERY__ - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -| | trs | policyName | policyDescription | -|---:|:---------------------------------------------|:-----------------------------------|:------------------------------------------------------------------------------| -| 0 | | "AllInputAvailableBeforeRuntime" | "Research system makes all inputs available prior to runtime." | -| 1 | | "EvidenceRuntime" | "Research system shows evidence of runtime." | -| 2 | | "PreventInterventionDuringRuntime" | "Research system prevents interaction with author of package during runtime." | -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -============================================= bash cell | query tro enforced policies ============================================== - -# What TRO policies are enforced by the TRS? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX trov: - - SELECT DISTINCT ?trs ?policyName ?policyDescription - WHERE { - ?trs rdf:type trov:System . - ?trs trov:enforces ?policy . - ?policy rdf:type trov:ObjectPolicy . - ?policy rdfs:label ?policyName . - ?policy rdfs:comment ?policyDescription . - } ORDER BY ?trs ?policyName - -__END_QUERY__ - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -| | trs | policyName | policyDescription | -|---:|:---------------------------------------------|:------------------------------|:-----------------------------------------------------------| -| 0 | | "DescribeSoftwareEnvironment" | "Research object describes the full software environment." | -| 1 | | "IncludeAllCode" | "Research object includes all code." | -| 2 | | "IncludeAllOutput" | "Research object includes all outputs." | -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -============================================= bash cell | query all enforced policies ============================================== - -# What policies are enforced by the TRS? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX trov: - - SELECT DISTINCT ?trs ?policyName ?policyDescription - WHERE { - ?trs rdf:type trov:System . - ?trs trov:enforces ?policy . - ?policy rdfs:label ?policyName . - ?policy rdfs:comment ?policyDescription . - } ORDER BY ?trs ?policyName - -__END_QUERY__ - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -| | trs | policyName | policyDescription | -|---:|:---------------------------------------------|:-----------------------------------|:------------------------------------------------------------------------------| -| 0 | | "AllInputAvailableBeforeRuntime" | "Research system makes all inputs available prior to runtime." | -| 1 | | "DescribeSoftwareEnvironment" | "Research object describes the full software environment." | -| 2 | | "EvidenceRuntime" | "Research system shows evidence of runtime." | -| 3 | | "IncludeAllCode" | "Research object includes all code." | -| 4 | | "IncludeAllOutput" | "Research object includes all outputs." | -| 5 | | "PreventInterventionDuringRuntime" | "Research system prevents interaction with author of package during runtime." | -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -============================================= bash cell | query trs prevented policies ============================================= - -# What TRS policies are prevented by the TRS? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX trov: - - SELECT DISTINCT ?trs ?policyName ?policyDescription - WHERE { - ?trs rdf:type trov:System . - ?trs trov:prevents ?policy . - ?policy rdf:type trov:SystemPolicy . - ?policy rdfs:label ?policyName . - ?policy rdfs:comment ?policyDescription . - } ORDER BY ?trs ?policyName - -__END_QUERY__ - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -| | trs | policyName | policyDescription | -|---:|:---------------------------------------------|:--------------------------------|:------------------------------------------------------------| -| 0 | | "AllInputAvailableAfterRuntime" | "Research system makes all inputs available after runtime." | -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -============================================= bash cell | query tro prevented policies ============================================= - -# What TRO policies are prevented by the TRS? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX trov: - - SELECT DISTINCT ?trs ?policyName ?policyDescription - WHERE { - ?trs rdf:type trov:System . - ?trs trov:prevents ?policy . - ?policy rdf:type trov:ObjectPolicy . - ?policy rdfs:label ?policyName . - ?policy rdfs:comment ?policyDescription . - } ORDER BY ?trs ?policyName - -__END_QUERY__ - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -| | trs | policyName | policyDescription | -|---:|:---------------------------------------------|:------------------|:---------------------------------------| -| 0 | | "IncludeAllInput" | "Research object includes all inputs." | -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -============================================= bash cell | query all prevented policies ============================================= - -# What policies are prevented by the TRS? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX trov: - - SELECT DISTINCT ?trs ?policyName ?policyDescription - WHERE { - ?trs rdf:type trov:System . - ?trs trov:prevents ?policy . - ?policy rdfs:label ?policyName . - ?policy rdfs:comment ?policyDescription . - } ORDER BY ?trs ?policyName - -__END_QUERY__ - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -| | trs | policyName | policyDescription | -|---:|:---------------------------------------------|:--------------------------------|:------------------------------------------------------------| -| 0 | | "AllInputAvailableAfterRuntime" | "Research system makes all inputs available after runtime." | -| 1 | | "IncludeAllInput" | "Research object includes all inputs." | -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -================================================== bash cell | destroy kb dataset ================================================== - -geist destroy --dataset kb - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - diff --git a/demo/02-explorations/04-report-subclass-graph/base.gv b/demo/02-explorations/04-report-subclass-graph/base.gv deleted file mode 100644 index 430f9d9..0000000 --- a/demo/02-explorations/04-report-subclass-graph/base.gv +++ /dev/null @@ -1,5 +0,0 @@ -digraph {% block gv_graph_name %}Graph Name{% endblock %} { -rankdir="{% block gv_graph_direction%}Direction{% endblock %}" - -label="{% block gv_title %}Title{% endblock %}" -} \ No newline at end of file diff --git a/demo/02-explorations/04-report-subclass-graph/graphviz.jinja b/demo/02-explorations/04-report-subclass-graph/graphviz.jinja deleted file mode 100644 index e8310bd..0000000 --- a/demo/02-explorations/04-report-subclass-graph/graphviz.jinja +++ /dev/null @@ -1,34 +0,0 @@ -{% macro gv_graph(name, direction) -%} - digraph {{ name }} { - rankdir={{ direction }} -{%- endmacro %} - -{% macro gv_title(title) -%} - fontname=Courier; fontsize=12; labelloc=t - label="{{ title }}" -{%- endmacro %} - -{% macro gv_end() -%} - } -{%- endmacro %} - -{% macro gv_cluster(name) -%} - subgraph cluster_{{ name }} { label=""; color=white; penwidth=0 - subgraph cluster_{{ name }}_inner { label=""; color=white -{%- endmacro %} - -{% macro gv_cluster_end() -%} - }} -{%- endmacro %} - -{% macro gv_labeled_node(nodeID, nodeLabel) -%} - "{{ nodeID }}" [label="{{ nodeLabel }}"] -{%- endmacro %} - -{% macro gv_edge(tail, head) -%} - {{ tail }} -> {{ head }} -{%- endmacro %} - -{% macro gv_labeled_edge(tail, head, edgeLabel) -%} - "{{ tail }}" -> "{{ head }}" [label="{{ edgeLabel }}"] -{%- endmacro %} \ No newline at end of file diff --git a/demo/02-explorations/04-report-subclass-graph/products/img.gv b/demo/02-explorations/04-report-subclass-graph/products/img.gv deleted file mode 100644 index 51a1e8d..0000000 --- a/demo/02-explorations/04-report-subclass-graph/products/img.gv +++ /dev/null @@ -1,14 +0,0 @@ - - digraph subclass_vocab_graph { - rankdir=BT - fontname=Courier; fontsize=12; labelloc=t - label="Subclass Vocab Graph" - subgraph cluster_subclass { label=""; color=white; penwidth=0 - subgraph cluster_subclass_inner { label=""; color=white - node[shape=box style="filled" fillcolor="#CCFFCC" peripheries=1 fontname=Courier] - - "ObjectPolicy" -> "Policy" - "SystemPolicy" -> "Policy" - - }} - } \ No newline at end of file diff --git a/demo/02-explorations/04-report-subclass-graph/products/img.jpg b/demo/02-explorations/04-report-subclass-graph/products/img.jpg deleted file mode 100644 index 60101266a8e90b213343a1da746bb43b47216866..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11138 zcmeHtcRZZky7r^@8br+`OhO2v6J;X8C=o42mx8FHcaagIWONA39DL!sq-qT<)!PEQ~ z1bBIcre@|gwsv>z9UPs!ynTHA`~w2R9)?FmMm<6%J${m$ zlKS*n+Kb%0{FeoVMXyTB$}tt#%Bt$7=9c%ZZS5aA`abu685sOJG(0&qJ@b8bZhm1A zzrL}#wY{^uxBmkd2|)H2Sj4Y?0rm?n79uWEa&j_qsvo#WNd1UG#zIbUMuL)6)qv`@ z#|eJP2h?m=5}&_qq!ExZ#IfJ;?4{)ZOHZD~|A6)%$o?F#(Ek>)zXJQexP}3GG7{qC zk+A>}U}sFuDp=6` z3G}v7sjK1q3LNYxyq{Yd?y;KJLs`fEah|&Z1ws0B@!Ux1uzQ0XHqFOi{k2&4p3!qd zKglv`TuN(r<)5zIJL^z#Hbe5IEmU6zuaj28)EVV!qEWaf)U#+e;`xqa#mcbwp8 z?P%X{b0dk{$<&23cc4mS?^PI_^(y_C z@s#PsWui|WbI|hApz=J}D+hH2wf9;37c-ej4{o%i;wNRmztHW<26 zxnt-+W{qqi01vV1C-Fm=e&o8&3{=2E`%Ue$*7r})O+(WpWoaGhZLn&$XiTQa4G+G$ z%(~j1r||D7S9lc?Gfuk*uUNYS-GYgi`NG-x>RRM{do4#gk{X4n;;t&d3?-?R8`;yR z;J)Gv{=OTqlym9r`mAT=B^58;u-xvv$hC5ryB{W&N&sktN1;c>-c|6Km=unv`5p+T zWtrU5OB>nGLz_jaS+;{K#PNMXulr=WR zdyTWtY(dq@+ODfw(=meuy_b2OhhB+_y>KIsMTuX63E;LK-NQg8}|7p`cxUFjx+>-wzDbGDP{i) zYBWaTlFn^1o@gy{J5M7=o5s_zsKG?@w5x$BB@=blgDn+1emy$ip5|&2iuYY_^+{}b zd>cfE^neNO<@p>&fhI{O{L=dH*#T5Q4)m^U=WDaQ6Ht{2((^*G{3{>8VKI!?ov|;F zzy{(GxAp6D1?1K0`7JBOW-8I%xK`6E@%-$GZ+nfeeaoVBwrEL_bgW(r_pu1#T9sZA z>Zb2CZ?W@F(G1OfXqiIh%19#bnmlB1`IM_SpWe-$dqJXgwF5Utiq&J}Xz%#ak+xMm zSx@iCs+3>+`&pgljzyOs@=VXJL_QL$y?QP+DV zNH!AB(~^qi7Ax>__OWwF=yJZhLFLVQSEBq>O{6lVf&hOVDH52grOUUP&!X(z9QjV? zLs9*RnRi(*vugVjgw{T8(-{@ixRc^bi}FXYw@|l{j45zju3E{gJao=`5h8Euy1M0d zYJRXnwt5Tosu8mN#Kc)iUj%Nz`E{=I4&$mm$npyTpflBlPi1pj={ke2%pMEymT(ye zi`Lo*>*+I2w%r>vQ3nFXqtp+x&J5TzVDS|1tFSSS7Z;NBcqLgQ{SzloQ;rh=Woph= z5snicxsDCA$3q2HwF8~}T`p&Agb}$H1@FqS)_KI>-*p9U8CCTyuZb_a6+{MiMJtZf zPswr^#=etRFoY`PFv$%_k3w(YvRnABFvxD1z|Lt12X?!OW8!p9>lz>9 zDvTscGnlXNGCLcV)*281{**ETU@b)e<|}d-#joOEu>m=bgHoBgvuOk8!EP(g&r^hH z+ub;LEqmwU`CN_9}3eax^*0Crcr z%MH54CcDMvWC#E?N7&J*9s!`-K^*$V?_Mqktu7*VXJs;js*puTY1z^bJP2ni z-iwB+jgR@9F}RW1dX7GD;=XdWafS+)I2TUG8W?;mfvee;r1Pl~}6Mz}R-iD=C zrXvna9mlZWB?sBhRj<|AV6BttZ2Bbsj4-nnBBoczjF?_70XOjoB*_oA6P>$!E0MVAc)`WVHJ9$8L=+n2-^D2bQ~fg z(t1gK`*qOdvkN&JhMlmu*@-pdAx;=Ym4Gso>|EuG6@l*PaiC$qW;(tD&WW z6qx7rV?|{|&0gclnyU?+k9qKScho39ws~nD!yta+nYY_=di;t`cn$WzAX{oCAhxDJ z@Xd6bFlsz*iwhGpBF?yLzGQ}MGNSm>UZu%m3kopt8xv^Iem-F{btGq4i|IcU*tSrH z8dTONtsQ6!t}Asv6?^}^3b2o>dVguGyH$m`f6F46M-4OJJ#sK4ekWn<0uz~5rwAqJ zBGpUCep4~J!_g}93|>kdJwNR8Df?_~AnLUaTd4}yIepHi&N#-t>t6jVaa*$KC7F6H z<`wA-CHpGr-&=RA?U_Uv-jh!6YDjwZPqRl)PlHv+tjyOnMYohMGzasD@P$rNcZhrP zT*$@=f5u%;l}()tLR2vAKDA1ztp$7DeX{CuBzf|f%*f99v0bO<+JCY9Q>XOy*fEIx z^>hMoS*BLLjYg4Q8$ z`?+24E5`*N4_mE}8rhTJQ#W`|U0!5x=~X|;_pyN$(T;je00y6o?~|bP=!m;3KNm3= z1KJmL7H`R37jYs0Ti@l5L!6D82*CPzhw-gxs^e($`R8Sq+z+H+NFmgxgcnGnVE89Q zAsY3(t~_mEQm$DV&KsR1cb-!~AS)vOMTi31uKlD#uYo9rLLCrBqkMr=VLO<)W66Pf z&fTjYTpETirQ|&W*s>!tF2(P;<0ScGR)r<1ULDUCKTw(f7sX;msnx>SBEy zACzWTcCJfU&kI?s9ICdS2pp=Gcw{Nbfc{$QE&T0| z{hc7c9SH*l>Ir5b@k3~N)vnugVGEs)U(RUT?8tB@!u?fUrdsiXQYHoP(PYNp?TIe8 z$<*j;Ftm)Ql;J%RxKHsYureP%J6Rt|zHefMf84|{)j;|Qep}LsJK#XKy0BB8Y)*A4 zd5*80eQu0w_x?DOYdHZp;g8je)6C}_ukqWqNs?8Hj=8ltdPoJ*Cjwh6!F4zF2?&fh z(Z^8R!OfRLm6_I@i!c=t9eq3&-b3^f#U5y_;hbCaS%I{Prjikcw229-6G(HLHwNl# zz&|fM(8ce%ZxVt;x=~}Mi}2*ZQc!1jNgHJU1q3ExfvywWMNk0ya@q`k+f>>vSFIOk?44AMNrO8}~axPg^IqC^n-r$pt7g<&mTr2rD?EfN_zKsoek z(Ie~5R;a+3;ic>eszK5ao+9f}|2Bi{E4_0`48o&_bw&nJ6K~htXpVPwo(A`}8MT?& z*}-3aZML%`RfUt1#|gEv-|!}V_Hv;jP$QEv`?hP!_M3C<)2i=4{X2qn=6|e6bLvVf z`dwa@);j=s%K4|lLq)N|;>f0{`d*)>8y{k zhOg8Kdrgv&C=3Rw(}do%3JB1^6)r_$ie9BxcHg)kNqNBoWXLObtKF znciPSQMLKMXn<>^7NQYvr%)Xs_dkS55wjDP2G z1B$3rQiPX9&=6Y1=eV2~NMYoE@~j`<!Gpk7((JwY z7|CF~vFPF1qjX%T6_sgCgaSV{#Xggfm1@k+u)h84;VbJR%hXpUmmn(}f-#Ucr!gDk zuxzKQ%8iTso$#xz3ZfCp8o-+6apLr-iFqZqvK$w@Y?5jXdfZ~3_MphwlkV9?iKusUtnu(%2u^tJdi2x*3O3S?tBZ*A#A?a3zP2m8 zqrfJ6b4P#zOMf&Gcr2Y{L8`rSQss<)&EjsB`M`$wdyJ?1%l*r{G#My>!LPFruH!v5vynP;tS!U)j zAbI#S4@S$zFiKLBu{K1-|4?8BcK_zKUF?hrqE795+48Ww(j3)GM+^&w;t0{G(7>~J z%rUs7N4_`)*3e~L{WNQ$u_0M}I=|6i~kR|N~5=Sr!nc_Qe;&urf4|m;6=euqk@o8n1o)etu?2azLS$|Da(&%-C&aUUx0BqIrs|F8AP5(J0nt%U-y2r>N|@ zNKJHkjhSwzdJjM2jT1`*U_h~6>a$N|zqhELT4~(zns%DufZN6BE-e8e_qGrypQA%o zXso-9~BHL`Q>Ggg&?PZp^Yotb87LL!8SgxVSn7w~C$2 zers-VdBXar{=8DFcxKH>uzOp^_D&JDTDPtjckfF7mcpsItGM9p+!uK<*=`mO)lM6Q z_O=FiBm@mY8S5?H@2G&X20z$gbZQ)HKR)`bcr%6}--6e6hS?vjcBKM8_|QcF_dO-t zrpWB_a>ejt>!{FH)5KY5Y)i~G(SiBWfD~8Bwt4A%$+j@A4NL;9Pt937ZEsr#-!p>AzQPj$@#{Gd)TW zn|##{^QN~c#~X+f!CJ(e)PsK*TqZ;Z=6u5@nNj|xfX=+rF9%)nPlDHJ&}07Dug1;K z3bX(TnK2wdEVUwzIKHG#HteyN$M3I462&uncyMA@)DUl53(L8p;$54j*?{L|UtH~+ z%jl9F1s=&gXtG-hCbVn*Z); zh=rG;{4{ui$!$>j=rj1}b2<(YFSZFHnJ?|0eBIV_>(QNTW7a}yom+{ZF=3k4RmDML zJdbJ3=URw6Qv@X@SIf0^TeXl5A?hjLN=IbhWtRCRk%vLzAtdC})QSx^^p^(~p?Jpa!I=@yv2EdoIQ&7ssfLe^8J<9bpu4>GC2=k4RL1!&CS zc|qhMJG`LvtxO9OLzB9qWL`Lx(E9)&R0GOig`oE5TCO#+yLU`d-fP%jCeu3ruJZIv zkQH+A5m@u>4t$aezxpJ==aNVR-=dV$PK7le4l_{3{_rK;>qO54{&tmh^jaepbY^imQ%W&>y*WhqiD_K9znkbyMK5ivHr1e{=2I3BSRAD zOf-Tj;7dN+toT; zLSTZkyVtkzvwP{sR&{|MyCy|e4UcMdCgArw^>JT6i|1pKcpTI>y=Xem@M(~4EIQ}+ zpz_Ob$LY@Q>E|K_gk~(mBB)8YczxK;n~|mpD+KGcrG+}n?caYe8H93_p5j>dt~5>N zj9JlF6}!AF3}R88Bmhx28L}->zRV#-6jtGCH3I7Vxnv1>wxN}c?NhJovSaRvpqJn| z^C{JJaj!jHr~PV7&BtK+Jnn9_l2qEmxSfZypH=vn7_F|ydWqJ4kSDDHheF}}xA3n2ivM%<3rFk#P~HpUM%YQl_h4cpd*X}2W4AslE9M-cMiJU8GV z+36*i61zC^LV4k4tW9(8h*+jWLZc7g;-yhGlFPIT*B)e~%~6cUN5ar#u&l65f^`bD%nSR9&d`eiQaljw^?n;TKQZho$8C*Bbq zpc`_hB>JU^t%*!~Bi!<~23=mnDvcma;;JU4u^qWQPb9CmQjD=1^Fr2{H+UD7^SGlJ z?&!MIujt~l8CTz{t-+v5_TVt0iv{}uNy6xo-v;VK ztVXiUrOhCJ8lJX;l_bPy3A8Aw?5!lsS3*hP2LX#|SlTB#@LG4!O+;o!O?0@vOpEUy zV~H%y^z|Eb`#qtx$fi)F&?}+eOX=yuU)fs=-tREhnt@m{m*S7krc^AYVOu<=R8AMi zBAU77kfIY|W~C=RR0Y$yrAkA-w%#|CYMl2+1&Z)|eXr;uE8oYNB$Q|7f>}*-=qKY<3tS<|)&@am@bgJ^hA z-mkHVMe1xO3LWg-PFYmAF$`L*c+uS4a=eM%5SoZ1P0}z@)Dx^kM<7o)-+npJNNgMY z4cy`tH?`0Apf6R@UyTI6=p8c49s7{P2o+XcGMCm@Ms9O(R9iiimAwe&cq61ar5f_0 znCNZ(xk>$cPiXV@-;#7mpKgW)Yk{~?8BK74g{E!zi^?PpjnhSE5}#~>eb&q%zj|*= zLN6L^9ut6HtU4kG`Nac7mm*+^vA;EC-Q;`EN$u@Q*5h}_>A zPS8UUH+lll%>eza4OHDBR7xlCC*OP_w0(vEO#WmO62;a}exq~oi|Et;Ukz}OXz4n# zB(7j6HOM6^P`;|CB6l!@Kg>-Q^AR;WM+Q{2O9bbD{2+Km|01QHGKG#hTdTScoM9zz z083NPmFqBLnOLRS$i=%U(<#^tq0>My-OEF|g%;{;Bu=3yk6acLTJYzt7WGtH9Uf=&r?Cm7pc1;{pD- z4Cw19O3VXG!$61{wybHv>SLF^F=JaL!+QJg&{R@Ll=Lt>L<5_$+u(>pvOwp-+g>q#hw v?3h(o@c2HlBSLIchJ$cPj*yKV0+29%NVEc&{{7N_r}uw#A*r*G5QhE_@pcu@ diff --git a/demo/02-explorations/04-report-subclass-graph/products/img.svg b/demo/02-explorations/04-report-subclass-graph/products/img.svg deleted file mode 100644 index f325863..0000000 --- a/demo/02-explorations/04-report-subclass-graph/products/img.svg +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - -subclass_vocab_graph - -Subclass Vocab Graph - -cluster_subclass - - - -cluster_subclass_inner - - - - -ObjectPolicy - -ObjectPolicy - - - -Policy - -Policy - - - -ObjectPolicy->Policy - - - - - -SystemPolicy - -SystemPolicy - - - -SystemPolicy->Policy - - - - - diff --git a/demo/02-explorations/04-report-subclass-graph/report.html b/demo/02-explorations/04-report-subclass-graph/report.html deleted file mode 100644 index 62598e3..0000000 --- a/demo/02-explorations/04-report-subclass-graph/report.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - Geist Report - - -

Geist Report

-

This report shows part of the vocabulary of TRACE. -

1. Graph Demo

-

(1) PNG

- -

(2) SVG

- -

(3) GV

-

-    digraph subclass_vocab_graph {
-    rankdir=BT
-    fontname=Courier; fontsize=12; labelloc=t
-    label="Subclass Vocab Graph"
-    subgraph cluster_subclass { label=""; color=white; penwidth=0
-    subgraph cluster_subclass_inner { label=""; color=white
-            node[shape=box style="filled" fillcolor="#CCFFCC" peripheries=1 fontname=Courier]
-                            
-    "ObjectPolicy" -> "Policy"                            
-    "SystemPolicy" -> "Policy"            
-            
-    }}            
-    }        
-

2. Table Demo

- - - - - -
ChildLabelParentLabel
"ObjectPolicy""Policy"
"SystemPolicy""Policy"
- - diff --git a/demo/02-explorations/04-report-subclass-graph/run.sh b/demo/02-explorations/04-report-subclass-graph/run.sh deleted file mode 100644 index e65fa50..0000000 --- a/demo/02-explorations/04-report-subclass-graph/run.sh +++ /dev/null @@ -1,203 +0,0 @@ -#!/usr/bin/env bash - -# paths to data files -COMMON=../common - -# ------------------------------------------------------------------------------ - -bash_cell import jsonld << END_CELL - -# Import TRO and TRS as JSON-LD and export as N-TRIPLES -geist destroy --dataset kb --quiet -geist create --dataset kb --inputformat json-ld --inputfile ${COMMON}/trace-vocab.jsonld --infer owl - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell export ntriples << END_CELL - -# Export kb dataset as N-TRIPLES -geist export --dataset kb --outputformat nt | sort | grep trov - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell query_subclass_vocab << END_CELL - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX rdfs: - - SELECT DISTINCT ?ChildLabel ?ParentLabel - WHERE { - ?ParentClass rdf:type rdfs:Class ; - rdfs:label ?ParentLabel . - - ?ChildClass rdfs:subClassOf ?ParentClass ; - rdf:type rdfs:Class ; - rdfs:label ?ChildLabel . - - FILTER (?ChildLabel != ?ParentLabel) - } - ORDER BY ?ChildLabel ?ParentLabel - -__END_QUERY__ - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell test_jinja_include << END_CELL - -geist report << END_TEMPLATE - - {% include "base.gv" %} - -END_TEMPLATE - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell test_jinja_extends << END_CELL - -geist report << END_TEMPLATE - - {% extends "base.gv" %} - {% block gv_graph_name %}subclass_vocab_graph{% endblock %} - {% block gv_title %}Subclass Vacab Graph{% endblock %} - -END_TEMPLATE - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell visualize_subclass_vocab_using_jinja_import << END_CELL - -geist report << END_TEMPLATE - - {% import "graphviz.jinja" as gv_macros %} - {% query isfilepath=False as query_subclass_vocab_str %} - SELECT DISTINCT ?ChildLabel ?ParentLabel - WHERE { - ?ParentClass rdf:type rdfs:Class ; - rdfs:label ?ParentLabel . - - ?ChildClass rdfs:subClassOf ?ParentClass ; - rdf:type rdfs:Class ; - rdfs:label ?ChildLabel . - - FILTER (?ChildLabel != ?ParentLabel) - } - ORDER BY ?ChildLabel ?ParentLabel - {% endquery %} - {% set query_subclass_vocab = query_subclass_vocab_str | json2df %} - - {{ gv_macros.gv_graph("subclass_vocab_graph", "BT") }} - {{ gv_macros.gv_title("Subclass Vacab Graph") }} - {{ gv_macros.gv_cluster("subclass") }} - - node[shape=box style="filled" fillcolor="#CCFFCC" peripheries=1 fontname=Courier] - {% for _, row in query_subclass_vocab.iterrows() %} - {{ gv_macros.gv_edge(row["ChildLabel"], row["ParentLabel"]) }} - {% endfor %} - - {{ gv_macros.gv_cluster_end() }} - {{ gv_macros.gv_end() }} - -END_TEMPLATE - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell visualize_subclass_vocab_using_geist << END_CELL - -geist report << END_TEMPLATE - -{%- use "graphviz.geist" %} -{%- query isfilepath=False as query_subclass_vocab_str %} - SELECT DISTINCT ?ChildLabel ?ParentLabel - WHERE { - ?ParentClass rdf:type rdfs:Class ; - rdfs:label ?ParentLabel . - - ?ChildClass rdfs:subClassOf ?ParentClass ; - rdf:type rdfs:Class ; - rdfs:label ?ChildLabel . - - FILTER (?ChildLabel != ?ParentLabel) - } - ORDER BY ?ChildLabel ?ParentLabel -{% endquery %} -{%- set query_subclass_vocab = query_subclass_vocab_str | json2df %} - -{%- html "report.html" %} -{%- head "Geist Report" %} - - -

Geist Report

-

This report shows part of the vocabulary of TRACE. -

1. Graph Demo

-

(1) PNG

- {% img src="products/img.jpg" %} - {%- gv_graph "subclass_vocab_graph", "BT" %} - {%- gv_title "Subclass Vocab Graph" %} - {%- gv_cluster "subclass" %} - - node[shape=box style="filled" fillcolor="#CCFFCC" peripheries=1 fontname=Courier] - {% for _, row in query_subclass_vocab.iterrows() %} - {% gv_edge row["ChildLabel"], row["ParentLabel"] %} - {% endfor %} - - {% gv_cluster_end %} - {% gv_end %} - {% endimg %} - -

(2) SVG

- {% img src="products/img.svg" %} - {%- gv_graph "subclass_vocab_graph", "BT" %} - {%- gv_title "Subclass Vocab Graph" %} - {%- gv_cluster "subclass" %} - - node[shape=box style="filled" fillcolor="#CCFFCC" peripheries=1 fontname=Courier] - {% for _, row in query_subclass_vocab.iterrows() %} - {% gv_edge row["ChildLabel"], row["ParentLabel"] %} - {% endfor %} - - {% gv_cluster_end %} - {% gv_end %} - {% endimg %} - -

(3) GV

- {% img src="products/img.gv" %} - {%- gv_graph "subclass_vocab_graph", "BT" %} - {%- gv_title "Subclass Vocab Graph" %} - {%- gv_cluster "subclass" %} - - node[shape=box style="filled" fillcolor="#CCFFCC" peripheries=1 fontname=Courier] - {% for _, row in query_subclass_vocab.iterrows() %} - {% gv_edge row["ChildLabel"], row["ParentLabel"] %} - {% endfor %} - - {% gv_cluster_end %} - {% gv_end %} - {% endimg %} - -

2. Table Demo

- {%- table %} - {{ query_subclass_vocab_str }} - {% endtable %} - -{% endhtml %} -{%- destroy %} - -END_TEMPLATE - -END_CELL - -# ------------------------------------------------------------------------------ diff --git a/demo/02-explorations/04-report-subclass-graph/run.txt b/demo/02-explorations/04-report-subclass-graph/run.txt deleted file mode 100644 index b9e99b2..0000000 --- a/demo/02-explorations/04-report-subclass-graph/run.txt +++ /dev/null @@ -1,349 +0,0 @@ -======================================================== bash cell | import ======================================================== - -# Import TRO and TRS as JSON-LD and export as N-TRIPLES -geist destroy --dataset kb --quiet -geist create --dataset kb --inputformat json-ld --inputfile ../common/trace-vocab.jsonld --infer owl - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -======================================================== bash cell | export ======================================================== - -# Export kb dataset as N-TRIPLES -geist export --dataset kb --outputformat nt | sort | grep trov - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- - . - . - "Research system makes all inputs available after runtime." . - "AllInputAvailableAfterRuntime" . - . - . - . - "Research system makes all inputs available prior to runtime." . - "AllInputAvailableBeforeRuntime" . - . - . - . - "Research object describes the full software environment." . - "DescribeSoftwareEnvironment" . - . - . - . - "Research system shows evidence of runtime." . - "EvidenceRuntime" . - . - . - . - "Research object includes all code." . - "IncludeAllCode" . - . - . - . - "Research object includes all inputs." . - "IncludeAllInput" . - . - . - . - "Research object includes all outputs." . - "IncludeAllOutput" . - . - . - "ObjectPolicy" . - . - . - . - "Policy" . - . - . - . - "Research system prevents internet access during execution." . - "PreventInternetAccess" . - . - . - . - "Research system prevents interaction with author prior to runtime." . - "PreventInterventionBeforeRuntime" . - . - . - . - "Research system prevents interaction with author of package during runtime." . - "PreventInterventionDuringRuntime" . - . - . - "SystemPolicy" . - . - . - . - . - "Research system tracks intermediate steps." . - "TrackIntermediateSteps" . - . - . - "enforces" . - . - . - . -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -================================================= bash cell | query_subclass_vocab ================================================= - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX rdfs: - - SELECT DISTINCT ?ChildLabel ?ParentLabel - WHERE { - ?ParentClass rdf:type rdfs:Class ; - rdfs:label ?ParentLabel . - - ?ChildClass rdfs:subClassOf ?ParentClass ; - rdf:type rdfs:Class ; - rdfs:label ?ChildLabel . - - FILTER (?ChildLabel != ?ParentLabel) - } - ORDER BY ?ChildLabel ?ParentLabel - -__END_QUERY__ - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -| | ChildLabel | ParentLabel | -|---:|:---------------|:--------------| -| 0 | "ObjectPolicy" | "Policy" | -| 1 | "SystemPolicy" | "Policy" | -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -================================================== bash cell | test_jinja_include ================================================== - -geist report << END_TEMPLATE - - {% include "base.gv" %} - -END_TEMPLATE - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- - - digraph Graph Name { -rankdir="Direction" - -label="Title" -} -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -================================================== bash cell | test_jinja_extends ================================================== - -geist report << END_TEMPLATE - - {% extends "base.gv" %} - {% block gv_graph_name %}subclass_vocab_graph{% endblock %} - {% block gv_title %}Subclass Vacab Graph{% endblock %} - -END_TEMPLATE - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- - - digraph subclass_vocab_graph { -rankdir="Direction" - -label="Subclass Vacab Graph" -} -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -===================================== bash cell | visualize_subclass_vocab_using_jinja_import ====================================== - -geist report << END_TEMPLATE - - {% import "graphviz.jinja" as gv_macros %} - {% query isfilepath=False as query_subclass_vocab_str %} - SELECT DISTINCT ?ChildLabel ?ParentLabel - WHERE { - ?ParentClass rdf:type rdfs:Class ; - rdfs:label ?ParentLabel . - - ?ChildClass rdfs:subClassOf ?ParentClass ; - rdf:type rdfs:Class ; - rdfs:label ?ChildLabel . - - FILTER (?ChildLabel != ?ParentLabel) - } - ORDER BY ?ChildLabel ?ParentLabel - {% endquery %} - {% set query_subclass_vocab = query_subclass_vocab_str | json2df %} - - {{ gv_macros.gv_graph("subclass_vocab_graph", "BT") }} - {{ gv_macros.gv_title("Subclass Vacab Graph") }} - {{ gv_macros.gv_cluster("subclass") }} - - node[shape=box style="filled" fillcolor="#CCFFCC" peripheries=1 fontname=Courier] - {% for _, row in query_subclass_vocab.iterrows() %} - {{ gv_macros.gv_edge(row["ChildLabel"], row["ParentLabel"]) }} - {% endfor %} - - {{ gv_macros.gv_cluster_end() }} - {{ gv_macros.gv_end() }} - -END_TEMPLATE - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- - - - digraph subclass_vocab_graph { - rankdir=BT - fontname=Courier; fontsize=12; labelloc=t - label="Subclass Vacab Graph" - subgraph cluster_subclass { label=""; color=white; penwidth=0 - subgraph cluster_subclass_inner { label=""; color=white - - node[shape=box style="filled" fillcolor="#CCFFCC" peripheries=1 fontname=Courier] - "ObjectPolicy" -> "Policy" - "SystemPolicy" -> "Policy" - - }} - } - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -========================================= bash cell | visualize_subclass_vocab_using_geist ========================================= - -geist report << END_TEMPLATE - -{%- use "graphviz.geist" %} -{%- query isfilepath=False as query_subclass_vocab_str %} - SELECT DISTINCT ?ChildLabel ?ParentLabel - WHERE { - ?ParentClass rdf:type rdfs:Class ; - rdfs:label ?ParentLabel . - - ?ChildClass rdfs:subClassOf ?ParentClass ; - rdf:type rdfs:Class ; - rdfs:label ?ChildLabel . - - FILTER (?ChildLabel != ?ParentLabel) - } - ORDER BY ?ChildLabel ?ParentLabel -{% endquery %} -{%- set query_subclass_vocab = query_subclass_vocab_str | json2df %} - -{%- html "report.html" %} -{%- head "Geist Report" %} - - -

Geist Report

-

This report shows part of the vocabulary of TRACE. -

1. Graph Demo

-

(1) PNG

- {% img src="products/img.jpg" %} - {%- gv_graph "subclass_vocab_graph", "BT" %} - {%- gv_title "Subclass Vocab Graph" %} - {%- gv_cluster "subclass" %} - - node[shape=box style="filled" fillcolor="#CCFFCC" peripheries=1 fontname=Courier] - {% for _, row in query_subclass_vocab.iterrows() %} - {% gv_edge row["ChildLabel"], row["ParentLabel"] %} - {% endfor %} - - {% gv_cluster_end %} - {% gv_end %} - {% endimg %} - -

(2) SVG

- {% img src="products/img.svg" %} - {%- gv_graph "subclass_vocab_graph", "BT" %} - {%- gv_title "Subclass Vocab Graph" %} - {%- gv_cluster "subclass" %} - - node[shape=box style="filled" fillcolor="#CCFFCC" peripheries=1 fontname=Courier] - {% for _, row in query_subclass_vocab.iterrows() %} - {% gv_edge row["ChildLabel"], row["ParentLabel"] %} - {% endfor %} - - {% gv_cluster_end %} - {% gv_end %} - {% endimg %} - -

(3) GV

- {% img src="products/img.gv" %} - {%- gv_graph "subclass_vocab_graph", "BT" %} - {%- gv_title "Subclass Vocab Graph" %} - {%- gv_cluster "subclass" %} - - node[shape=box style="filled" fillcolor="#CCFFCC" peripheries=1 fontname=Courier] - {% for _, row in query_subclass_vocab.iterrows() %} - {% gv_edge row["ChildLabel"], row["ParentLabel"] %} - {% endfor %} - - {% gv_cluster_end %} - {% gv_end %} - {% endimg %} - -

2. Table Demo

- {%- table %} - {{ query_subclass_vocab_str }} - {% endtable %} - -{% endhtml %} -{%- destroy %} - -END_TEMPLATE - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- - - - - - - - - - Geist Report - - -

Geist Report

-

This report shows part of the vocabulary of TRACE. -

1. Graph Demo

-

(1) PNG

- -

(2) SVG

- -

(3) GV

-

-    digraph subclass_vocab_graph {
-    rankdir=BT
-    fontname=Courier; fontsize=12; labelloc=t
-    label="Subclass Vocab Graph"
-    subgraph cluster_subclass { label=""; color=white; penwidth=0
-    subgraph cluster_subclass_inner { label=""; color=white
-            node[shape=box style="filled" fillcolor="#CCFFCC" peripheries=1 fontname=Courier]
-                            
-    "ObjectPolicy" -> "Policy"                            
-    "SystemPolicy" -> "Policy"            
-            
-    }}            
-    }        
-

2. Table Demo

- - - - - -
ChildLabelParentLabel
"ObjectPolicy""Policy"
"SystemPolicy""Policy"
- - - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - diff --git a/demo/02-explorations/06-gpg-runtime-demos/Makefile b/demo/02-explorations/04-timestamp/Makefile similarity index 100% rename from demo/02-explorations/06-gpg-runtime-demos/Makefile rename to demo/02-explorations/04-timestamp/Makefile diff --git a/demo/02-explorations/04-timestamp/data/digest.yaml b/demo/02-explorations/04-timestamp/data/digest.yaml new file mode 100644 index 0000000..31c1240 --- /dev/null +++ b/demo/02-explorations/04-timestamp/data/digest.yaml @@ -0,0 +1,2 @@ +tro-declaration: 71fd13607e8cea0a883ebad45037044d4909fb21959ec30c6687dcf86d077cf8 +trs-signature": 9fb5dd0a2b9afdf4071b43558848a70101c91d3b1eab61f6a369740c36c2ea8d diff --git a/demo/02-explorations/04-timestamp/data/file.tsq b/demo/02-explorations/04-timestamp/data/file.tsq new file mode 100644 index 0000000000000000000000000000000000000000..5807c83c52342b7fcc9e6ecbfd59fa39a7fb4d5a GIT binary patch literal 91 zcmV-h0HpsgSpoq8Fi|iK1_@w>NC9O71OfvE00cmYS9-sxIJ@h0B*kv9IUj%h<(0t+ xx2+l+p?e8{GIuLisp@NedKp;^h)6L|)T+&($JUx8y;W)du5w9_iE>2&0sm#VBc1>N literal 0 HcmV?d00001 diff --git a/demo/02-explorations/10-timestamp/data/signature.asc b/demo/02-explorations/04-timestamp/data/signature.asc similarity index 100% rename from demo/02-explorations/10-timestamp/data/signature.asc rename to demo/02-explorations/04-timestamp/data/signature.asc diff --git a/demo/02-explorations/10-timestamp/run.sh b/demo/02-explorations/04-timestamp/run.sh similarity index 95% rename from demo/02-explorations/10-timestamp/run.sh rename to demo/02-explorations/04-timestamp/run.sh index 1e92786..77ab723 100644 --- a/demo/02-explorations/10-timestamp/run.sh +++ b/demo/02-explorations/04-timestamp/run.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash CERTIFICATE_DIR=../common/certificate -TRO_DECLARATION_FILE=../common/tro-01-from-minimal-trs.jsonld +TRO_DECLARATION_FILE=../common/tro/tro.jsonld TRS_SIGNATURE_FILE=data/signature.asc DIGEST_FILE=data/digest.yaml TSQ_FILE=data/file.tsq diff --git a/demo/02-explorations/10-timestamp/run.txt b/demo/02-explorations/04-timestamp/run.txt similarity index 96% rename from demo/02-explorations/10-timestamp/run.txt rename to demo/02-explorations/04-timestamp/run.txt index 44531f6..1731e59 100644 --- a/demo/02-explorations/10-timestamp/run.txt +++ b/demo/02-explorations/04-timestamp/run.txt @@ -1,7 +1,7 @@ ================================ bash cell | Compute a digest for tro declaration and trs signature ================================ cat > data/digest.yaml << EOF -tro-declaration: c7ef4301a9f9978c282affaa69a32971d991d4b5e21501bd3fd6241c02823c2c +tro-declaration: 71fd13607e8cea0a883ebad45037044d4909fb21959ec30c6687dcf86d077cf8 trs-signature": 9fb5dd0a2b9afdf4071b43558848a70101c91d3b1eab61f6a369740c36c2ea8d EOF diff --git a/demo/02-explorations/05-report-policies/run.sh b/demo/02-explorations/05-report-policies/run.sh deleted file mode 100644 index a334054..0000000 --- a/demo/02-explorations/05-report-policies/run.sh +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/env bash - -# paths to data files -COMMON=../common - -# ------------------------------------------------------------------------------ - -bash_cell 'import jsonld' << END_CELL - -# Import TRO and TRS as JSON-LD and export as N-TRIPLES -geist destroy --dataset kb --quiet -geist create --dataset kb --inputformat json-ld --inputfile ${COMMON}/trace-vocab.jsonld --infer owl - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell trs_policies << END_CELL - -# What are all of the policies a TRS could enforce? - -geist query --dataset kb << END_QUERY - - PREFIX rdf: - PREFIX rdfs: - PREFIX trov: - - SELECT DISTINCT ?trsPolicyName ?trsPolicyDescription - WHERE { - ?trsPolicy rdf:type trov:SystemPolicy . - ?trsPolicy rdfs:label ?trsPolicyName . - ?trsPolicy rdfs:comment ?trsPolicyDescription . - } ORDER BY ?trsPolicyName - -END_QUERY - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell tro_policies << END_CELL - -# What are all of he policies a TRO could enforce? - -geist query --dataset kb << END_QUERY - - PREFIX rdf: - PREFIX rdfs: - PREFIX trov: - - SELECT DISTINCT ?troPolicyName ?troPolicyDescription - WHERE { - ?troPolicy rdf:type trov:ObjectPolicy . - ?troPolicy rdfs:label ?troPolicyName . - ?troPolicy rdfs:comment ?troPolicyDescription . - } ORDER BY ?troPolicyName - -END_QUERY - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell report_trs_and_tro_policies << END_CELL - -# A single report that gives the results of two queries of the vocabulary: -# 1) What are all of the policies a TRS could enforce? -# 2) What are all of the policies a TRO could enforce? - -geist report << END_TEMPLATE - - {% query isfilepath=False as trs_policies_str %} - SELECT DISTINCT ?trsPolicyName ?trsPolicyDescription - WHERE { - ?trsPolicy rdf:type trov:SystemPolicy . - ?trsPolicy rdfs:label ?trsPolicyName . - ?trsPolicy rdfs:comment ?trsPolicyDescription . - } ORDER BY ?trsPolicyName - {% endquery %} - {% set trs_policies = trs_policies_str | json2df %} - {% query isfilepath=False as tro_policies_str %} - SELECT DISTINCT ?troPolicyName ?troPolicyDescription - WHERE { - ?troPolicy rdf:type trov:ObjectPolicy . - ?troPolicy rdfs:label ?troPolicyName . - ?troPolicy rdfs:comment ?troPolicyDescription . - } ORDER BY ?troPolicyName - {% endquery %} - {% set tro_policies = tro_policies_str | json2df %} - - List of policies that a TRS could enforce: - ========================================== - {% for _, row in trs_policies.iterrows() -%} - {{ row["trsPolicyName"] }} : {{ row["trsPolicyDescription"] }} - {% endfor %} - - List of policies that a TRO could enforce: - ========================================== - {% for _, row in tro_policies.iterrows() -%} - {{ row["troPolicyName"] }} : {{ row["troPolicyDescription"] }} - {% endfor %} - - {% destroy %} - -END_TEMPLATE - -END_CELL - -# ------------------------------------------------------------------------------ diff --git a/demo/02-explorations/05-report-policies/run.txt b/demo/02-explorations/05-report-policies/run.txt deleted file mode 100644 index 646092b..0000000 --- a/demo/02-explorations/05-report-policies/run.txt +++ /dev/null @@ -1,138 +0,0 @@ -==================================================== bash cell | import jsonld ===================================================== - -# Import TRO and TRS as JSON-LD and export as N-TRIPLES -geist destroy --dataset kb --quiet -geist create --dataset kb --inputformat json-ld --inputfile ../common/trace-vocab.jsonld --infer owl - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -===================================================== bash cell | trs_policies ===================================================== - -# What are all of the policies a TRS could enforce? - -geist query --dataset kb << END_QUERY - - PREFIX rdf: - PREFIX rdfs: - PREFIX trov: - - SELECT DISTINCT ?trsPolicyName ?trsPolicyDescription - WHERE { - ?trsPolicy rdf:type trov:SystemPolicy . - ?trsPolicy rdfs:label ?trsPolicyName . - ?trsPolicy rdfs:comment ?trsPolicyDescription . - } ORDER BY ?trsPolicyName - -END_QUERY - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -| | trsPolicyName | trsPolicyDescription | -|---:|:-----------------------------------|:------------------------------------------------------------------------------| -| 0 | "AllInputAvailableAfterRuntime" | "Research system makes all inputs available after runtime." | -| 1 | "AllInputAvailableBeforeRuntime" | "Research system makes all inputs available prior to runtime." | -| 2 | "EvidenceRuntime" | "Research system shows evidence of runtime." | -| 3 | "PreventInternetAccess" | "Research system prevents internet access during execution." | -| 4 | "PreventInterventionBeforeRuntime" | "Research system prevents interaction with author prior to runtime." | -| 5 | "PreventInterventionDuringRuntime" | "Research system prevents interaction with author of package during runtime." | -| 6 | "TrackIntermediateSteps" | "Research system tracks intermediate steps." | -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -===================================================== bash cell | tro_policies ===================================================== - -# What are all of he policies a TRO could enforce? - -geist query --dataset kb << END_QUERY - - PREFIX rdf: - PREFIX rdfs: - PREFIX trov: - - SELECT DISTINCT ?troPolicyName ?troPolicyDescription - WHERE { - ?troPolicy rdf:type trov:ObjectPolicy . - ?troPolicy rdfs:label ?troPolicyName . - ?troPolicy rdfs:comment ?troPolicyDescription . - } ORDER BY ?troPolicyName - -END_QUERY - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -| | troPolicyName | troPolicyDescription | -|---:|:------------------------------|:-----------------------------------------------------------| -| 0 | "DescribeSoftwareEnvironment" | "Research object describes the full software environment." | -| 1 | "IncludeAllCode" | "Research object includes all code." | -| 2 | "IncludeAllInput" | "Research object includes all inputs." | -| 3 | "IncludeAllOutput" | "Research object includes all outputs." | -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -============================================= bash cell | report_trs_and_tro_policies ============================================== - -# A single report that gives the results of two queries of the vocabulary: -# 1) What are all of the policies a TRS could enforce? -# 2) What are all of the policies a TRO could enforce? - -geist report << END_TEMPLATE - - {% query isfilepath=False as trs_policies_str %} - SELECT DISTINCT ?trsPolicyName ?trsPolicyDescription - WHERE { - ?trsPolicy rdf:type trov:SystemPolicy . - ?trsPolicy rdfs:label ?trsPolicyName . - ?trsPolicy rdfs:comment ?trsPolicyDescription . - } ORDER BY ?trsPolicyName - {% endquery %} - {% set trs_policies = trs_policies_str | json2df %} - {% query isfilepath=False as tro_policies_str %} - SELECT DISTINCT ?troPolicyName ?troPolicyDescription - WHERE { - ?troPolicy rdf:type trov:ObjectPolicy . - ?troPolicy rdfs:label ?troPolicyName . - ?troPolicy rdfs:comment ?troPolicyDescription . - } ORDER BY ?troPolicyName - {% endquery %} - {% set tro_policies = tro_policies_str | json2df %} - - List of policies that a TRS could enforce: - ========================================== - {% for _, row in trs_policies.iterrows() -%} - {{ row["trsPolicyName"] }} : {{ row["trsPolicyDescription"] }} - {% endfor %} - - List of policies that a TRO could enforce: - ========================================== - {% for _, row in tro_policies.iterrows() -%} - {{ row["troPolicyName"] }} : {{ row["troPolicyDescription"] }} - {% endfor %} - - {% destroy %} - -END_TEMPLATE - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- - - - List of policies that a TRS could enforce: - ========================================== - "AllInputAvailableAfterRuntime" : "Research system makes all inputs available after runtime." - "AllInputAvailableBeforeRuntime" : "Research system makes all inputs available prior to runtime." - "EvidenceRuntime" : "Research system shows evidence of runtime." - "PreventInternetAccess" : "Research system prevents internet access during execution." - "PreventInterventionBeforeRuntime" : "Research system prevents interaction with author prior to runtime." - "PreventInterventionDuringRuntime" : "Research system prevents interaction with author of package during runtime." - "TrackIntermediateSteps" : "Research system tracks intermediate steps." - - List of policies that a TRO could enforce: - ========================================== - "DescribeSoftwareEnvironment" : "Research object describes the full software environment." - "IncludeAllCode" : "Research object includes all code." - "IncludeAllInput" : "Research object includes all inputs." - "IncludeAllOutput" : "Research object includes all outputs." - - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - diff --git a/demo/02-explorations/07-gpg-api-demos/01-generate-key/Makefile b/demo/02-explorations/05-validate-tro-declaration/Makefile similarity index 100% rename from demo/02-explorations/07-gpg-api-demos/01-generate-key/Makefile rename to demo/02-explorations/05-validate-tro-declaration/Makefile diff --git a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/data/mappings.json b/demo/02-explorations/05-validate-tro-declaration/data/mappings.json similarity index 78% rename from demo/02-explorations/12-validate-jsonld/07-report-rdfvr/data/mappings.json rename to demo/02-explorations/05-validate-tro-declaration/data/mappings.json index ba3993b..5cc7ae4 100644 --- a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/data/mappings.json +++ b/demo/02-explorations/05-validate-tro-declaration/data/mappings.json @@ -2,5 +2,5 @@ "http://www.w3.org/1999/02/22-rdf-syntax-ns#": "rdf#", "http://www.w3.org/2000/01/rdf-schema#": "rdfs#", "https://w3id.org/trace/2023/05/trov#": "trov#", - "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/": "" + "https://github.com/transparency-certified/trace-model/tree/master/demo/02-explorations/05-validate-tro-declaration/": "" } \ No newline at end of file diff --git a/demo/02-explorations/12-validate-jsonld/03-pyshacl/data/tro.schema.ttl b/demo/02-explorations/05-validate-tro-declaration/data/tro.schema.ttl similarity index 100% rename from demo/02-explorations/12-validate-jsonld/03-pyshacl/data/tro.schema.ttl rename to demo/02-explorations/05-validate-tro-declaration/data/tro.schema.ttl diff --git a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/data/tro1.jsonld b/demo/02-explorations/05-validate-tro-declaration/data/tro1.jsonld similarity index 95% rename from demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/data/tro1.jsonld rename to demo/02-explorations/05-validate-tro-declaration/data/tro1.jsonld index 48ffe6a..6f3e9b5 100644 --- a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/data/tro1.jsonld +++ b/demo/02-explorations/05-validate-tro-declaration/data/tro1.jsonld @@ -3,7 +3,7 @@ "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdfs": "http://www.w3.org/2000/01/rdf-schema#", "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" + "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/02-explorations/05-validate-tro-declaration/" }], "@graph": [ diff --git a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/data/tro2.jsonld b/demo/02-explorations/05-validate-tro-declaration/data/tro2.jsonld similarity index 98% rename from demo/02-explorations/12-validate-jsonld/07-report-rdfvr/data/tro2.jsonld rename to demo/02-explorations/05-validate-tro-declaration/data/tro2.jsonld index 1e90c36..d4b72f7 100644 --- a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/data/tro2.jsonld +++ b/demo/02-explorations/05-validate-tro-declaration/data/tro2.jsonld @@ -3,7 +3,7 @@ "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdfs": "http://www.w3.org/2000/01/rdf-schema#", "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" + "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/02-explorations/05-validate-tro-declaration/" }], "@graph": [ diff --git a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/data/tro3.jsonld b/demo/02-explorations/05-validate-tro-declaration/data/tro3.jsonld similarity index 98% rename from demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/data/tro3.jsonld rename to demo/02-explorations/05-validate-tro-declaration/data/tro3.jsonld index f0d6d8e..6c975b8 100644 --- a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/data/tro3.jsonld +++ b/demo/02-explorations/05-validate-tro-declaration/data/tro3.jsonld @@ -3,7 +3,7 @@ "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdfs": "http://www.w3.org/2000/01/rdf-schema#", "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" + "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/02-explorations/05-validate-tro-declaration/" }], "@graph": [ diff --git a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/data/tro4.jsonld b/demo/02-explorations/05-validate-tro-declaration/data/tro4.jsonld similarity index 94% rename from demo/02-explorations/12-validate-jsonld/07-report-rdfvr/data/tro4.jsonld rename to demo/02-explorations/05-validate-tro-declaration/data/tro4.jsonld index 9c80332..ba542f4 100644 --- a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/data/tro4.jsonld +++ b/demo/02-explorations/05-validate-tro-declaration/data/tro4.jsonld @@ -3,7 +3,7 @@ "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdfs": "http://www.w3.org/2000/01/rdf-schema#", "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" + "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/02-explorations/05-validate-tro-declaration/" }], "@graph": [ diff --git a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/data/tro5.jsonld b/demo/02-explorations/05-validate-tro-declaration/data/tro5.jsonld similarity index 95% rename from demo/02-explorations/12-validate-jsonld/07-report-rdfvr/data/tro5.jsonld rename to demo/02-explorations/05-validate-tro-declaration/data/tro5.jsonld index 4f374ab..f74fd97 100644 --- a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/data/tro5.jsonld +++ b/demo/02-explorations/05-validate-tro-declaration/data/tro5.jsonld @@ -3,7 +3,7 @@ "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdfs": "http://www.w3.org/2000/01/rdf-schema#", "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" + "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/02-explorations/05-validate-tro-declaration/" }], "@graph": [ diff --git a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/products/tro1.gv b/demo/02-explorations/05-validate-tro-declaration/products/tro1.gv similarity index 100% rename from demo/02-explorations/12-validate-jsonld/07-report-rdfvr/products/tro1.gv rename to demo/02-explorations/05-validate-tro-declaration/products/tro1.gv diff --git a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/products/tro1.png b/demo/02-explorations/05-validate-tro-declaration/products/tro1.png similarity index 100% rename from demo/02-explorations/12-validate-jsonld/07-report-rdfvr/products/tro1.png rename to demo/02-explorations/05-validate-tro-declaration/products/tro1.png diff --git a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro2.gv b/demo/02-explorations/05-validate-tro-declaration/products/tro2.gv similarity index 100% rename from demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro2.gv rename to demo/02-explorations/05-validate-tro-declaration/products/tro2.gv diff --git a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/products/tro2.png b/demo/02-explorations/05-validate-tro-declaration/products/tro2.png similarity index 100% rename from demo/02-explorations/12-validate-jsonld/07-report-rdfvr/products/tro2.png rename to demo/02-explorations/05-validate-tro-declaration/products/tro2.png diff --git a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/products/tro3.gv b/demo/02-explorations/05-validate-tro-declaration/products/tro3.gv similarity index 100% rename from demo/02-explorations/12-validate-jsonld/07-report-rdfvr/products/tro3.gv rename to demo/02-explorations/05-validate-tro-declaration/products/tro3.gv diff --git a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/products/tro3.png b/demo/02-explorations/05-validate-tro-declaration/products/tro3.png similarity index 100% rename from demo/02-explorations/12-validate-jsonld/07-report-rdfvr/products/tro3.png rename to demo/02-explorations/05-validate-tro-declaration/products/tro3.png diff --git a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/products/tro4.gv b/demo/02-explorations/05-validate-tro-declaration/products/tro4.gv similarity index 100% rename from demo/02-explorations/12-validate-jsonld/07-report-rdfvr/products/tro4.gv rename to demo/02-explorations/05-validate-tro-declaration/products/tro4.gv diff --git a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/products/tro4.png b/demo/02-explorations/05-validate-tro-declaration/products/tro4.png similarity index 100% rename from demo/02-explorations/12-validate-jsonld/07-report-rdfvr/products/tro4.png rename to demo/02-explorations/05-validate-tro-declaration/products/tro4.png diff --git a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/products/tro5.gv b/demo/02-explorations/05-validate-tro-declaration/products/tro5.gv similarity index 100% rename from demo/02-explorations/12-validate-jsonld/07-report-rdfvr/products/tro5.gv rename to demo/02-explorations/05-validate-tro-declaration/products/tro5.gv diff --git a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/products/tro5.png b/demo/02-explorations/05-validate-tro-declaration/products/tro5.png similarity index 100% rename from demo/02-explorations/12-validate-jsonld/07-report-rdfvr/products/tro5.png rename to demo/02-explorations/05-validate-tro-declaration/products/tro5.png diff --git a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/run.sh b/demo/02-explorations/05-validate-tro-declaration/run.sh similarity index 100% rename from demo/02-explorations/12-validate-jsonld/07-report-rdfvr/run.sh rename to demo/02-explorations/05-validate-tro-declaration/run.sh diff --git a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/run.txt b/demo/02-explorations/05-validate-tro-declaration/run.txt similarity index 100% rename from demo/02-explorations/12-validate-jsonld/07-report-rdfvr/run.txt rename to demo/02-explorations/05-validate-tro-declaration/run.txt diff --git a/demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/data/message/bar.txt b/demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/data/message/bar.txt deleted file mode 100644 index ba0e162..0000000 --- a/demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/data/message/bar.txt +++ /dev/null @@ -1 +0,0 @@ -bar \ No newline at end of file diff --git a/demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/data/message/foo.txt b/demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/data/message/foo.txt deleted file mode 100644 index 1910281..0000000 --- a/demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/data/message/foo.txt +++ /dev/null @@ -1 +0,0 @@ -foo \ No newline at end of file diff --git a/demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/data/private.asc b/demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/data/private.asc deleted file mode 100644 index ea8fe60..0000000 --- a/demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/data/private.asc +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN PGP PRIVATE KEY BLOCK----- - -lQIGBGQk4TIBBACa+pwsduIv34Vg/DmC1VN+5Sq47KHWxL5a2DcisfXIWpNFeuS2 -sPd1TdCSEiNywzC3K9vOswY7w+6vAd1VjlQVRKE5at8flauvSaU93s8th3kNmizg -B1nEzeax0z9M5gqZlTZP08Hc/VTPgKEVELv/0AqgekWvpS1Tqpt/o0bGhQARAQAB -/gcDAsMlCwLEKLif/2Rq0B5+kEBZVcN7XSFBoZ6APrMwun/7mY2oXIcFuA8UtD0H -dJuZe477d1WukaJGUJTLenu9MlpYXWDCf5NAbeBPuNoqG9lcQQhiOSBXmazQr0oF -OypXQxf2W+WysXiWEzLVuWRHRvuTZ/CIAX8Rd4f6u/Yjlhf/ucV8govYOF3mP3Te -+hzyyATd7T8ijUG8daDUtb9GJE2QYyxLojnfbdAd5DHHNa1vW9k+1khoWqCBJwAc -5s8E/igZbEGplGgq79pDkCxtAKsEsNZXHO0dlPsEgwDTHcOJ/cc/SSVMnMj4iR0t -slmfu+XhjwEnzKCff8blc3yYV6WdlzKhggUqQmpoiAkzmZUDJhfXEtyKakY8py2a -037+Ecl5Y9ieggDCOjSQIiVtnnsO+J90KJKRoAZRi7FUdOaCgg8prbT9xdxuF2Kl -u7jUCrUep/5ixKZZOzmuCLkgFK7de4VhGEI0pPFZPZtXT72Z2frepEe0HXJlcHJv -IHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQS9TKei5BiTp5Qgl2I1 -qvERcdt4pwUCZCThMgIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRA1qvER -cdt4p4TRA/0ZO/h6lRd1B4PL5yy6hVnhdjrUZS8rEGpWBw6+F6vgYI5m3wSTJ4mf -FvkIgYsPhgWev/JGZtgvu/lsiUZFpHx/teXgryLcwHTf+UCqJa0ZpfS7i9XN7J4C -GVg4nIPh1JHJfPn1jV7lE/vAURr9g+X2/Ny7Os4GeqHFDYwTA4ATFg== -=NNnd ------END PGP PRIVATE KEY BLOCK----- diff --git a/demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/data/public.gpg b/demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/data/public.gpg deleted file mode 100644 index 492a3de..0000000 --- a/demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/data/public.gpg +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- - -mI0EZCThMgEEAJr6nCx24i/fhWD8OYLVU37lKrjsodbEvlrYNyKx9chak0V65Law -93VN0JISI3LDMLcr286zBjvD7q8B3VWOVBVEoTlq3x+Vq69JpT3ezy2HeQ2aLOAH -WcTN5rHTP0zmCpmVNk/Twdz9VM+AoRUQu//QCqB6Ra+lLVOqm3+jRsaFABEBAAG0 -HXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQS9TKei5BiT -p5Qgl2I1qvERcdt4pwUCZCThMgIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK -CRA1qvERcdt4p4TRA/0ZO/h6lRd1B4PL5yy6hVnhdjrUZS8rEGpWBw6+F6vgYI5m -3wSTJ4mfFvkIgYsPhgWev/JGZtgvu/lsiUZFpHx/teXgryLcwHTf+UCqJa0ZpfS7 -i9XN7J4CGVg4nIPh1JHJfPn1jV7lE/vAURr9g+X2/Ny7Os4GeqHFDYwTA4ATFg== -=uXS/ ------END PGP PUBLIC KEY BLOCK----- diff --git a/demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/products/digest.txt b/demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/products/digest.txt deleted file mode 100644 index 380d22c..0000000 --- a/demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/products/digest.txt +++ /dev/null @@ -1 +0,0 @@ -ad94b0a6229daabe8e5747ad67479170483d263ca32fa5c149857d58e87eb9f0 products/message.tar.gz diff --git a/demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/products/message.tar.gz b/demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/products/message.tar.gz deleted file mode 100644 index 4e081b4200f19ae165666cec6791d6240580d9e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172 zcmb2|=3oE==C_wGavf5TXiL;Ts-01s71wY0T0`vIg46ld9M3vRFHCcNU;K%itM0?c z?RGz3$^5!E-$`{_Ape}Lk3-H~yZm#){Lthnf|v59s29JT+#l2>p|>%*;`^(A?prVa z?fJj(( ${TRO_JSONLD_FILE} << EOF -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - }], - - "@graph": [{ - - "@id": "trov:tro/01", - "@type": "trov:ResearchObject", - - "trov:generatedBySystem": { "@id": "trov:system/01" }, - "trov:digest": "$(shasum -a 256 products/message.tar.gz | cut -d" " -f 1)", - "trov:troFilePath": "products/message.tar.gz" - }] -} -EOF - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'import jsonld' << END_CELL - -# Import TRO as JSON-LD and export as N-TRIPLES -geist destroy --dataset kb --quiet -geist create --dataset kb --inputformat json-ld --inputfile ${TRO_JSONLD_FILE} --infer owl - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'create a tmp file to verify the digest' << 'END_CELL' - -# Note: there must be exactly two spaces between the hash and the file path -DIGEST_FILE=products/digest.txt -geist report > ${DIGEST_FILE} << END_TEMPLATE -{% query isfilepath=False as digest_str %} - SELECT DISTINCT ?hash ?filePath - WHERE { - ?tro trov:digest ?hash . - ?tro trov:troFilePath ?filePath . - } -{% endquery %} -{% set digest = digest_str | json2df %} -{% for _, row in digest.iterrows() %} -{{ row["hash"][1:-1] }} {{ row["filePath"][1:-1] }} -{%- endfor %} -END_TEMPLATE -cat ${DIGEST_FILE} -geist destroy --dataset kb -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'verify the digest using shasum' << END_CELL - -shasum -a 256 -c ${DIGEST_FILE} - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'import the private key for repro@repros.dev' << END_CELL -# delete contents of the .gnupg directory for this REPRO -gnupg-runtime.purge-keys -# import the private key file -gpg --import --pinentry-mode loopback --passphrase=repro ${PRIVATE_KEY_FILE} 2>&1 -echo -# list the gpg keys -gpg --list-keys -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'sign the tro.jsonld file with the private key' << END_CELL - -rm -f ${SIGNATURE_FILE} -gpg --detach-sign --local-user repro@repros.dev \ - --pinentry-mode loopback --passphrase=repro \ - -a -o ${SIGNATURE_FILE} \ - ${TRO_JSONLD_FILE} 2>&1 -gnupg-runtime.redact-key ${SIGNATURE_FILE} - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'verify the signature with the public key' << END_CELL - -gpg -v --verify ${SIGNATURE_FILE} ${TRO_JSONLD_FILE} 2>&1 | tail -6 - -END_CELL - -# ------------------------------------------------------------------------------ \ No newline at end of file diff --git a/demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/run.txt b/demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/run.txt deleted file mode 100644 index 00d9b2f..0000000 --- a/demo/02-explorations/06-gpg-runtime-demos/02-simple-tro/run.txt +++ /dev/null @@ -1,148 +0,0 @@ -============================================= bash cell | delete gnupg home directory ============================================== -# delete contents of the .gnupg directory for this REPRO -gnupg-runtime.purge-keys ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -=============================================== bash cell | tar the data dir content =============================================== - -find | sort | tar -czvf products/message.tar.gz data/message --mtime='1970-01-01 00:00:00' - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -data/message/ -data/message/bar.txt -data/message/foo.txt -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -================================= bash cell | create tro certificate containing the digest of data ================================= - -# Create tro.jsonld -cat > products/tro.jsonld << EOF -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - }], - - "@graph": [{ - - "@id": "trov:tro/01", - "@type": "trov:ResearchObject", - - "trov:generatedBySystem": { "@id": "trov:system/01" }, - "trov:digest": "ad94b0a6229daabe8e5747ad67479170483d263ca32fa5c149857d58e87eb9f0", - "trov:troFilePath": "products/message.tar.gz" - }] -} -EOF - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -==================================================== bash cell | import jsonld ===================================================== - -# Import TRO as JSON-LD and export as N-TRIPLES -geist destroy --dataset kb --quiet -geist create --dataset kb --inputformat json-ld --inputfile products/tro.jsonld --infer owl - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -======================================== bash cell | create a tmp file to verify the digest ======================================== - -# Note: there must be exactly two spaces between the hash and the file path -DIGEST_FILE=products/digest.txt -geist report > ${DIGEST_FILE} << END_TEMPLATE -{% query isfilepath=False as digest_str %} - SELECT DISTINCT ?hash ?filePath - WHERE { - ?tro trov:digest ?hash . - ?tro trov:troFilePath ?filePath . - } -{% endquery %} -{% set digest = digest_str | json2df %} -{% for _, row in digest.iterrows() %} -{{ row["hash"][1:-1] }} {{ row["filePath"][1:-1] }} -{%- endfor %} -END_TEMPLATE -cat ${DIGEST_FILE} -geist destroy --dataset kb ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -ad94b0a6229daabe8e5747ad67479170483d263ca32fa5c149857d58e87eb9f0 products/message.tar.gz -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -============================================ bash cell | verify the digest using shasum ============================================ - -shasum -a 256 -c products/digest.txt - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -products/message.tar.gz: OK -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -===================================== bash cell | import the private key for repro@repros.dev ====================================== -# delete contents of the .gnupg directory for this REPRO -gnupg-runtime.purge-keys -# import the private key file -gpg --import --pinentry-mode loopback --passphrase=repro data/private.asc 2>&1 -echo -# list the gpg keys -gpg --list-keys ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -gpg: directory '/mnt/trace-model/.gnupg-runtime/.gnupg' created -gpg: keybox '/mnt/trace-model/.gnupg-runtime/.gnupg/pubring.kbx' created -gpg: /mnt/trace-model/.gnupg-runtime/.gnupg/trustdb.gpg: trustdb created -gpg: key 35AAF11171DB78A7: public key "repro user " imported -gpg: key 35AAF11171DB78A7: secret key imported -gpg: Total number processed: 1 -gpg: imported: 1 -gpg: secret keys read: 1 -gpg: secret keys imported: 1 - -/mnt/trace-model/.gnupg-runtime/.gnupg/pubring.kbx --------------------------------------------------- -pub rsa1024 2023-03-30 [SCEA] - BD4CA7A2E41893A79420976235AAF11171DB78A7 -uid [ unknown] repro user - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -==================================== bash cell | sign the tro.jsonld file with the private key ===================================== - -rm -f tmp/signature.asc -gpg --detach-sign --local-user repro@repros.dev --pinentry-mode loopback --passphrase=repro -a -o tmp/signature.asc products/tro.jsonld 2>&1 -gnupg-runtime.redact-key tmp/signature.asc - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- ------BEGIN PGP SIGNATURE----- - -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxx -xxxxx ------END PGP SIGNATURE----- -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -======================================= bash cell | verify the signature with the public key ======================================= - -gpg -v --verify tmp/signature.asc products/tro.jsonld 2>&1 | tail -6 - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -gpg: using pgp trust model -gpg: Good signature from "repro user " [unknown] -gpg: WARNING: This key is not certified with a trusted signature! -gpg: There is no indication that the signature belongs to the owner. -Primary key fingerprint: BD4C A7A2 E418 93A7 9420 9762 35AA F111 71DB 78A7 -gpg: binary signature, digest algorithm SHA512, key algorithm rsa1024 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - diff --git a/demo/02-explorations/07-gpg-api-demos/02-simple-tro/Makefile b/demo/02-explorations/07-gpg-api-demos/02-simple-tro/Makefile deleted file mode 100644 index 68e529c..0000000 --- a/demo/02-explorations/07-gpg-api-demos/02-simple-tro/Makefile +++ /dev/null @@ -1 +0,0 @@ -include ${SHELL_NOTEBOOK_DOT_DIR}/Makefile.demo-runner diff --git a/demo/02-explorations/07-gpg-api-demos/02-simple-tro/data/message/bar.txt b/demo/02-explorations/07-gpg-api-demos/02-simple-tro/data/message/bar.txt deleted file mode 100644 index ba0e162..0000000 --- a/demo/02-explorations/07-gpg-api-demos/02-simple-tro/data/message/bar.txt +++ /dev/null @@ -1 +0,0 @@ -bar \ No newline at end of file diff --git a/demo/02-explorations/07-gpg-api-demos/02-simple-tro/data/message/foo.txt b/demo/02-explorations/07-gpg-api-demos/02-simple-tro/data/message/foo.txt deleted file mode 100644 index 1910281..0000000 --- a/demo/02-explorations/07-gpg-api-demos/02-simple-tro/data/message/foo.txt +++ /dev/null @@ -1 +0,0 @@ -foo \ No newline at end of file diff --git a/demo/02-explorations/07-gpg-api-demos/02-simple-tro/data/private.asc b/demo/02-explorations/07-gpg-api-demos/02-simple-tro/data/private.asc deleted file mode 100644 index ea8fe60..0000000 --- a/demo/02-explorations/07-gpg-api-demos/02-simple-tro/data/private.asc +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN PGP PRIVATE KEY BLOCK----- - -lQIGBGQk4TIBBACa+pwsduIv34Vg/DmC1VN+5Sq47KHWxL5a2DcisfXIWpNFeuS2 -sPd1TdCSEiNywzC3K9vOswY7w+6vAd1VjlQVRKE5at8flauvSaU93s8th3kNmizg -B1nEzeax0z9M5gqZlTZP08Hc/VTPgKEVELv/0AqgekWvpS1Tqpt/o0bGhQARAQAB -/gcDAsMlCwLEKLif/2Rq0B5+kEBZVcN7XSFBoZ6APrMwun/7mY2oXIcFuA8UtD0H -dJuZe477d1WukaJGUJTLenu9MlpYXWDCf5NAbeBPuNoqG9lcQQhiOSBXmazQr0oF -OypXQxf2W+WysXiWEzLVuWRHRvuTZ/CIAX8Rd4f6u/Yjlhf/ucV8govYOF3mP3Te -+hzyyATd7T8ijUG8daDUtb9GJE2QYyxLojnfbdAd5DHHNa1vW9k+1khoWqCBJwAc -5s8E/igZbEGplGgq79pDkCxtAKsEsNZXHO0dlPsEgwDTHcOJ/cc/SSVMnMj4iR0t -slmfu+XhjwEnzKCff8blc3yYV6WdlzKhggUqQmpoiAkzmZUDJhfXEtyKakY8py2a -037+Ecl5Y9ieggDCOjSQIiVtnnsO+J90KJKRoAZRi7FUdOaCgg8prbT9xdxuF2Kl -u7jUCrUep/5ixKZZOzmuCLkgFK7de4VhGEI0pPFZPZtXT72Z2frepEe0HXJlcHJv -IHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQS9TKei5BiTp5Qgl2I1 -qvERcdt4pwUCZCThMgIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRA1qvER -cdt4p4TRA/0ZO/h6lRd1B4PL5yy6hVnhdjrUZS8rEGpWBw6+F6vgYI5m3wSTJ4mf -FvkIgYsPhgWev/JGZtgvu/lsiUZFpHx/teXgryLcwHTf+UCqJa0ZpfS7i9XN7J4C -GVg4nIPh1JHJfPn1jV7lE/vAURr9g+X2/Ny7Os4GeqHFDYwTA4ATFg== -=NNnd ------END PGP PRIVATE KEY BLOCK----- diff --git a/demo/02-explorations/07-gpg-api-demos/02-simple-tro/data/public.gpg b/demo/02-explorations/07-gpg-api-demos/02-simple-tro/data/public.gpg deleted file mode 100644 index 492a3de..0000000 --- a/demo/02-explorations/07-gpg-api-demos/02-simple-tro/data/public.gpg +++ /dev/null @@ -1,12 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- - -mI0EZCThMgEEAJr6nCx24i/fhWD8OYLVU37lKrjsodbEvlrYNyKx9chak0V65Law -93VN0JISI3LDMLcr286zBjvD7q8B3VWOVBVEoTlq3x+Vq69JpT3ezy2HeQ2aLOAH -WcTN5rHTP0zmCpmVNk/Twdz9VM+AoRUQu//QCqB6Ra+lLVOqm3+jRsaFABEBAAG0 -HXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQS9TKei5BiT -p5Qgl2I1qvERcdt4pwUCZCThMgIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK -CRA1qvERcdt4p4TRA/0ZO/h6lRd1B4PL5yy6hVnhdjrUZS8rEGpWBw6+F6vgYI5m -3wSTJ4mfFvkIgYsPhgWev/JGZtgvu/lsiUZFpHx/teXgryLcwHTf+UCqJa0ZpfS7 -i9XN7J4CGVg4nIPh1JHJfPn1jV7lE/vAURr9g+X2/Ny7Os4GeqHFDYwTA4ATFg== -=uXS/ ------END PGP PUBLIC KEY BLOCK----- diff --git a/demo/02-explorations/07-gpg-api-demos/02-simple-tro/products/message.tar.gz b/demo/02-explorations/07-gpg-api-demos/02-simple-tro/products/message.tar.gz deleted file mode 100644 index 4e081b4200f19ae165666cec6791d6240580d9e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172 zcmb2|=3oE==C_wGavf5TXiL;Ts-01s71wY0T0`vIg46ld9M3vRFHCcNU;K%itM0?c z?RGz3$^5!E-$`{_Ape}Lk3-H~yZm#){Lthnf|v59s29JT+#l2>p|>%*;`^(A?prVa z?fJj(( - - -Private keys: - -/mnt/trace-model/.gnupg-runtime/.gnupg/pubring.kbx --------------------------------------------------- -sec rsa1024 2023-03-30 [SCEA] - BD4CA7A2E41893A79420976235AAF11171DB78A7 -uid [ultimate] repro user - - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -========================== bash cell | sign and verify the tro.jsonld for repro@repros.dev (detach=True) =========================== -python3 << END_PYTHON -import gnupg -# Read the message from the file -with open("products/tro.jsonld", "r") as tro_jsonld_file: - tro_jsonld_text = bytes(tro_jsonld_file.read(), "utf-8") -# Sign the message with the private key -gpg = gnupg.GPG() -signed_text = gpg.sign(tro_jsonld_text, keyid="repro@repros.dev", passphrase="repro", detach=True) -# Write the signed message to a file -with open("tmp/signature.asc", "w") as text_file: - text_file.write(str(signed_text)) -verified = gpg.verify_data("tmp/signature.asc", tro_jsonld_text) -if not verified: - raise ValueError("Signature could not be verified!") -else: - print("Signature has been verified successfully!") -END_PYTHON ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -Signature has been verified successfully! -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - diff --git a/demo/02-explorations/07-gpg-api-demos/Makefile b/demo/02-explorations/07-gpg-api-demos/Makefile deleted file mode 100644 index 68e529c..0000000 --- a/demo/02-explorations/07-gpg-api-demos/Makefile +++ /dev/null @@ -1 +0,0 @@ -include ${SHELL_NOTEBOOK_DOT_DIR}/Makefile.demo-runner diff --git a/demo/02-explorations/08-tro-fingerprint/Makefile b/demo/02-explorations/08-tro-fingerprint/Makefile deleted file mode 100644 index 68e529c..0000000 --- a/demo/02-explorations/08-tro-fingerprint/Makefile +++ /dev/null @@ -1 +0,0 @@ -include ${SHELL_NOTEBOOK_DOT_DIR}/Makefile.demo-runner diff --git a/demo/02-explorations/08-tro-fingerprint/data/message/bar.txt b/demo/02-explorations/08-tro-fingerprint/data/message/bar.txt deleted file mode 100644 index ba0e162..0000000 --- a/demo/02-explorations/08-tro-fingerprint/data/message/bar.txt +++ /dev/null @@ -1 +0,0 @@ -bar \ No newline at end of file diff --git a/demo/02-explorations/08-tro-fingerprint/data/message/baz/baz.txt b/demo/02-explorations/08-tro-fingerprint/data/message/baz/baz.txt deleted file mode 100644 index 3f95386..0000000 --- a/demo/02-explorations/08-tro-fingerprint/data/message/baz/baz.txt +++ /dev/null @@ -1 +0,0 @@ -baz \ No newline at end of file diff --git a/demo/02-explorations/08-tro-fingerprint/data/message/foo.txt b/demo/02-explorations/08-tro-fingerprint/data/message/foo.txt deleted file mode 100644 index 1910281..0000000 --- a/demo/02-explorations/08-tro-fingerprint/data/message/foo.txt +++ /dev/null @@ -1 +0,0 @@ -foo \ No newline at end of file diff --git a/demo/02-explorations/08-tro-fingerprint/data/message_with_diff_filenames/test1.txt b/demo/02-explorations/08-tro-fingerprint/data/message_with_diff_filenames/test1.txt deleted file mode 100644 index ba0e162..0000000 --- a/demo/02-explorations/08-tro-fingerprint/data/message_with_diff_filenames/test1.txt +++ /dev/null @@ -1 +0,0 @@ -bar \ No newline at end of file diff --git a/demo/02-explorations/08-tro-fingerprint/data/message_with_diff_filenames/test2.txt b/demo/02-explorations/08-tro-fingerprint/data/message_with_diff_filenames/test2.txt deleted file mode 100644 index 1910281..0000000 --- a/demo/02-explorations/08-tro-fingerprint/data/message_with_diff_filenames/test2.txt +++ /dev/null @@ -1 +0,0 @@ -foo \ No newline at end of file diff --git a/demo/02-explorations/08-tro-fingerprint/data/message_with_diff_filenames/test3/test3.txt b/demo/02-explorations/08-tro-fingerprint/data/message_with_diff_filenames/test3/test3.txt deleted file mode 100644 index 3f95386..0000000 --- a/demo/02-explorations/08-tro-fingerprint/data/message_with_diff_filenames/test3/test3.txt +++ /dev/null @@ -1 +0,0 @@ -baz \ No newline at end of file diff --git a/demo/02-explorations/08-tro-fingerprint/products/tro.jsonld b/demo/02-explorations/08-tro-fingerprint/products/tro.jsonld deleted file mode 100644 index eb76628..0000000 --- a/demo/02-explorations/08-tro-fingerprint/products/tro.jsonld +++ /dev/null @@ -1,18 +0,0 @@ -{ - "@context": [ - { - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - } - ], - "@graph": [ - { - "@id": "trov:tro/01", - "@type": "trov:ResearchObject", - "trov:generatedBySystem": { - "@id": "trov:system/01" - }, - "trov:fingerprint": "414e9a71745d2dcceb72c25d46ed771ed9221676d49186766dc07eae2a00e317" - } - ] -} \ No newline at end of file diff --git a/demo/02-explorations/08-tro-fingerprint/run.sh b/demo/02-explorations/08-tro-fingerprint/run.sh deleted file mode 100644 index 5b91293..0000000 --- a/demo/02-explorations/08-tro-fingerprint/run.sh +++ /dev/null @@ -1,255 +0,0 @@ -#!/usr/bin/env bash - -MESSAGE_DIR=data/message -MESSAGE_FILE=data/message/bar.txt,data/message/foo.txt,data/message/baz/baz.txt -MESSAGE_SUBDIR=data/message/baz -MESSAGE_FILE_WITHOUT_SUBDIR=data/message/bar.txt,data/message/foo.txt - -MESSAGE_WITH_DIFF_FILENAMES_DIR=data/message_with_diff_filenames -MESSAGE_WITH_DIFF_FILENAMES_FILE=data/message_with_diff_filenames/test1.txt,data/message_with_diff_filenames/test2.txt,data/message_with_diff_filenames/test3/test3.txt -MESSAGE_WITH_DIFF_FILENAMES_SUBDIR=data/message_with_diff_filenames/test3 -MESSAGE_WITH_DIFF_FILENAMES_FILE_WITHOUT_SUBDIR=data/message_with_diff_filenames/test1.txt,data/message_with_diff_filenames/test2.txt - -TRO_JSONLD_FILE=products/tro.jsonld - -# ------------------------------------------------------------------------------ - -bash_cell 'get fingerprint based on tro_fingerprint.py (directory)' << END_CELL - -tro_fingerprint -d ${MESSAGE_DIR} - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'get fingerprint based on tro_fingerprint.py (file)' << END_CELL - -tro_fingerprint -f ${MESSAGE_FILE} - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'get fingerprint based on tro_fingerprint.py (directory and file)' << END_CELL - -tro_fingerprint -d ${MESSAGE_SUBDIR} -f ${MESSAGE_FILE_WITHOUT_SUBDIR} - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'create tro manifest containing the digest of data (directory)' << END_CELL -python3 << END_PYTHON -from trace_model.tro_fingerprint import compute_fingerprint -import json - -fingerprint = compute_fingerprint(arg_dir="${MESSAGE_DIR}", arg_file=None) - -fout = open("${TRO_JSONLD_FILE}", mode="w", encoding="utf-8") -jsonld_content = { - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - }], - - "@graph": [{ - - "@id": "trov:tro/01", - "@type": "trov:ResearchObject", - - "trov:generatedBySystem": { "@id": "trov:system/01" }, - "trov:fingerprint": fingerprint - }] -} -json.dump(jsonld_content, fout, indent=4) - -fout.close() -END_PYTHON -cat ${TRO_JSONLD_FILE} -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'create tro manifest containing the digest of data (file)' << END_CELL -python3 << END_PYTHON -from trace_model.tro_fingerprint import compute_fingerprint -import json - -fingerprint = compute_fingerprint(arg_dir=None, arg_file="${MESSAGE_FILE}") - -fout = open("${TRO_JSONLD_FILE}", mode="w", encoding="utf-8") -jsonld_content = { - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - }], - - "@graph": [{ - - "@id": "trov:tro/01", - "@type": "trov:ResearchObject", - - "trov:generatedBySystem": { "@id": "trov:system/01" }, - "trov:fingerprint": fingerprint - }] -} -json.dump(jsonld_content, fout, indent=4) - -fout.close() -END_PYTHON -cat ${TRO_JSONLD_FILE} -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'create tro manifest containing the digest of data (directory and file)' << END_CELL -python3 << END_PYTHON -from trace_model.tro_fingerprint import compute_fingerprint -import json - -fingerprint = compute_fingerprint(arg_dir="${MESSAGE_SUBDIR}", arg_file="${MESSAGE_FILE_WITHOUT_SUBDIR}") - -fout = open("${TRO_JSONLD_FILE}", mode="w", encoding="utf-8") -jsonld_content = { - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - }], - - "@graph": [{ - - "@id": "trov:tro/01", - "@type": "trov:ResearchObject", - - "trov:generatedBySystem": { "@id": "trov:system/01" }, - "trov:fingerprint": fingerprint - }] -} -json.dump(jsonld_content, fout, indent=4) - -fout.close() -END_PYTHON -cat ${TRO_JSONLD_FILE} -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'test different filenames: get fingerprint based on tro_fingerprint.py (directory)' << END_CELL - -tro_fingerprint -d ${MESSAGE_WITH_DIFF_FILENAMES_DIR} - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'test different filenames: get fingerprint based on tro_fingerprint.py (file)' << END_CELL - -tro_fingerprint -f ${MESSAGE_WITH_DIFF_FILENAMES_FILE} - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'test different filenames: get fingerprint based on tro_fingerprint.py (directory and file)' << END_CELL - -tro_fingerprint -d ${MESSAGE_WITH_DIFF_FILENAMES_SUBDIR} -f ${MESSAGE_WITH_DIFF_FILENAMES_FILE_WITHOUT_SUBDIR} - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'test different filenames: create tro manifest containing the digest of data (directory)' << END_CELL -python3 << END_PYTHON -from trace_model.tro_fingerprint import compute_fingerprint -import json - -fingerprint = compute_fingerprint(arg_dir="${MESSAGE_WITH_DIFF_FILENAMES_DIR}", arg_file=None) - -fout = open("${TRO_JSONLD_FILE}", mode="w", encoding="utf-8") -jsonld_content = { - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - }], - - "@graph": [{ - - "@id": "trov:tro/01", - "@type": "trov:ResearchObject", - - "trov:generatedBySystem": { "@id": "trov:system/01" }, - "trov:fingerprint": fingerprint - }] -} -json.dump(jsonld_content, fout, indent=4) - -fout.close() -END_PYTHON -cat ${TRO_JSONLD_FILE} -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'test different filenames: create tro manifest containing the digest of data (file)' << END_CELL -python3 << END_PYTHON -from trace_model.tro_fingerprint import compute_fingerprint -import json - -fingerprint = compute_fingerprint(arg_dir=None, arg_file="${MESSAGE_WITH_DIFF_FILENAMES_FILE}") - -fout = open("${TRO_JSONLD_FILE}", mode="w", encoding="utf-8") -jsonld_content = { - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - }], - - "@graph": [{ - - "@id": "trov:tro/01", - "@type": "trov:ResearchObject", - - "trov:generatedBySystem": { "@id": "trov:system/01" }, - "trov:fingerprint": fingerprint - }] -} -json.dump(jsonld_content, fout, indent=4) - -fout.close() -END_PYTHON -cat ${TRO_JSONLD_FILE} -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'test different filenames: create tro manifest containing the digest of data (directory and file)' << END_CELL -python3 << END_PYTHON -from trace_model.tro_fingerprint import compute_fingerprint -import json - -fingerprint = compute_fingerprint(arg_dir="${MESSAGE_WITH_DIFF_FILENAMES_SUBDIR}", arg_file="${MESSAGE_WITH_DIFF_FILENAMES_FILE_WITHOUT_SUBDIR}") - -fout = open("${TRO_JSONLD_FILE}", mode="w", encoding="utf-8") -jsonld_content = { - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - }], - - "@graph": [{ - - "@id": "trov:tro/01", - "@type": "trov:ResearchObject", - - "trov:generatedBySystem": { "@id": "trov:system/01" }, - "trov:fingerprint": fingerprint - }] -} -json.dump(jsonld_content, fout, indent=4) - -fout.close() -END_PYTHON -cat ${TRO_JSONLD_FILE} -END_CELL - -# ------------------------------------------------------------------------------ \ No newline at end of file diff --git a/demo/02-explorations/08-tro-fingerprint/run.txt b/demo/02-explorations/08-tro-fingerprint/run.txt deleted file mode 100644 index 86a5d3c..0000000 --- a/demo/02-explorations/08-tro-fingerprint/run.txt +++ /dev/null @@ -1,348 +0,0 @@ -=============================== bash cell | get fingerprint based on tro_fingerprint.py (directory) ================================ - -tro_fingerprint -d data/message - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -414e9a71745d2dcceb72c25d46ed771ed9221676d49186766dc07eae2a00e317 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -================================== bash cell | get fingerprint based on tro_fingerprint.py (file) ================================== - -tro_fingerprint -f data/message/bar.txt,data/message/foo.txt,data/message/baz/baz.txt - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -414e9a71745d2dcceb72c25d46ed771ed9221676d49186766dc07eae2a00e317 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -=========================== bash cell | get fingerprint based on tro_fingerprint.py (directory and file) =========================== - -tro_fingerprint -d data/message/baz -f data/message/bar.txt,data/message/foo.txt - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -414e9a71745d2dcceb72c25d46ed771ed9221676d49186766dc07eae2a00e317 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -============================ bash cell | create tro manifest containing the digest of data (directory) ============================= -python3 << END_PYTHON -from trace_model.tro_fingerprint import compute_fingerprint -import json - -fingerprint = compute_fingerprint(arg_dir="data/message", arg_file=None) - -fout = open("products/tro.jsonld", mode="w", encoding="utf-8") -jsonld_content = { - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - }], - - "@graph": [{ - - "@id": "trov:tro/01", - "@type": "trov:ResearchObject", - - "trov:generatedBySystem": { "@id": "trov:system/01" }, - "trov:fingerprint": fingerprint - }] -} -json.dump(jsonld_content, fout, indent=4) - -fout.close() -END_PYTHON -cat products/tro.jsonld ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -{ - "@context": [ - { - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - } - ], - "@graph": [ - { - "@id": "trov:tro/01", - "@type": "trov:ResearchObject", - "trov:generatedBySystem": { - "@id": "trov:system/01" - }, - "trov:fingerprint": "414e9a71745d2dcceb72c25d46ed771ed9221676d49186766dc07eae2a00e317" - } - ] -}^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -=============================== bash cell | create tro manifest containing the digest of data (file) =============================== -python3 << END_PYTHON -from trace_model.tro_fingerprint import compute_fingerprint -import json - -fingerprint = compute_fingerprint(arg_dir=None, arg_file="data/message/bar.txt,data/message/foo.txt,data/message/baz/baz.txt") - -fout = open("products/tro.jsonld", mode="w", encoding="utf-8") -jsonld_content = { - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - }], - - "@graph": [{ - - "@id": "trov:tro/01", - "@type": "trov:ResearchObject", - - "trov:generatedBySystem": { "@id": "trov:system/01" }, - "trov:fingerprint": fingerprint - }] -} -json.dump(jsonld_content, fout, indent=4) - -fout.close() -END_PYTHON -cat products/tro.jsonld ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -{ - "@context": [ - { - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - } - ], - "@graph": [ - { - "@id": "trov:tro/01", - "@type": "trov:ResearchObject", - "trov:generatedBySystem": { - "@id": "trov:system/01" - }, - "trov:fingerprint": "414e9a71745d2dcceb72c25d46ed771ed9221676d49186766dc07eae2a00e317" - } - ] -}^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -======================== bash cell | create tro manifest containing the digest of data (directory and file) ======================== -python3 << END_PYTHON -from trace_model.tro_fingerprint import compute_fingerprint -import json - -fingerprint = compute_fingerprint(arg_dir="data/message/baz", arg_file="data/message/bar.txt,data/message/foo.txt") - -fout = open("products/tro.jsonld", mode="w", encoding="utf-8") -jsonld_content = { - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - }], - - "@graph": [{ - - "@id": "trov:tro/01", - "@type": "trov:ResearchObject", - - "trov:generatedBySystem": { "@id": "trov:system/01" }, - "trov:fingerprint": fingerprint - }] -} -json.dump(jsonld_content, fout, indent=4) - -fout.close() -END_PYTHON -cat products/tro.jsonld ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -{ - "@context": [ - { - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - } - ], - "@graph": [ - { - "@id": "trov:tro/01", - "@type": "trov:ResearchObject", - "trov:generatedBySystem": { - "@id": "trov:system/01" - }, - "trov:fingerprint": "414e9a71745d2dcceb72c25d46ed771ed9221676d49186766dc07eae2a00e317" - } - ] -}^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -================== bash cell | test different filenames: get fingerprint based on tro_fingerprint.py (directory) =================== - -tro_fingerprint -d data/message_with_diff_filenames - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -414e9a71745d2dcceb72c25d46ed771ed9221676d49186766dc07eae2a00e317 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -===================== bash cell | test different filenames: get fingerprint based on tro_fingerprint.py (file) ===================== - -tro_fingerprint -f data/message_with_diff_filenames/test1.txt,data/message_with_diff_filenames/test2.txt,data/message_with_diff_filenames/test3/test3.txt - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -414e9a71745d2dcceb72c25d46ed771ed9221676d49186766dc07eae2a00e317 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -============== bash cell | test different filenames: get fingerprint based on tro_fingerprint.py (directory and file) ============== - -tro_fingerprint -d data/message_with_diff_filenames/test3 -f data/message_with_diff_filenames/test1.txt,data/message_with_diff_filenames/test2.txt - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -414e9a71745d2dcceb72c25d46ed771ed9221676d49186766dc07eae2a00e317 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -=============== bash cell | test different filenames: create tro manifest containing the digest of data (directory) ================ -python3 << END_PYTHON -from trace_model.tro_fingerprint import compute_fingerprint -import json - -fingerprint = compute_fingerprint(arg_dir="data/message_with_diff_filenames", arg_file=None) - -fout = open("products/tro.jsonld", mode="w", encoding="utf-8") -jsonld_content = { - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - }], - - "@graph": [{ - - "@id": "trov:tro/01", - "@type": "trov:ResearchObject", - - "trov:generatedBySystem": { "@id": "trov:system/01" }, - "trov:fingerprint": fingerprint - }] -} -json.dump(jsonld_content, fout, indent=4) - -fout.close() -END_PYTHON -cat products/tro.jsonld ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -{ - "@context": [ - { - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - } - ], - "@graph": [ - { - "@id": "trov:tro/01", - "@type": "trov:ResearchObject", - "trov:generatedBySystem": { - "@id": "trov:system/01" - }, - "trov:fingerprint": "414e9a71745d2dcceb72c25d46ed771ed9221676d49186766dc07eae2a00e317" - } - ] -}^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -================== bash cell | test different filenames: create tro manifest containing the digest of data (file) ================== -python3 << END_PYTHON -from trace_model.tro_fingerprint import compute_fingerprint -import json - -fingerprint = compute_fingerprint(arg_dir=None, arg_file="data/message_with_diff_filenames/test1.txt,data/message_with_diff_filenames/test2.txt,data/message_with_diff_filenames/test3/test3.txt") - -fout = open("products/tro.jsonld", mode="w", encoding="utf-8") -jsonld_content = { - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - }], - - "@graph": [{ - - "@id": "trov:tro/01", - "@type": "trov:ResearchObject", - - "trov:generatedBySystem": { "@id": "trov:system/01" }, - "trov:fingerprint": fingerprint - }] -} -json.dump(jsonld_content, fout, indent=4) - -fout.close() -END_PYTHON -cat products/tro.jsonld ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -{ - "@context": [ - { - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - } - ], - "@graph": [ - { - "@id": "trov:tro/01", - "@type": "trov:ResearchObject", - "trov:generatedBySystem": { - "@id": "trov:system/01" - }, - "trov:fingerprint": "414e9a71745d2dcceb72c25d46ed771ed9221676d49186766dc07eae2a00e317" - } - ] -}^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -=========== bash cell | test different filenames: create tro manifest containing the digest of data (directory and file) =========== -python3 << END_PYTHON -from trace_model.tro_fingerprint import compute_fingerprint -import json - -fingerprint = compute_fingerprint(arg_dir="data/message_with_diff_filenames/test3", arg_file="data/message_with_diff_filenames/test1.txt,data/message_with_diff_filenames/test2.txt") - -fout = open("products/tro.jsonld", mode="w", encoding="utf-8") -jsonld_content = { - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - }], - - "@graph": [{ - - "@id": "trov:tro/01", - "@type": "trov:ResearchObject", - - "trov:generatedBySystem": { "@id": "trov:system/01" }, - "trov:fingerprint": fingerprint - }] -} -json.dump(jsonld_content, fout, indent=4) - -fout.close() -END_PYTHON -cat products/tro.jsonld ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -{ - "@context": [ - { - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - } - ], - "@graph": [ - { - "@id": "trov:tro/01", - "@type": "trov:ResearchObject", - "trov:generatedBySystem": { - "@id": "trov:system/01" - }, - "trov:fingerprint": "414e9a71745d2dcceb72c25d46ed771ed9221676d49186766dc07eae2a00e317" - } - ] -}^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - diff --git a/demo/02-explorations/09-tro-fingerprint-state/Makefile b/demo/02-explorations/09-tro-fingerprint-state/Makefile deleted file mode 100644 index 68e529c..0000000 --- a/demo/02-explorations/09-tro-fingerprint-state/Makefile +++ /dev/null @@ -1 +0,0 @@ -include ${SHELL_NOTEBOOK_DOT_DIR}/Makefile.demo-runner diff --git a/demo/02-explorations/10-timestamp/Makefile b/demo/02-explorations/10-timestamp/Makefile deleted file mode 100644 index 68e529c..0000000 --- a/demo/02-explorations/10-timestamp/Makefile +++ /dev/null @@ -1 +0,0 @@ -include ${SHELL_NOTEBOOK_DOT_DIR}/Makefile.demo-runner diff --git a/demo/02-explorations/10-timestamp/data/digest.yaml b/demo/02-explorations/10-timestamp/data/digest.yaml deleted file mode 100644 index 99a18a1..0000000 --- a/demo/02-explorations/10-timestamp/data/digest.yaml +++ /dev/null @@ -1,2 +0,0 @@ -tro-declaration: c7ef4301a9f9978c282affaa69a32971d991d4b5e21501bd3fd6241c02823c2c -trs-signature": 9fb5dd0a2b9afdf4071b43558848a70101c91d3b1eab61f6a369740c36c2ea8d diff --git a/demo/02-explorations/10-timestamp/data/file.tsq b/demo/02-explorations/10-timestamp/data/file.tsq deleted file mode 100644 index 26c2d79d436e614feb6c8327fe74bb62d8302002..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91 zcmV-h0HpsgSpoq8Fi|iK1_@w>NC9O71OfvE00cmh8Q?U0snXGB$faG diff --git a/demo/02-explorations/11-jsonld2csv/Makefile b/demo/02-explorations/11-jsonld2csv/Makefile deleted file mode 100644 index 68e529c..0000000 --- a/demo/02-explorations/11-jsonld2csv/Makefile +++ /dev/null @@ -1 +0,0 @@ -include ${SHELL_NOTEBOOK_DOT_DIR}/Makefile.demo-runner diff --git a/demo/02-explorations/11-jsonld2csv/data/tro2.jsonld b/demo/02-explorations/11-jsonld2csv/data/tro2.jsonld deleted file mode 100644 index 0b896c8..0000000 --- a/demo/02-explorations/11-jsonld2csv/data/tro2.jsonld +++ /dev/null @@ -1,132 +0,0 @@ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/01-trov-examples/02-three-artifacts-one-trp/" - }], - - "@graph": [ - { - "@id": "tro", - "@type": "trov:TransparentResearchObject", - "rdfs:comment": "A composition of two files in a single arrangement endorsed by a TRS that enforced Interent isolation", - - "trov:wasAssembledBy": { - "@id": "trs", - "@type": "trov:TrustedResearchSystem", - "rdfs:comment": "TRS that can provide Internet isolation", - "trov:publicKey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n", - "trov:hasCapability": [ - { - "@id": "trs/capability/1", - "@type": "trov:CanProvideInternetIsolation" - } - ] - }, - - "trov:wasTimestampedBy": { - "@id": "tsa", - "@type": "trov:TimeStampingAuthority", - "trov:publicKey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n" - }, - - "trov:hasAttribute": [ - { - "@id": "tro/attribute/1", - "@type": "trov:IncludesAllInputData", - "trov:warrantedBy": [{"@id": "trp/1/attribute/1" }] - } - ], - - "trov:hasComposition": - { - "@id": "composition/1", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": { - "@id": "fingerprint", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc" - }, - - "trov:hasArtifact": [ - { - "@id": "composition/1/artifact/1", - "@type": "trov:ResearchArtifact", - "trov:mimeType": "text/plain", - "trov:sha256": "b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c" - }, - { - "@id": "composition/1/artifact/2", - "@type": "trov:ResearchArtifact", - "trov:mimeType": "text/plain", - "trov:sha256": "7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730" - }, - { - "@id": "composition/1/artifact/3", - "@type": "trov:ResearchArtifact", - "trov:mimeType": "text/plain", - "trov:sha256": "7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730" - } - ] - }, - - "trov:hasArrangement": [ - { - "@id": "arrangement/1", - "@type": "trov:ArtifactArrangement", - "rdfs:comment": "Initial arrangement", - "trov:hasLocus": [ - { - "@id": "arrangement/1/locus/1", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, - "trov:hasLocation": "file1" - }, - { - "@id": "arrangement/1/locus/2", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/2" }, - "trov:hasLocation": "file2" - } - ] - }, - { - "@id": "arrangement/2", - "@type": "trov:ArtifactArrangement", - "rdfs:comment": "Final arrangement", - "trov:hasLocus": [ - { - "@id": "arrangement/2/locus/1", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/2" }, - "trov:hasLocation": "file2" - }, - { - "@id": "arrangement/2/locus/2", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/3" }, - "trov:hasLocation": "file3" - } - ] - } - ], - - "trov:hasPerformance": [{ - "@id": "trp/1", - "@type": "trov:TrustedResearchPerformance", - "rdfs:comment": "Workflow execution", - "trov:wasConductedBy": { "@id": "trs" }, - "trov:startedAtTime": "2023-05-05T01:30:00Z", - "trov:endedAtTime": "2023-05-05T01:40:00Z", - "trov:accessedArrangement": { "@id": "arrangement/1" }, - "trov:contributedToArrangement": { "@id": "arrangement/2" }, - "trov:hadPerformanceAttribute": { - "@id": "trp/1/attribute/1", - "@type": "trov:InternetIsolation", - "trov:warrantedBy": { "@id": "trs/capability/1" } - } - }] - } -]} diff --git a/demo/02-explorations/11-jsonld2csv/data/tro3.jsonld b/demo/02-explorations/11-jsonld2csv/data/tro3.jsonld deleted file mode 100644 index 0006479..0000000 --- a/demo/02-explorations/11-jsonld2csv/data/tro3.jsonld +++ /dev/null @@ -1,260 +0,0 @@ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/01-trov-examples/03-skope-/" - }], - - "@graph": [ - { - "@id": "tro", - "@type": "trov:TransparentResearchObject", - "rdfs:comment": "Download LBDA dataset from NOAA website and prepare for use by researchers employing the SKOPE application", - - "trov:wasAssembledBy": { - "@id": "trs", - "@type": "trov:TrustedResearchSystem", - "rdfs:comment": "TRS that can monitor netowrk accesses or provide Internet isolation", - "trov:publicKey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n", - "trov:hasCapability": [ - { - "@id": "trs/capability/1", - "@type": "trov:CanRecordInternetAccess" - }, - { - "@id": "trs/capability/2", - "@type": "trov:CanProvideInternetIsolation" - } - ] - }, - - "trov:wasTimestampedBy": { - "@id": "tsa", - "@type": "trov:TimeStampingAuthority", - "trov:publicKey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n" - }, - - "trov:hasAttribute": [ - { - "@id": "tro/attribute/1", - "@type": "trov:IncludesAllInputData", - "trov:warrantedBy": [ - {"@id": "trp/1/attribute/1" }, - {"@id": "trp/2/attribute/1" }, - {"@id": "trp/3/attribute/1" } - ] - } - ], - - "trov:hasComposition": - { - "@id": "composition/1", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": { - "@id": "fingerprint", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "b2b65040893f35d112979c564121c7425f4aad10838aadcb232be5db715ec2b2" - }, - - "trov:hasArtifact": [ - { - "@id": "composition/1/artifact/1", - "@type": "trov:DataArtifact", - "rdfs:comment": "NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset", - "trov:mimeType": "application/x-netcdf", - "trov:sha256": "b02edb8d27cf9ac19087938dd3d306895e208bd3a9f0458e63292ea2695a1f78" - }, - { - "@id": "composition/1/artifact/2", - "@type": "trov:ComputationalNotebookArtifact", - "rdfs:comment": "Initial state of Jupyter notebook for processing the LBDA dataset", - "trov:mimeType": "text/plain", - "trov:sha256": "8fcf663f1c40cbf846d0e5a136f0797fa560545f5d8c1391a5b13406f3814ad6" - }, - { - "@id": "composition/1/artifact/3", - "@type": "trov:ComputationalNotebookArtifact", - "rdfs:comment": "Final state of Jupyter notebook for processing the LBDA dataset", - "trov:mimeType": "text/plain", - "trov:sha256": "8cf4f26b27e83a967bd7ddd97a24e6d4b7a9a7a14fff7ffeb47e2fa9085bccaf" - }, - { - "@id": "composition/1/artifact/4", - "@type": "trov:HTMLArtifact", - "rdfs:comment": "HTML rendering of final state of the Jupyter notebook", - "trov:mimeType": "text/html", - "trov:sha256": "870c9297ae7439c283697761c90028312cc0312f13182afb0a0125eb29e5f7f0" - }, - { - "@id": "composition/1/artifact/5", - "@type": "trov:ImageArtifact", - "rdfs:comment": "Graphical rendering of the histogram of dataset values", - "trov:mimeType": "image/png", - "trov:sha256": "cfc6e4d5e76754d4802d42a2d6ff79a901c7f0e5daccb256cab542bb7953b2bf" - }, - { - "@id": "composition/1/artifact/6", - "@type": "trov:DataArtifact", - "rdfs:comment": "GeoTIFF file containing LBDA data cube ready for staging to SKOPE server", - "trov:mimeType": "image/tiff", - "trov:sha256": "e035f3af957c4f761c1d502cc28f91676fbf2bbdf5f7045a7151a6d3ff04789d" - } - ] - }, - - "trov:hasArrangement": [ - { - "@id": "arrangement/1", - "@type": "trov:WebResourceArtifactArrangement", - "rdfs:comment": "Arrangement decscribing location of LBDA NetCDF file on NOAA web server", - "trov:hasLocus": [ - { - "@id": "arrangement/1/locus/1", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, - "trov:hasLocation": "https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc" - } - ] - }, - { - "@id": "arrangement/2", - "@type": "trov:LocalFilesystemArtifactArrangement", - "rdfs:comment": "Arrangement on fileserver managed by TRS after downloading dataset and before running Jupyter notebook", - "trov:hasLocus": [ - { - "@id": "arrangement/2/locus/1", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, - "trov:hasLocation": "data/lbda-v2_kddm_pmdi_2017.nc" - }, - { - "@id": "arrangement/2/locus/2", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/2" }, - "trov:hasLocation": "analysis.ipynb" - } - ] - }, - { - "@id": "arrangement/3", - "@type": "trov:LocalFilesystemArtifactArrangement", - "rdfs:comment": "Arrangement on fileserver managed by TRS after running Jupyter notebook", - "trov:hasLocus": [ - { - "@id": "arrangement/3/locus/1", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, - "trov:hasLocation": "data/lbda-v2_kddm_pmdi_2017.nc" - }, - { - "@id": "arrangement/3/locus/2", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/3" }, - "trov:hasLocation": "analysis.ipynb" - }, - { - "@id": "arrangement/3/locus/3", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/4" }, - "trov:hasLocation": "output/analysis.html" - }, - { - "@id": "arrangement/3/locus/4", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/5" }, - "trov:hasLocation": "output/histogram.png" - }, - { - "@id": "arrangement/3/locus/5", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/6" }, - "trov:hasLocation": "output/lbda-v2_kddm_pmdi_2017.tiff" - } - ] - }, - { - "@id": "arrangement/4", - "@type": "trov:ZipArtifactArrangement", - "rdfs:comment": "Arrangement of final products packaged in a Zip file", - "trov:hasLocus": [ - { - "@id": "arrangement/4/locus/1", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/3" }, - "trov:hasLocation": "analysis.ipynb" - }, - { - "@id": "arrangement/4/locus/2", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/4" }, - "trov:hasLocation": "analysis.html" - }, - { - "@id": "arrangement/4/locus/3", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/5" }, - "trov:hasLocation": "histogram.png" - }, - { - "@id": "arrangement/3/locus/5", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/6" }, - "trov:hasLocation": "lbda-v2_kddm_pmdi_2017.tiff" - } - ] - } - ], - - "trov:hasPerformance": [ - { - "@id": "trp/1", - "@type": "trov:TrustedResearchPerformance", - "rdfs:comment": "Process that downloaded the LBDA NetCDF file from NOAA server to local filesystem", - "trov:wasConductedBy": { "@id": "trs" }, - "trov:startedAtTime": "2023-05-08T01:30:00Z", - "trov:endedAtTime": "2023-05-08T01:40:00Z", - "trov:accessedArrangement": { "@id": "arrangement/1" }, - "trov:contributedToArrangement": { "@id": "arrangement/2" }, - "trov:hadPerformanceAttribute": { - "@id": "trp/1/attribute/1", - "@type": "trov:InternetAccessRecording", - "trov:warrantedBy": { "@id": "trs/capability/1" } - } - }, - - { - "@id": "trp/2", - "@type": "trov:TrustedResearchPerformance", - "rdfs:comment": "Process that ran Jupyter notebook", - "trov:wasConductedBy": { "@id": "trs" }, - "trov:startedAtTime": "2023-05-08T01:41:00Z", - "trov:endedAtTime": "2023-05-08T01:50:00Z", - "trov:accessedArrangement": { "@id": "arrangement/2" }, - "trov:contributedToArrangement": { "@id": "arrangement/3" }, - "trov:hadPerformanceAttribute": { - "@id": "trp/2/attribute/1", - "@type": "trov:InternetIsolation", - "trov:warrantedBy": { "@id": "trs/capability/2" } - } - }, - - { - "@id": "trp/3", - "@type": "trov:TrustedResearchPerformance", - "rdfs:comment": "Process that packaged products of the Jupyter notebook execution in a Zip file", - "trov:wasConductedBy": { "@id": "trs" }, - "trov:startedAtTime": "2023-05-08T01:51:00Z", - "trov:endedAtTime": "2023-05-08T02:00:00Z", - "trov:accessedArrangement": { "@id": "arrangement/3" }, - "trov:contributedToArrangement": { "@id": "arrangement/4" }, - "trov:hadPerformanceAttribute": { - "@id": "trp/3/attribute/1", - "@type": "trov:InternetIsolation", - "trov:warrantedBy": { "@id": "trs/capability/2" } - } - } - ] - } -]} diff --git a/demo/02-explorations/11-jsonld2csv/products/tro1#composition_and_arrangement.csv b/demo/02-explorations/11-jsonld2csv/products/tro1#composition_and_arrangement.csv deleted file mode 100644 index a1df37d..0000000 --- a/demo/02-explorations/11-jsonld2csv/products/tro1#composition_and_arrangement.csv +++ /dev/null @@ -1,3 +0,0 @@ -ArtifactId,Digest,MimeType,arrangement/1 -composition/1/artifact/1,b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c,text/plain,file1 -composition/1/artifact/2,7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730,text/plain,file2 diff --git a/demo/02-explorations/11-jsonld2csv/products/tro2#composition_and_arrangement.csv b/demo/02-explorations/11-jsonld2csv/products/tro2#composition_and_arrangement.csv deleted file mode 100644 index c73272a..0000000 --- a/demo/02-explorations/11-jsonld2csv/products/tro2#composition_and_arrangement.csv +++ /dev/null @@ -1,4 +0,0 @@ -ArtifactId,Digest,MimeType,arrangement/1,arrangement/2 -composition/1/artifact/1,b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c,text/plain,file1, -composition/1/artifact/2,7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730,text/plain,file2,file2 -composition/1/artifact/3,7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730,text/plain,,file3 diff --git a/demo/02-explorations/11-jsonld2csv/products/tro2#tro_attribute_justification.csv b/demo/02-explorations/11-jsonld2csv/products/tro2#tro_attribute_justification.csv deleted file mode 100644 index 14f0361..0000000 --- a/demo/02-explorations/11-jsonld2csv/products/tro2#tro_attribute_justification.csv +++ /dev/null @@ -1,2 +0,0 @@ -TroAtt,TrpAttId,TrpAtt,TrsAttId,TrsAtt -trov:IncludesAllInputData,trp/1/attribute/1,trov:InternetIsolation,trs/capability/1,trov:CanProvideInternetIsolation diff --git a/demo/02-explorations/11-jsonld2csv/products/tro2#trp_and_arrangement.csv b/demo/02-explorations/11-jsonld2csv/products/tro2#trp_and_arrangement.csv deleted file mode 100644 index e372e5b..0000000 --- a/demo/02-explorations/11-jsonld2csv/products/tro2#trp_and_arrangement.csv +++ /dev/null @@ -1,2 +0,0 @@ -TrpId,TrpComment,TrsId,StartedAtTime,EndedAtTime,accessedArrangementId,contributedToArrangementId -trp/1,Workflow execution,trs,2023-05-05T01:30:00Z,2023-05-05T01:40:00Z,arrangement/1,arrangement/2 diff --git a/demo/02-explorations/11-jsonld2csv/products/tro3#composition_and_arrangement.csv b/demo/02-explorations/11-jsonld2csv/products/tro3#composition_and_arrangement.csv deleted file mode 100644 index b8c900e..0000000 --- a/demo/02-explorations/11-jsonld2csv/products/tro3#composition_and_arrangement.csv +++ /dev/null @@ -1,7 +0,0 @@ -ArtifactId,Digest,MimeType,arrangement/1,arrangement/2,arrangement/3,arrangement/4 -composition/1/artifact/1,b02edb8d27cf9ac19087938dd3d306895e208bd3a9f0458e63292ea2695a1f78,application/x-netcdf,https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc,data/lbda-v2_kddm_pmdi_2017.nc,data/lbda-v2_kddm_pmdi_2017.nc, -composition/1/artifact/2,8fcf663f1c40cbf846d0e5a136f0797fa560545f5d8c1391a5b13406f3814ad6,text/plain,,analysis.ipynb,, -composition/1/artifact/3,8cf4f26b27e83a967bd7ddd97a24e6d4b7a9a7a14fff7ffeb47e2fa9085bccaf,text/plain,,,analysis.ipynb,analysis.ipynb -composition/1/artifact/4,870c9297ae7439c283697761c90028312cc0312f13182afb0a0125eb29e5f7f0,text/html,,,output/analysis.html,analysis.html -composition/1/artifact/5,cfc6e4d5e76754d4802d42a2d6ff79a901c7f0e5daccb256cab542bb7953b2bf,image/png,,,output/histogram.png,histogram.png -composition/1/artifact/6,e035f3af957c4f761c1d502cc28f91676fbf2bbdf5f7045a7151a6d3ff04789d,image/tiff,,,output/lbda-v2_kddm_pmdi_2017.tiff,lbda-v2_kddm_pmdi_2017.tiff diff --git a/demo/02-explorations/11-jsonld2csv/products/tro3#tro_attribute_justification.csv b/demo/02-explorations/11-jsonld2csv/products/tro3#tro_attribute_justification.csv deleted file mode 100644 index d7e840c..0000000 --- a/demo/02-explorations/11-jsonld2csv/products/tro3#tro_attribute_justification.csv +++ /dev/null @@ -1,4 +0,0 @@ -TroAtt,TrpAttId,TrpAtt,TrsAttId,TrsAtt -trov:IncludesAllInputData,trp/1/attribute/1,trov:InternetAccessRecording,trs/capability/1,trov:CanRecordInternetAccess -trov:IncludesAllInputData,trp/2/attribute/1,trov:InternetIsolation,trs/capability/2,trov:CanProvideInternetIsolation -trov:IncludesAllInputData,trp/3/attribute/1,trov:InternetIsolation,trs/capability/2,trov:CanProvideInternetIsolation diff --git a/demo/02-explorations/11-jsonld2csv/products/tro3#trp_and_arrangement.csv b/demo/02-explorations/11-jsonld2csv/products/tro3#trp_and_arrangement.csv deleted file mode 100644 index 6763a07..0000000 --- a/demo/02-explorations/11-jsonld2csv/products/tro3#trp_and_arrangement.csv +++ /dev/null @@ -1,4 +0,0 @@ -TrpId,TrpComment,TrsId,StartedAtTime,EndedAtTime,accessedArrangementId,contributedToArrangementId -trp/1,Process that downloaded the LBDA NetCDF file from NOAA server to local filesystem,trs,2023-05-08T01:30:00Z,2023-05-08T01:40:00Z,arrangement/1,arrangement/2 -trp/2,Process that ran Jupyter notebook,trs,2023-05-08T01:41:00Z,2023-05-08T01:50:00Z,arrangement/2,arrangement/3 -trp/3,Process that packaged products of the Jupyter notebook execution in a Zip file,trs,2023-05-08T01:51:00Z,2023-05-08T02:00:00Z,arrangement/3,arrangement/4 diff --git a/demo/02-explorations/11-jsonld2csv/run.sh b/demo/02-explorations/11-jsonld2csv/run.sh deleted file mode 100644 index 674ee5b..0000000 --- a/demo/02-explorations/11-jsonld2csv/run.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash - -# ------------------------------------------------------------------------------ - -bash_cell 'convert tro1 from jsonld to csv' << END_CELL - -jsonld2csv --file data/tro1.jsonld --output products - -cat products/tro1* - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'convert tro1 from jsonld to csv' << END_CELL - -jsonld2csv --file data/tro2.jsonld --output products - -cat products/tro2* - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'convert tro1 from jsonld to csv' << END_CELL - -jsonld2csv --file data/tro3.jsonld --output products - -cat products/tro3* - -END_CELL - -# ------------------------------------------------------------------------------ diff --git a/demo/02-explorations/11-jsonld2csv/run.txt b/demo/02-explorations/11-jsonld2csv/run.txt deleted file mode 100644 index aeb8311..0000000 --- a/demo/02-explorations/11-jsonld2csv/run.txt +++ /dev/null @@ -1,59 +0,0 @@ -=========================================== bash cell | convert tro1 from jsonld to csv ============================================ - -jsonld2csv --file data/tro1.jsonld --output products - -cat products/tro1* - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -tro1 -ArtifactId,Digest,MimeType,arrangement/1 -composition/1/artifact/1,b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c,text/plain,file1 -composition/1/artifact/2,7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730,text/plain,file2 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -=========================================== bash cell | convert tro1 from jsonld to csv ============================================ - -jsonld2csv --file data/tro2.jsonld --output products - -cat products/tro2* - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -tro2 -ArtifactId,Digest,MimeType,arrangement/1,arrangement/2 -composition/1/artifact/1,b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c,text/plain,file1, -composition/1/artifact/2,7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730,text/plain,file2,file2 -composition/1/artifact/3,7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730,text/plain,,file3 -TroAtt,TrpAttId,TrpAtt,TrsAttId,TrsAtt -trov:IncludesAllInputData,trp/1/attribute/1,trov:InternetIsolation,trs/capability/1,trov:CanProvideInternetIsolation -TrpId,TrpComment,TrsId,StartedAtTime,EndedAtTime,accessedArrangementId,contributedToArrangementId -trp/1,Workflow execution,trs,2023-05-05T01:30:00Z,2023-05-05T01:40:00Z,arrangement/1,arrangement/2 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -=========================================== bash cell | convert tro1 from jsonld to csv ============================================ - -jsonld2csv --file data/tro3.jsonld --output products - -cat products/tro3* - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -tro3 -ArtifactId,Digest,MimeType,arrangement/1,arrangement/2,arrangement/3,arrangement/4 -composition/1/artifact/1,b02edb8d27cf9ac19087938dd3d306895e208bd3a9f0458e63292ea2695a1f78,application/x-netcdf,https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc,data/lbda-v2_kddm_pmdi_2017.nc,data/lbda-v2_kddm_pmdi_2017.nc, -composition/1/artifact/2,8fcf663f1c40cbf846d0e5a136f0797fa560545f5d8c1391a5b13406f3814ad6,text/plain,,analysis.ipynb,, -composition/1/artifact/3,8cf4f26b27e83a967bd7ddd97a24e6d4b7a9a7a14fff7ffeb47e2fa9085bccaf,text/plain,,,analysis.ipynb,analysis.ipynb -composition/1/artifact/4,870c9297ae7439c283697761c90028312cc0312f13182afb0a0125eb29e5f7f0,text/html,,,output/analysis.html,analysis.html -composition/1/artifact/5,cfc6e4d5e76754d4802d42a2d6ff79a901c7f0e5daccb256cab542bb7953b2bf,image/png,,,output/histogram.png,histogram.png -composition/1/artifact/6,e035f3af957c4f761c1d502cc28f91676fbf2bbdf5f7045a7151a6d3ff04789d,image/tiff,,,output/lbda-v2_kddm_pmdi_2017.tiff,lbda-v2_kddm_pmdi_2017.tiff -TroAtt,TrpAttId,TrpAtt,TrsAttId,TrsAtt -trov:IncludesAllInputData,trp/1/attribute/1,trov:InternetAccessRecording,trs/capability/1,trov:CanRecordInternetAccess -trov:IncludesAllInputData,trp/2/attribute/1,trov:InternetIsolation,trs/capability/2,trov:CanProvideInternetIsolation -trov:IncludesAllInputData,trp/3/attribute/1,trov:InternetIsolation,trs/capability/2,trov:CanProvideInternetIsolation -TrpId,TrpComment,TrsId,StartedAtTime,EndedAtTime,accessedArrangementId,contributedToArrangementId -trp/1,Process that downloaded the LBDA NetCDF file from NOAA server to local filesystem,trs,2023-05-08T01:30:00Z,2023-05-08T01:40:00Z,arrangement/1,arrangement/2 -trp/2,Process that ran Jupyter notebook,trs,2023-05-08T01:41:00Z,2023-05-08T01:50:00Z,arrangement/2,arrangement/3 -trp/3,Process that packaged products of the Jupyter notebook execution in a Zip file,trs,2023-05-08T01:51:00Z,2023-05-08T02:00:00Z,arrangement/3,arrangement/4 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - diff --git a/demo/02-explorations/12-validate-jsonld/01-jsonschema/Makefile b/demo/02-explorations/12-validate-jsonld/01-jsonschema/Makefile deleted file mode 100644 index 68e529c..0000000 --- a/demo/02-explorations/12-validate-jsonld/01-jsonschema/Makefile +++ /dev/null @@ -1 +0,0 @@ -include ${SHELL_NOTEBOOK_DOT_DIR}/Makefile.demo-runner diff --git a/demo/02-explorations/12-validate-jsonld/01-jsonschema/data/tro1_c.jsonld b/demo/02-explorations/12-validate-jsonld/01-jsonschema/data/tro1_c.jsonld deleted file mode 100644 index fda2e4f..0000000 --- a/demo/02-explorations/12-validate-jsonld/01-jsonschema/data/tro1_c.jsonld +++ /dev/null @@ -1,76 +0,0 @@ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [ - { - "@id": "tro", - "@type": "trov:TransparentResearchObject", - "rdfs:comment": "A composition of two files in a single arrangement endorsed by a TRS that enforces no policies", - - "trov:wasAssembledBy": { - "@id": "trs", - "@type": "trov:TrustedResearchSystem", - "rdfs:comment": "TRS that enforces no policies", - "trov:publicKey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n" - }, - - "trov:wasTimestampedBy": { - "@id": "tsa", - "@type": "trov:TimeStampingAuthority", - "trov:publicKey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n" - }, - - "trov:hasComposition": - { - "@id": "composition/1", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": - { - "@id": "fingerprint", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc" - }, - - "trov:hasArtifact": [ - { - "@id": "composition/1/artifact/1", - "@type": "trov:ResearchArtifact", - "trov:mimeType": "text/plain", - "trov:sha256": "b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c" - }, - - { - "@id": "composition/1/artifact/2", - "@type": "trov:ResearchArtifact", - "trov:mimeType": "text/plain", - "trov:sha256": "7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730" - }] - }, - - "trov:hasArrangement": [ - { - "@id": "arrangement/1", - "@type": "trov:ArtifactArrangement", - "trov:hasLocus": [ - { - "@id": "arrangement/1/locus/1", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, - "trov:hasLocation": "file1" - }, - { - "@id": "arrangement/1/locus/2", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/2" }, - "trov:hasLocation": "file2" - } - ] - }] - } -]} diff --git a/demo/02-explorations/12-validate-jsonld/01-jsonschema/data/tro1_w.jsonld b/demo/02-explorations/12-validate-jsonld/01-jsonschema/data/tro1_w.jsonld deleted file mode 100644 index 47ff9c2..0000000 --- a/demo/02-explorations/12-validate-jsonld/01-jsonschema/data/tro1_w.jsonld +++ /dev/null @@ -1,70 +0,0 @@ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [ - { - "@id": "tro", - "@type": "trov:TransparentResearchObject", - "rdfs:comment": "A composition of two files in a single arrangement endorsed by a TRS that enforces no policies", - - "trov:wasAssembledBy": { - "@id": "trs", - "@type": "trov:TrustedResearchSystem", - "rdfs:comment": "TRS that enforces no policies", - "trov:publicKey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n" - }, - - "trov:hasComposition": - { - "@id": "composition/1", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": - { - "@id": "fingerprint", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc" - }, - - "trov:hasArtifact": [ - { - "@id": "composition/1/artifact/1", - "@type": "trov:ResearchArtifact", - "trov:mimeType": "text/plain", - "trov:sha256": "b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c" - }, - - { - "@id": "composition/1/artifact/2", - "@type": "trov:ResearchArtifact", - "trov:mimeType": "text/plain", - "trov:sha256": "7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730" - }] - }, - - "trov:hasArrangement": [ - { - "@id": "arrangement/1", - "@type": "trov:ArtifactArrangement", - "trov:hasLocus": [ - { - "@id": "arrangement/1/locus/1", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, - "trov:hasLocation": "file1" - }, - { - "@id": "arrangement/1/locus/2", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/2" }, - "trov:hasLocation": "file2" - } - ] - }] - } -]} diff --git a/demo/02-explorations/12-validate-jsonld/01-jsonschema/run.sh b/demo/02-explorations/12-validate-jsonld/01-jsonschema/run.sh deleted file mode 100644 index 6fc0d24..0000000 --- a/demo/02-explorations/12-validate-jsonld/01-jsonschema/run.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash - -TRO_SCHEMA_FILE_PATH=tro.schema.json - -# ------------------------------------------------------------------------------ - -bash_cell 'validate tro1.jsonld' << END_CELL - -validate_jsonld --jsonldpath "data/tro1_c.jsonld" --schemapath "${TRO_SCHEMA_FILE_PATH}" - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'validate tro2.jsonld' << END_CELL - -python3 2>&1 << END_PYTHON - -from trace_model.validate_jsonld import validate_tro - -validate_tro("data/tro1_w.jsonld", "${TRO_SCHEMA_FILE_PATH}") - -END_PYTHON - -END_CELL - -# ------------------------------------------------------------------------------ diff --git a/demo/02-explorations/12-validate-jsonld/01-jsonschema/run.txt b/demo/02-explorations/12-validate-jsonld/01-jsonschema/run.txt deleted file mode 100644 index fe9be2a..0000000 --- a/demo/02-explorations/12-validate-jsonld/01-jsonschema/run.txt +++ /dev/null @@ -1,152 +0,0 @@ -================================================= bash cell | validate tro1.jsonld ================================================= - -validate_jsonld --jsonldpath "data/tro1_c.jsonld" --schemapath "tro.schema.json" - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -Is a valid TRO JSON-LD file. -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -================================================= bash cell | validate tro2.jsonld ================================================= - -python3 2>&1 << END_PYTHON - -from trace_model.validate_jsonld import validate_tro - -validate_tro("data/tro1_w.jsonld", "tro.schema.json") - -END_PYTHON - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -Traceback (most recent call last): - File "", line 4, in - File "/mnt/trace-model/src/trace_model/validate_jsonld.py", line 14, in validate_tro - validator.validate(instance=tro_jsonld) - File "/mnt/trace-model/.python-dev/.local/lib/python3.10/site-packages/jsonschema/validators.py", line 435, in validate - raise error -jsonschema.exceptions.ValidationError: 'trov:wasTimestampedBy' is a required property - -Failed validating 'required' in schema['properties']['@graph']['items']: - {'properties': {'@id': {'type': 'string'}, - '@type': {'type': 'string'}, - 'rdfs:comment': {'type': 'string'}, - 'trov:hasArrangement': {'items': {'properties': {'@id': {'type': 'string'}, - '@type': {'type': 'string'}, - 'rdfs:comment': {'type': 'string'}, - 'trov:hasLocus': {'items': {'properties': {'@id': {'type': 'string'}, - '@type': {'type': 'string'}, - 'trov:hasArtifact': {'properties': {'@id': {'type': 'string'}}, - 'type': 'object'}, - 'trov:hasLocation': {'type': 'string'}}, - 'type': 'object'}, - 'type': 'array'}}, - 'type': 'object'}, - 'type': 'array'}, - 'trov:hasAttribute': {'items': {'properties': {'@id': {'type': 'string'}, - '@type': {'type': 'string'}, - 'trov:warrantedBy': {'items': {'properties': {'@id': {'type': 'string'}}, - 'type': 'object'}, - 'type': 'array'}}, - 'type': 'object'}, - 'type': 'array'}, - 'trov:hasComposition': {'properties': {'@id': {'type': 'string'}, - '@type': {'type': 'string'}, - 'trov:hasArtifact': {'items': {'properties': {'@id': {'type': 'string'}, - '@type': {'type': 'string'}, - 'rdfs:comment': {'type': 'string'}, - 'trov:mimeType': {'type': 'string'}, - 'trov:sha256': {'type': 'string'}}, - 'type': 'object'}, - 'type': 'array'}, - 'trov:hasFingerprint': {'properties': {'@id': {'type': 'string'}, - '@type': {'type': 'string'}, - 'trov:sha256': {'type': 'string'}}, - 'type': 'object'}}, - 'type': 'object'}, - 'trov:hasPerformance': {'items': {'properties': {'@id': {'type': 'string'}, - '@type': {'type': 'string'}, - 'rdfs:comment': {'type': 'string'}, - 'trov:accessedArrangement': {'properties': {'@id': {'type': 'string'}}, - 'type': 'object'}, - 'trov:contributedToArrangement': {'properties': {'@id': {'type': 'string'}}, - 'type': 'object'}, - 'trov:endedAtTime': {'format': 'date-time', - 'type': 'string'}, - 'trov:hadPerformanceAttribute': {'properties': {'@id': {'type': 'string'}, - '@type': {'type': 'string'}, - 'trov:warrantedBy': {'properties': {'@id': {'type': 'string'}}, - 'type': 'object'}}, - 'type': 'object'}, - 'trov:startedAtTime': {'format': 'date-time', - 'type': 'string'}, - 'trov:wasConductedBy': {'properties': {'@id': {'type': 'string'}}, - 'type': 'object'}}, - 'type': 'object'}, - 'type': 'array'}, - 'trov:wasAssembledBy': {'properties': {'@id': {'type': 'string'}, - '@type': {'type': 'string'}, - 'rdfs:comment': {'type': 'string'}, - 'trov:hasCapability': {'items': {'properties': {'@id': {'type': 'string'}, - '@type': {'type': 'string'}}, - 'type': 'object'}, - 'type': 'array'}, - 'trov:publicKey': {'type': 'string'}}, - 'type': 'object'}, - 'trov:wasTimestampedBy': {'properties': {'@id': {'type': 'string'}, - '@type': {'type': 'string'}, - 'trov:publicKey': {'type': 'string'}}, - 'type': 'object'}}, - 'required': ['trov:wasAssembledBy', - 'trov:wasTimestampedBy', - 'trov:hasComposition', - 'trov:hasArrangement'], - 'type': 'object'} - -On instance['@graph'][0]: - {'@id': 'tro', - '@type': 'trov:TransparentResearchObject', - 'rdfs:comment': 'A composition of two files in a single arrangement ' - 'endorsed by a TRS that enforces no policies', - 'trov:hasArrangement': [{'@id': 'arrangement/1', - '@type': 'trov:ArtifactArrangement', - 'trov:hasLocus': [{'@id': 'arrangement/1/locus/1', - '@type': 'trov:ArtifactLocus', - 'trov:hasArtifact': {'@id': 'composition/1/artifact/1'}, - 'trov:hasLocation': 'file1'}, - {'@id': 'arrangement/1/locus/2', - '@type': 'trov:ArtifactLocus', - 'trov:hasArtifact': {'@id': 'composition/1/artifact/2'}, - 'trov:hasLocation': 'file2'}]}], - 'trov:hasComposition': {'@id': 'composition/1', - '@type': 'trov:ArtifactComposition', - 'trov:hasArtifact': [{'@id': 'composition/1/artifact/1', - '@type': 'trov:ResearchArtifact', - 'trov:mimeType': 'text/plain', - 'trov:sha256': 'b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c'}, - {'@id': 'composition/1/artifact/2', - '@type': 'trov:ResearchArtifact', - 'trov:mimeType': 'text/plain', - 'trov:sha256': '7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730'}], - 'trov:hasFingerprint': {'@id': 'fingerprint', - '@type': 'trov:CompositionFingerprint', - 'trov:sha256': '218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc'}}, - 'trov:wasAssembledBy': {'@id': 'trs', - '@type': 'trov:TrustedResearchSystem', - 'rdfs:comment': 'TRS that enforces no ' - 'policies', - 'trov:publicKey': '-----BEGIN PGP PUBLIC KEY ' - 'BLOCK-----\n' - 'mI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\n' - 'PFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\n' - 'TbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\n' - 'HXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\n' - 'HbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\n' - 'CRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\n' - 'xrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\n' - 'IsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n' - '=vuaX\n' - '-----END PGP PUBLIC KEY ' - 'BLOCK-----\n'}} -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - diff --git a/demo/02-explorations/12-validate-jsonld/01-jsonschema/tro.schema.json b/demo/02-explorations/12-validate-jsonld/01-jsonschema/tro.schema.json deleted file mode 100644 index b6e7255..0000000 --- a/demo/02-explorations/12-validate-jsonld/01-jsonschema/tro.schema.json +++ /dev/null @@ -1,171 +0,0 @@ -{ - "type": "object", - "properties": { - "@context": {"type": "array"}, - "@graph": { - "type": "array", - "items": { - "type": "object", - "properties": { - "@id": {"type": "string"}, - "@type": {"type": "string"}, - "rdfs:comment": {"type": "string"}, - "trov:wasAssembledBy": { - "type": "object", - "properties": { - "@id": {"type": "string"}, - "@type": {"type": "string"}, - "rdfs:comment": {"type": "string"}, - "trov:publicKey": {"type": "string"}, - "trov:hasCapability":{ - "type": "array", - "items": { - "type": "object", - "properties": { - "@id": {"type": "string"}, - "@type": {"type": "string"} - } - } - } - } - }, - "trov:wasTimestampedBy": { - "type": "object", - "properties": { - "@id": {"type": "string"}, - "@type": {"type": "string"}, - "trov:publicKey": {"type": "string"} - } - }, - "trov:hasAttribute": { - "type": "array", - "items": { - "type": "object", - "properties": { - "@id": {"type": "string"}, - "@type": {"type": "string"}, - "trov:warrantedBy": { - "type": "array", - "items": { - "type": "object", - "properties": { - "@id": {"type": "string"} - } - } - } - } - } - }, - "trov:hasComposition": { - "type": "object", - "properties": { - "@id": {"type": "string"}, - "@type": {"type": "string"}, - "trov:hasFingerprint": { - "type": "object", - "properties": { - "@id": {"type": "string"}, - "@type": {"type": "string"}, - "trov:sha256": {"type": "string"} - } - }, - "trov:hasArtifact": { - "type": "array", - "items": { - "type": "object", - "properties": { - "@id": {"type": "string"}, - "@type": {"type": "string"}, - "rdfs:comment": {"type": "string"}, - "trov:mimeType": {"type": "string"}, - "trov:sha256": {"type": "string"} - } - } - } - } - }, - "trov:hasArrangement": { - "type": "array", - "items": { - "type": "object", - "properties": { - "@id": {"type": "string"}, - "@type": {"type": "string"}, - "rdfs:comment": {"type": "string"}, - "trov:hasLocus": { - "type": "array", - "items": { - "type": "object", - "properties": { - "@id": {"type": "string"}, - "@type": {"type": "string"}, - "trov:hasArtifact": { - "type": "object", - "properties": { - "@id": {"type": "string"} - } - }, - "trov:hasLocation": {"type": "string"} - } - } - } - } - } - }, - "trov:hasPerformance": { - "type": "array", - "items": { - "type": "object", - "properties": { - "@id": {"type": "string"}, - "@type": {"type": "string"}, - "rdfs:comment": {"type": "string"}, - "trov:wasConductedBy": { - "type": "object", - "properties": { - "@id": {"type": "string"} - } - }, - "trov:startedAtTime": { - "type": "string", - "format": "date-time" - }, - "trov:endedAtTime": { - "type": "string", - "format": "date-time" - }, - "trov:accessedArrangement": { - "type": "object", - "properties": { - "@id": {"type": "string"} - } - }, - "trov:contributedToArrangement": { - "type": "object", - "properties": { - "@id": {"type": "string"} - } - }, - "trov:hadPerformanceAttribute": { - "type": "object", - "properties": { - "@id": {"type": "string"}, - "@type": {"type": "string"}, - "trov:warrantedBy": { - "type": "object", - "properties": { - "@id": {"type": "string"} - } - } - } - } - } - } - } - }, - "required": ["trov:wasAssembledBy", "trov:wasTimestampedBy", "trov:hasComposition", "trov:hasArrangement"] - } - } - }, - "required": ["@context", "@graph"] -} \ No newline at end of file diff --git a/demo/02-explorations/12-validate-jsonld/02-rdflib-owlrl/Makefile b/demo/02-explorations/12-validate-jsonld/02-rdflib-owlrl/Makefile deleted file mode 100644 index 68e529c..0000000 --- a/demo/02-explorations/12-validate-jsonld/02-rdflib-owlrl/Makefile +++ /dev/null @@ -1 +0,0 @@ -include ${SHELL_NOTEBOOK_DOT_DIR}/Makefile.demo-runner diff --git a/demo/02-explorations/12-validate-jsonld/02-rdflib-owlrl/data/tro1.jsonld b/demo/02-explorations/12-validate-jsonld/02-rdflib-owlrl/data/tro1.jsonld deleted file mode 100644 index fda2e4f..0000000 --- a/demo/02-explorations/12-validate-jsonld/02-rdflib-owlrl/data/tro1.jsonld +++ /dev/null @@ -1,76 +0,0 @@ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [ - { - "@id": "tro", - "@type": "trov:TransparentResearchObject", - "rdfs:comment": "A composition of two files in a single arrangement endorsed by a TRS that enforces no policies", - - "trov:wasAssembledBy": { - "@id": "trs", - "@type": "trov:TrustedResearchSystem", - "rdfs:comment": "TRS that enforces no policies", - "trov:publicKey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n" - }, - - "trov:wasTimestampedBy": { - "@id": "tsa", - "@type": "trov:TimeStampingAuthority", - "trov:publicKey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n" - }, - - "trov:hasComposition": - { - "@id": "composition/1", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": - { - "@id": "fingerprint", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc" - }, - - "trov:hasArtifact": [ - { - "@id": "composition/1/artifact/1", - "@type": "trov:ResearchArtifact", - "trov:mimeType": "text/plain", - "trov:sha256": "b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c" - }, - - { - "@id": "composition/1/artifact/2", - "@type": "trov:ResearchArtifact", - "trov:mimeType": "text/plain", - "trov:sha256": "7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730" - }] - }, - - "trov:hasArrangement": [ - { - "@id": "arrangement/1", - "@type": "trov:ArtifactArrangement", - "trov:hasLocus": [ - { - "@id": "arrangement/1/locus/1", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, - "trov:hasLocation": "file1" - }, - { - "@id": "arrangement/1/locus/2", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/2" }, - "trov:hasLocation": "file2" - } - ] - }] - } -]} diff --git a/demo/02-explorations/12-validate-jsonld/02-rdflib-owlrl/data/tro2.jsonld b/demo/02-explorations/12-validate-jsonld/02-rdflib-owlrl/data/tro2.jsonld deleted file mode 100644 index 08776da..0000000 --- a/demo/02-explorations/12-validate-jsonld/02-rdflib-owlrl/data/tro2.jsonld +++ /dev/null @@ -1,102 +0,0 @@ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [ - { - "@id": "tro", - "@type": "trov:TransparentResearchObject", - "rdfs:comment": "A composition of two files in a single arrangement endorsed by a TRS that enforces no policies", - - "trov:wasAssembledBy": { - "@id": "trs", - "@type": "trov:TrustedResearchSystem", - "rdfs:comment": "TRS that enforces no policies", - "trov:publicKey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n" - }, - - "trov:wasTimestampedBy": { - "@id": "tsa", - "@type": "trov:TimeStampingAuthority", - "trov:publicKey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n" - }, - - "trov:hasComposition": [ - { - "@id": "composition/1", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": - { - "@id": "fingerprint", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc" - }, - - "trov:hasArtifact": [ - { - "@id": "composition/1/artifact/1", - "@type": "trov:ResearchArtifact", - "trov:mimeType": "text/plain", - "trov:sha256": "b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c" - }, - - { - "@id": "composition/1/artifact/2", - "@type": "trov:ResearchArtifact", - "trov:mimeType": "text/plain", - "trov:sha256": "7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730" - }] - }, - { - "@id": "composition/2", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": - { - "@id": "fingerprint", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc" - } - }], - - "trov:hasArrangement": [ - { - "@id": "arrangement/1", - "@type": "trov:ArtifactArrangement", - "trov:hasLocus": [ - { - "@id": "arrangement/1/locus/1", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, - "trov:hasLocation": "file1" - }, - { - "@id": "arrangement/1/locus/2", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, - "trov:hasLocation": "file1" - }, - { - "@id": "arrangement/1/locus/3", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/2" }, - "trov:hasLocation": "file2" - }, - { - "@id": "arrangement/1/locus/4", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/12" }, - "trov:hasLocation": "file2" - } - ] - }] - }, - { "@id": "trs", "trov:publicKey": "The second one" }, - { "@id": "tsa", "trov:publicKey": "The second one" }, - { "@id": "fingerprint", "trov:sha256": "The second one" } -]} diff --git a/demo/02-explorations/12-validate-jsonld/02-rdflib-owlrl/run.sh b/demo/02-explorations/12-validate-jsonld/02-rdflib-owlrl/run.sh deleted file mode 100644 index 91471f4..0000000 --- a/demo/02-explorations/12-validate-jsonld/02-rdflib-owlrl/run.sh +++ /dev/null @@ -1,282 +0,0 @@ -#!/usr/bin/env bash - -# ------------------------------------------------------------------------------ - -bash_cell 'rdflib without inferences' << END_CELL - -python3 << END_PYTHON - -from rdflib import Graph - -with open("data/tro1.jsonld") as fin: - tro_jsonld = fin.read() - -# Load JSON-LD file with RDFLib -g = Graph() -g.parse(data=tro_jsonld, format="json-ld") - -# Query the imported triples -q = """ - SELECT ?s ?p ?o - WHERE { - ?s ?p ?o - } - ORDER BY ?s ?p ?o - """ - -for r in g.query(q): - print(r) - -END_PYTHON - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'rdflib with inferences: RDFS semantics' << END_CELL - -python3 << END_PYTHON - -from rdflib import Graph -from owlrl import DeductiveClosure, RDFS_Semantics - -with open("data/tro1.jsonld") as fin: - tro_jsonld = fin.read() - -# Load JSON-LD file with RDFLib -g = Graph() -g.parse(data=tro_jsonld, format="json-ld") - -# RDFS_Semantics: implementing the RDFS semantics. -DeductiveClosure(RDFS_Semantics).expand(g) - -# Query the imported triples -q = """ - SELECT ?s ?p ?o - WHERE { - ?s ?p ?o - } - ORDER BY ?s ?p ?o - """ - -for r in g.query(q): - print(r) - -END_PYTHON - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'rdflib with inferences: OWL 2 RL' << END_CELL - -python3 << END_PYTHON - -from rdflib import Graph -from owlrl import DeductiveClosure, OWLRL_Semantics - -with open("data/tro1.jsonld") as fin: - tro_jsonld = fin.read() - -# Load JSON-LD file with RDFLib -g = Graph() -g.parse(data=tro_jsonld, format="json-ld") - -# OWLRL_Semantics: implementing the OWL 2 RL. -DeductiveClosure(OWLRL_Semantics).expand(g) - -# Query the imported triples -q = """ - SELECT ?s ?p ?o - WHERE { - ?s ?p ?o - } - ORDER BY ?s ?p ?o - """ - -for r in g.query(q): - print(r) - -END_PYTHON - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'rdflib with inferences: a combined semantics of RDFS semantics and OWL 2 RL' << END_CELL - -python3 << END_PYTHON - -from rdflib import Graph -from owlrl import DeductiveClosure, RDFS_OWLRL_Semantics - -with open("data/tro1.jsonld") as fin: - tro_jsonld = fin.read() - -# Load JSON-LD file with RDFLib -g = Graph() -g.parse(data=tro_jsonld, format="json-ld") - -# RDFS_OWLRL_Semantics: implementing a combined semantics of RDFS semantics and OWL 2 RL. -DeductiveClosure(RDFS_OWLRL_Semantics).expand(g) - -# Query the imported triples -q = """ - SELECT ?s ?p ?o - WHERE { - ?s ?p ?o - } - ORDER BY ?s ?p ?o - """ - -for r in g.query(q): - print(r) - -END_PYTHON - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'rdflib validate tro2.jsonld' << END_CELL - -python3 << END_PYTHON - -from rdflib import Graph - -with open("data/tro2.jsonld") as fin: - tro_jsonld = fin.read() - -# Load JSON-LD file with RDFLib -g = Graph() -g.parse(data=tro_jsonld, format="json-ld") - -# Query the imported triples - -# 1) TRS with a public key -q = """ - ASK { - SELECT ?trs { - ?tro trov:wasAssembledBy ?trs . - ?trs trov:publicKey ?trs_pk . - } GROUP BY ?trs HAVING (count(*) = 1) - } -""" -res1 = bool(g.query(q)) -print("Validate that a TRO Declaration has a TRS with a public key: " + ("PASS" if res1 else "FAIL")) - -# 2) TSA with public key -## Method 1 -q = """ - ASK { - { - SELECT (COUNT(*) AS ?c1) - WHERE { - SELECT ?tsa { - ?tro trov:wasTimestampedBy ?tsa . - ?tsa trov:publicKey ?tsa_pk . - } GROUP BY ?tsa HAVING (count(*) = 1) - } - } - - { - SELECT (COUNT(*) AS ?c2) { - ?tro trov:wasTimestampedBy ?tsa . - } - } - FILTER (?c2 = 0 || ?c1 = ?c2) - } - """ -res2 = bool(g.query(q)) -print("Validate that a TRO Declaration has (1) NO TSA or (2) ONE TSA with a public key: [method 1]" + ("PASS" if res2 else "FAIL")) - -## Method 2 (negation: do NOT have TSA with multiple public keys) -q = """ - ASK { - { - SELECT (COUNT(*) AS ?c1) - WHERE { - SELECT ?tsa { - ?tro trov:wasTimestampedBy ?tsa . - ?tsa trov:publicKey ?tsa_pk . - } GROUP BY ?tsa HAVING (count(*) > 1) - } - } - FILTER (?c1 = 0) - } -""" -res2 = bool(g.query(q)) -print("Validate that a TRO Declaration has (1) NO TSA or (2) ONE TSA with a public key: [method 2]" + ("PASS" if res2 else "FAIL")) - -# 3) Composition with a fingerprint -q = """ - ASK { - { - SELECT ?comp { - ?tro trov:hasComposition ?comp . - ?comp trov:hasFingerprint/trov:sha256 ?comp_fp . - } GROUP BY ?comp HAVING (count(*) = 1) - } - } - """ -res3 = bool(g.query(q)) -print("Validate that a TRO Declaration has at least a composition and each composition has exactly ONE fingerprint: " + ("PASS" if res3 else "FAIL")) - -# 4) Composition with at least an artifact -q = """ - ASK { - { - SELECT (COUNT(?comp) AS ?c1) - WHERE{ - SELECT ?comp { - ?tro trov:hasComposition ?comp . - ?comp trov:hasArtifact/trov:sha256 ?art_digest . - } GROUP BY ?comp} - } - - { - SELECT (COUNT(?comp) AS ?c2) { - ?tro trov:hasComposition ?comp . - } - } - FILTER (?c1 = ?c2) - } - """ -res4 = bool(g.query(q)) -print("Validate that a TRO Declaration has at least a composition and each composition has at least an artifact: " + ("PASS" if res4 else "FAIL")) - -# 5) Arrangement with validate artifacts -q = """ - ASK { - { - SELECT (COUNT(*) AS ?c1) - WHERE { - ?tro trov:hasArrangement ?arr . - ?arr trov:hasLocus/trov:hasArtifact ?art . - } - } - - { - SELECT (COUNT(*) AS ?c2) - WHERE { - ?tro trov:hasArrangement ?arr . - ?arr trov:hasLocus/trov:hasArtifact/trov:sha256 ?art_digest . - } - } - FILTER (?c1 = ?c2) - } -""" - -res5 = bool(g.query(q)) -print("Validate that a TRO Declaration has arrangement(s) with valid artifacts: " + ("PASS" if res5 else "FAIL")) - -if res1 and res2 and res3 and res4 and res5: - print("This is a valid TRO Declaration!!!") -else: - print("This is NOT a valid TRO Declaration!!!") - -END_PYTHON - -END_CELL - -# ------------------------------------------------------------------------------ diff --git a/demo/02-explorations/12-validate-jsonld/02-rdflib-owlrl/run.txt b/demo/02-explorations/12-validate-jsonld/02-rdflib-owlrl/run.txt deleted file mode 100644 index c3fe018..0000000 --- a/demo/02-explorations/12-validate-jsonld/02-rdflib-owlrl/run.txt +++ /dev/null @@ -1,1075 +0,0 @@ -============================================== bash cell | rdflib without inferences =============================================== - -python3 << END_PYTHON - -from rdflib import Graph - -with open("data/tro1.jsonld") as fin: - tro_jsonld = fin.read() - -# Load JSON-LD file with RDFLib -g = Graph() -g.parse(data=tro_jsonld, format="json-ld") - -# Query the imported triples -q = """ - SELECT ?s ?p ?o - WHERE { - ?s ?p ?o - } - ORDER BY ?s ?p ?o - """ - -for r in g.query(q): - print(r) - -END_PYTHON - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactArrangement')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocus'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocus'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactLocus')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocation'), rdflib.term.Literal('file1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactLocus')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocation'), rdflib.term.Literal('file2')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactComposition')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasFingerprint'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/fingerprint')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ResearchArtifact')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#mimeType'), rdflib.term.Literal('text/plain')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#sha256'), rdflib.term.Literal('b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ResearchArtifact')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#mimeType'), rdflib.term.Literal('text/plain')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#sha256'), rdflib.term.Literal('7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/fingerprint'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#CompositionFingerprint')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/fingerprint'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#sha256'), rdflib.term.Literal('218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TransparentResearchObject')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#comment'), rdflib.term.Literal('A composition of two files in a single arrangement endorsed by a TRS that enforces no policies')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArrangement'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasComposition'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasAssembledBy'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/trs')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasTimestampedBy'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tsa')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/trs'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TrustedResearchSystem')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/trs'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#comment'), rdflib.term.Literal('TRS that enforces no policies')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/trs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#publicKey'), rdflib.term.Literal('-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tsa'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TimeStampingAuthority')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tsa'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#publicKey'), rdflib.term.Literal('-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n')) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -======================================== bash cell | rdflib with inferences: RDFS semantics ======================================== - -python3 << END_PYTHON - -from rdflib import Graph -from owlrl import DeductiveClosure, RDFS_Semantics - -with open("data/tro1.jsonld") as fin: - tro_jsonld = fin.read() - -# Load JSON-LD file with RDFLib -g = Graph() -g.parse(data=tro_jsonld, format="json-ld") - -# RDFS_Semantics: implementing the RDFS semantics. -DeductiveClosure(RDFS_Semantics).expand(g) - -# Query the imported triples -q = """ - SELECT ?s ?p ?o - WHERE { - ?s ?p ?o - } - ORDER BY ?s ?p ?o - """ - -for r in g.query(q): - print(r) - -END_PYTHON - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#comment'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#comment'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#comment')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactArrangement')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocus'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocus'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactLocus')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocation'), rdflib.term.Literal('file1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactLocus')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocation'), rdflib.term.Literal('file2')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactComposition')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasFingerprint'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/fingerprint')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ResearchArtifact')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#mimeType'), rdflib.term.Literal('text/plain')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#sha256'), rdflib.term.Literal('b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ResearchArtifact')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#mimeType'), rdflib.term.Literal('text/plain')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#sha256'), rdflib.term.Literal('7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/fingerprint'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/fingerprint'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#CompositionFingerprint')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/fingerprint'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#sha256'), rdflib.term.Literal('218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TransparentResearchObject')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#comment'), rdflib.term.Literal('A composition of two files in a single arrangement endorsed by a TRS that enforces no policies')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArrangement'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasComposition'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasAssembledBy'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/trs')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasTimestampedBy'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tsa')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/trs'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/trs'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TrustedResearchSystem')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/trs'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#comment'), rdflib.term.Literal('TRS that enforces no policies')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/trs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#publicKey'), rdflib.term.Literal('-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tsa'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tsa'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TimeStampingAuthority')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tsa'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#publicKey'), rdflib.term.Literal('-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactArrangement'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactComposition'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactLocus'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#CompositionFingerprint'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ResearchArtifact'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TimeStampingAuthority'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TransparentResearchObject'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TrustedResearchSystem'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArrangement'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArrangement'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArrangement')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasComposition'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasComposition'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasComposition')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasFingerprint'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasFingerprint'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasFingerprint')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocation'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocation'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocation')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocus'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocus'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocus')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#mimeType'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#mimeType'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#mimeType')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#publicKey'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#publicKey'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#publicKey')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#sha256'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#sha256'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#sha256')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasAssembledBy'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasAssembledBy'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasAssembledBy')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasTimestampedBy'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasTimestampedBy'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasTimestampedBy')) -(rdflib.term.Literal('-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.Literal('218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.Literal('7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.Literal('A composition of two files in a single arrangement endorsed by a TRS that enforces no policies'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.Literal('TRS that enforces no policies'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.Literal('b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.Literal('file1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.Literal('file2'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.Literal('text/plain'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -=========================================== bash cell | rdflib with inferences: OWL 2 RL =========================================== - -python3 << END_PYTHON - -from rdflib import Graph -from owlrl import DeductiveClosure, OWLRL_Semantics - -with open("data/tro1.jsonld") as fin: - tro_jsonld = fin.read() - -# Load JSON-LD file with RDFLib -g = Graph() -g.parse(data=tro_jsonld, format="json-ld") - -# OWLRL_Semantics: implementing the OWL 2 RL. -DeductiveClosure(OWLRL_Semantics).expand(g) - -# Query the imported triples -q = """ - SELECT ?s ?p ?o - WHERE { - ?s ?p ?o - } - ORDER BY ?s ?p ?o - """ - -for r in g.query(q): - print(r) - -END_PYTHON - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#PlainLiteral'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#PlainLiteral'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#PlainLiteral')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#langString'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#langString'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#langString')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#comment'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#AnnotationProperty')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#comment'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#comment')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#isDefinedBy'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#AnnotationProperty')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#isDefinedBy'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#isDefinedBy')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#label'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#AnnotationProperty')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#label'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#label')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#seeAlso'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#AnnotationProperty')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#seeAlso'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#seeAlso')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#NCName'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#NCName'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#NCName')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#NMTOKEN'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#NMTOKEN'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#NMTOKEN')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#Name'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#Name'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#Name')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#anyURI'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#anyURI'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#anyURI')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#base64Binary'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#base64Binary'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#base64Binary')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#boolean'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#boolean'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#boolean')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#byte'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#byte'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#byte')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#date'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#date'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#date')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#dateTime'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#dateTime'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#dateTime')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#dateTimeStamp'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#dateTimeStamp'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#dateTimeStamp')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#decimal'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#decimal'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#decimal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#double'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#double'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#double')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#float'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#float'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#float')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#hexBinary'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#hexBinary'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#hexBinary')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#int'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#int'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#int')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#integer'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#integer'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#integer')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#language'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#language'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#language')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#long'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#long'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#long')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#negativeInteger'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#negativeInteger'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#negativeInteger')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#nonNegativeInteger'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#nonNegativeInteger'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#nonNegativeInteger')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#nonPositiveInteger'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#nonPositiveInteger'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#nonPositiveInteger')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#normalizedString'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#normalizedString'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#normalizedString')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#positiveInteger'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#positiveInteger'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#positiveInteger')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#short'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#short'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#short')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#string'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#string'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#string')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#time'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#time'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#time')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#token'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#token'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#token')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedByte'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedByte'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedByte')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedInt'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedInt'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedInt')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedLong'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedLong'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedLong')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedShort'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedShort'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedShort')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#AnnotationProperty'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#AnnotationProperty')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Class'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Class')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Nothing'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Class')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Nothing'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Nothing')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Nothing'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Nothing'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Nothing')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Nothing'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Nothing')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Class')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#backwardCompatibleWith'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#AnnotationProperty')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#backwardCompatibleWith'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#backwardCompatibleWith')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#deprecated'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#AnnotationProperty')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#deprecated'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#deprecated')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#incompatibleWith'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#AnnotationProperty')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#incompatibleWith'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#incompatibleWith')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#priorVersion'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#AnnotationProperty')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#priorVersion'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#priorVersion')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#versionInfo'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#AnnotationProperty')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#versionInfo'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#versionInfo')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactArrangement')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocus'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocus'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactLocus')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/1'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocation'), rdflib.term.Literal('file1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactLocus')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocation'), rdflib.term.Literal('file2')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactComposition')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasFingerprint'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/fingerprint')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ResearchArtifact')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#mimeType'), rdflib.term.Literal('text/plain')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#sha256'), rdflib.term.Literal('b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ResearchArtifact')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#mimeType'), rdflib.term.Literal('text/plain')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#sha256'), rdflib.term.Literal('7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/fingerprint'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#CompositionFingerprint')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/fingerprint'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/fingerprint')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/fingerprint'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#sha256'), rdflib.term.Literal('218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TransparentResearchObject')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#comment'), rdflib.term.Literal('A composition of two files in a single arrangement endorsed by a TRS that enforces no policies')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArrangement'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasComposition'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasAssembledBy'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/trs')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasTimestampedBy'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tsa')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/trs'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TrustedResearchSystem')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/trs'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#comment'), rdflib.term.Literal('TRS that enforces no policies')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/trs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/trs')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/trs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#publicKey'), rdflib.term.Literal('-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tsa'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TimeStampingAuthority')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tsa'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tsa')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tsa'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#publicKey'), rdflib.term.Literal('-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactArrangement'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactArrangement')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactComposition'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactComposition')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactLocus'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactLocus')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#CompositionFingerprint'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#CompositionFingerprint')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ResearchArtifact'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ResearchArtifact')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TimeStampingAuthority'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TimeStampingAuthority')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TransparentResearchObject'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TransparentResearchObject')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TrustedResearchSystem'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TrustedResearchSystem')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArrangement'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArrangement')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasComposition'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasComposition')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasFingerprint'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasFingerprint')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocation'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocation')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocus'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocus')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#mimeType'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#mimeType')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#publicKey'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#publicKey')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#sha256'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#sha256')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasAssembledBy'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasAssembledBy')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasTimestampedBy'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasTimestampedBy')) -(rdflib.term.Literal('-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.Literal('-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n')) -(rdflib.term.Literal('218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.Literal('218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc')) -(rdflib.term.Literal('7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.Literal('7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730')) -(rdflib.term.Literal('A composition of two files in a single arrangement endorsed by a TRS that enforces no policies'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.Literal('A composition of two files in a single arrangement endorsed by a TRS that enforces no policies')) -(rdflib.term.Literal('TRS that enforces no policies'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.Literal('TRS that enforces no policies')) -(rdflib.term.Literal('b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.Literal('b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c')) -(rdflib.term.Literal('file1'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.Literal('file1')) -(rdflib.term.Literal('file2'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.Literal('file2')) -(rdflib.term.Literal('text/plain'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.Literal('text/plain')) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -===================== bash cell | rdflib with inferences: a combined semantics of RDFS semantics and OWL 2 RL ====================== - -python3 << END_PYTHON - -from rdflib import Graph -from owlrl import DeductiveClosure, RDFS_OWLRL_Semantics - -with open("data/tro1.jsonld") as fin: - tro_jsonld = fin.read() - -# Load JSON-LD file with RDFLib -g = Graph() -g.parse(data=tro_jsonld, format="json-ld") - -# RDFS_OWLRL_Semantics: implementing a combined semantics of RDFS semantics and OWL 2 RL. -DeductiveClosure(RDFS_OWLRL_Semantics).expand(g) - -# Query the imported triples -q = """ - SELECT ?s ?p ?o - WHERE { - ?s ?p ?o - } - ORDER BY ?s ?p ?o - """ - -for r in g.query(q): - print(r) - -END_PYTHON - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#PlainLiteral'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#PlainLiteral'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#PlainLiteral'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#PlainLiteral'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#PlainLiteral'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#PlainLiteral'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#PlainLiteral')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#langString'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#langString'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#langString'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#langString'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#langString'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#langString'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#langString')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentProperty'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type')) -(rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Class'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Class'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Class'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Class')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Class'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Class')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Class'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Class')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Class'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Class')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Class'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Class')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#comment'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#comment'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#comment'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#AnnotationProperty')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#comment'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#comment'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#comment')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#comment'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentProperty'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#comment')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#comment'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#comment')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#isDefinedBy'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#isDefinedBy'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#AnnotationProperty')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#isDefinedBy'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#isDefinedBy'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#isDefinedBy')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#label'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#label'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#AnnotationProperty')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#label'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#label'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#label')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#seeAlso'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#seeAlso'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#AnnotationProperty')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#seeAlso'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#seeAlso'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#seeAlso')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentProperty'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentProperty'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf')) -(rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#NCName'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#NCName'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#NCName'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#NCName'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#NCName'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#NCName'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#NCName')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#NMTOKEN'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#NMTOKEN'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#NMTOKEN'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#NMTOKEN'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#NMTOKEN'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#NMTOKEN'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#NMTOKEN')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#Name'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#Name'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#Name'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#Name'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#Name'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#Name'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#Name')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#anyURI'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#anyURI'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#anyURI'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#anyURI'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#anyURI'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#anyURI'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#anyURI')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#base64Binary'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#base64Binary'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#base64Binary'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#base64Binary'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#base64Binary'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#base64Binary'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#base64Binary')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#boolean'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#boolean'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#boolean'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#boolean'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#boolean'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#boolean'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#boolean')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#byte'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#byte'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#byte'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#byte'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#byte'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#byte'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#byte')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#date'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#date'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#date'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#date'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#date'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#date'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#date')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#dateTime'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#dateTime'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#dateTime'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#dateTime'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#dateTime'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#dateTime'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#dateTime')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#dateTimeStamp'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#dateTimeStamp'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#dateTimeStamp'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#dateTimeStamp'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#dateTimeStamp'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#dateTimeStamp'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#dateTimeStamp')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#decimal'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#decimal'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#decimal'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#decimal'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#decimal'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#decimal'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#decimal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#double'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#double'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#double'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#double'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#double'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#double'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#double')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#float'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#float'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#float'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#float'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#float'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#float'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#float')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#hexBinary'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#hexBinary'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#hexBinary'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#hexBinary'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#hexBinary'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#hexBinary'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#hexBinary')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#int'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#int'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#int'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#int'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#int'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#int'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#int')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#integer'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#integer'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#integer'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#integer'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#integer'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#integer'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#integer')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#language'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#language'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#language'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#language'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#language'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#language'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#language')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#long'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#long'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#long'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#long'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#long'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#long'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#long')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#negativeInteger'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#negativeInteger'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#negativeInteger'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#negativeInteger'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#negativeInteger'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#negativeInteger'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#negativeInteger')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#nonNegativeInteger'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#nonNegativeInteger'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#nonNegativeInteger'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#nonNegativeInteger'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#nonNegativeInteger'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#nonNegativeInteger'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#nonNegativeInteger')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#nonPositiveInteger'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#nonPositiveInteger'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#nonPositiveInteger'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#nonPositiveInteger'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#nonPositiveInteger'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#nonPositiveInteger'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#nonPositiveInteger')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#normalizedString'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#normalizedString'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#normalizedString'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#normalizedString'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#normalizedString'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#normalizedString'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#normalizedString')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#positiveInteger'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#positiveInteger'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#positiveInteger'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#positiveInteger'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#positiveInteger'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#positiveInteger'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#positiveInteger')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#short'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#short'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#short'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#short'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#short'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#short'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#short')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#string'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#string'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#string'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#string'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#string'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#string'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#string')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#time'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#time'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#time'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#time'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#time'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#time'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#time')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#token'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#token'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#token'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#token'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#token'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#token'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#token')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedByte'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedByte'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedByte'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedByte'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedByte'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedByte'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedByte')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedInt'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedInt'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedInt'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedInt'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedInt'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedInt'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedInt')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedLong'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedLong'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedLong'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedLong'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedLong'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedLong'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedLong')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedShort'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedShort'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedShort'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedShort'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedShort'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal')) -(rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedShort'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#unsignedShort')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#AnnotationProperty'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#AnnotationProperty'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#AnnotationProperty'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#AnnotationProperty')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Class'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Class'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Class'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Class')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Class'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Class')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Class'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Class')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Class'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Class')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Class'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Class')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Datatype')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#DataRange')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Nothing'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Class')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Nothing'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Nothing'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Class')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Nothing'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Nothing'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Nothing'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Nothing')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Nothing'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Nothing'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Nothing')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Nothing'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Nothing')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Class')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Class')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subClassOf'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#backwardCompatibleWith'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#backwardCompatibleWith'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#AnnotationProperty')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#backwardCompatibleWith'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#backwardCompatibleWith'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#backwardCompatibleWith')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#deprecated'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#deprecated'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#AnnotationProperty')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#deprecated'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#deprecated'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#deprecated')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentProperty'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentClass')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentProperty'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentProperty'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentProperty')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentProperty'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentProperty'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentProperty')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentProperty'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentProperty')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#incompatibleWith'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#incompatibleWith'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#AnnotationProperty')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#incompatibleWith'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#incompatibleWith'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#incompatibleWith')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#priorVersion'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#priorVersion'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#AnnotationProperty')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#priorVersion'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#priorVersion'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#priorVersion')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentProperty'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#versionInfo'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#versionInfo'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#AnnotationProperty')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#versionInfo'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('http://www.w3.org/2002/07/owl#versionInfo'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#versionInfo')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactArrangement')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocus'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocus'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactLocus')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/1'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocation'), rdflib.term.Literal('file1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactLocus')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocation'), rdflib.term.Literal('file2')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactComposition')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasFingerprint'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/fingerprint')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ResearchArtifact')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#mimeType'), rdflib.term.Literal('text/plain')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/1'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#sha256'), rdflib.term.Literal('b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ResearchArtifact')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#mimeType'), rdflib.term.Literal('text/plain')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/2'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#sha256'), rdflib.term.Literal('7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/fingerprint'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/fingerprint'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/fingerprint'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#CompositionFingerprint')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/fingerprint'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/fingerprint')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/fingerprint'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#sha256'), rdflib.term.Literal('218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TransparentResearchObject')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#comment'), rdflib.term.Literal('A composition of two files in a single arrangement endorsed by a TRS that enforces no policies')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArrangement'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasComposition'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasAssembledBy'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/trs')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tro'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasTimestampedBy'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tsa')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/trs'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/trs'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/trs'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TrustedResearchSystem')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/trs'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#comment'), rdflib.term.Literal('TRS that enforces no policies')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/trs'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/trs')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/trs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#publicKey'), rdflib.term.Literal('-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tsa'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tsa'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tsa'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TimeStampingAuthority')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tsa'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tsa')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/tsa'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#publicKey'), rdflib.term.Literal('-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactArrangement'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactArrangement'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactArrangement'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactArrangement')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactComposition'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactComposition'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactComposition'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactComposition')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactLocus'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactLocus'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactLocus'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ArtifactLocus')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#CompositionFingerprint'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#CompositionFingerprint'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#CompositionFingerprint'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#CompositionFingerprint')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ResearchArtifact'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ResearchArtifact'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ResearchArtifact'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#ResearchArtifact')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TimeStampingAuthority'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TimeStampingAuthority'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TimeStampingAuthority'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TimeStampingAuthority')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TransparentResearchObject'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TransparentResearchObject'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TransparentResearchObject'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TransparentResearchObject')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TrustedResearchSystem'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TrustedResearchSystem'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TrustedResearchSystem'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#TrustedResearchSystem')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArrangement'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArrangement'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArrangement')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArrangement'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentProperty'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArrangement')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArrangement'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArrangement')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentProperty'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasArtifact')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasComposition'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasComposition'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasComposition')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasComposition'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentProperty'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasComposition')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasComposition'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasComposition')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasFingerprint'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasFingerprint'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasFingerprint')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasFingerprint'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentProperty'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasFingerprint')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasFingerprint'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasFingerprint')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocation'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocation'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocation')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocation'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentProperty'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocation')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocation'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocation')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocus'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocus'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocus')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocus'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentProperty'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocus')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocus'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#hasLocus')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#mimeType'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#mimeType'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#mimeType')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#mimeType'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentProperty'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#mimeType')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#mimeType'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#mimeType')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#publicKey'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#publicKey'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#publicKey')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#publicKey'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentProperty'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#publicKey')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#publicKey'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#publicKey')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#sha256'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#sha256'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#sha256')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#sha256'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentProperty'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#sha256')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#sha256'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#sha256')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasAssembledBy'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasAssembledBy'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasAssembledBy')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasAssembledBy'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentProperty'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasAssembledBy')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasAssembledBy'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasAssembledBy')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasTimestampedBy'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#Property')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasTimestampedBy'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasTimestampedBy')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasTimestampedBy'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#equivalentProperty'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasTimestampedBy')) -(rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasTimestampedBy'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.URIRef('https://w3id.org/trace/2023/05/trov#wasTimestampedBy')) -(rdflib.term.Literal('-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.Literal('-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.Literal('-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.Literal('-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n')) -(rdflib.term.Literal('218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.Literal('218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.Literal('218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.Literal('218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc')) -(rdflib.term.Literal('7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.Literal('7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.Literal('7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.Literal('7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730')) -(rdflib.term.Literal('A composition of two files in a single arrangement endorsed by a TRS that enforces no policies'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.Literal('A composition of two files in a single arrangement endorsed by a TRS that enforces no policies'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.Literal('A composition of two files in a single arrangement endorsed by a TRS that enforces no policies'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.Literal('A composition of two files in a single arrangement endorsed by a TRS that enforces no policies')) -(rdflib.term.Literal('TRS that enforces no policies'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.Literal('TRS that enforces no policies'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.Literal('TRS that enforces no policies'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.Literal('TRS that enforces no policies')) -(rdflib.term.Literal('b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.Literal('b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.Literal('b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.Literal('b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c')) -(rdflib.term.Literal('file1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.Literal('file1'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.Literal('file1'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.Literal('file1')) -(rdflib.term.Literal('file2'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.Literal('file2'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.Literal('file2'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.Literal('file2')) -(rdflib.term.Literal('text/plain'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#Resource')) -(rdflib.term.Literal('text/plain'), rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#Thing')) -(rdflib.term.Literal('text/plain'), rdflib.term.URIRef('http://www.w3.org/2002/07/owl#sameAs'), rdflib.term.Literal('text/plain')) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -============================================= bash cell | rdflib validate tro2.jsonld ============================================== - -python3 << END_PYTHON - -from rdflib import Graph - -with open("data/tro2.jsonld") as fin: - tro_jsonld = fin.read() - -# Load JSON-LD file with RDFLib -g = Graph() -g.parse(data=tro_jsonld, format="json-ld") - -# Query the imported triples - -# 1) TRS with a public key -q = """ - ASK { - SELECT ?trs { - ?tro trov:wasAssembledBy ?trs . - ?trs trov:publicKey ?trs_pk . - } GROUP BY ?trs HAVING (count(*) = 1) - } -""" -res1 = bool(g.query(q)) -print("Validate that a TRO Declaration has a TRS with a public key: " + ("PASS" if res1 else "FAIL")) - -# 2) TSA with public key -## Method 1 -q = """ - ASK { - { - SELECT (COUNT(*) AS ?c1) - WHERE { - SELECT ?tsa { - ?tro trov:wasTimestampedBy ?tsa . - ?tsa trov:publicKey ?tsa_pk . - } GROUP BY ?tsa HAVING (count(*) = 1) - } - } - - { - SELECT (COUNT(*) AS ?c2) { - ?tro trov:wasTimestampedBy ?tsa . - } - } - FILTER (?c2 = 0 || ?c1 = ?c2) - } - """ -res2 = bool(g.query(q)) -print("Validate that a TRO Declaration has (1) NO TSA or (2) ONE TSA with a public key: [method 1]" + ("PASS" if res2 else "FAIL")) - -## Method 2 (negation: do NOT have TSA with multiple public keys) -q = """ - ASK { - { - SELECT (COUNT(*) AS ?c1) - WHERE { - SELECT ?tsa { - ?tro trov:wasTimestampedBy ?tsa . - ?tsa trov:publicKey ?tsa_pk . - } GROUP BY ?tsa HAVING (count(*) > 1) - } - } - FILTER (?c1 = 0) - } -""" -res2 = bool(g.query(q)) -print("Validate that a TRO Declaration has (1) NO TSA or (2) ONE TSA with a public key: [method 2]" + ("PASS" if res2 else "FAIL")) - -# 3) Composition with a fingerprint -q = """ - ASK { - { - SELECT ?comp { - ?tro trov:hasComposition ?comp . - ?comp trov:hasFingerprint/trov:sha256 ?comp_fp . - } GROUP BY ?comp HAVING (count(*) = 1) - } - } - """ -res3 = bool(g.query(q)) -print("Validate that a TRO Declaration has at least a composition and each composition has exactly ONE fingerprint: " + ("PASS" if res3 else "FAIL")) - -# 4) Composition with at least an artifact -q = """ - ASK { - { - SELECT (COUNT(?comp) AS ?c1) - WHERE{ - SELECT ?comp { - ?tro trov:hasComposition ?comp . - ?comp trov:hasArtifact/trov:sha256 ?art_digest . - } GROUP BY ?comp} - } - - { - SELECT (COUNT(?comp) AS ?c2) { - ?tro trov:hasComposition ?comp . - } - } - FILTER (?c1 = ?c2) - } - """ -res4 = bool(g.query(q)) -print("Validate that a TRO Declaration has at least a composition and each composition has at least an artifact: " + ("PASS" if res4 else "FAIL")) - -# 5) Arrangement with validate artifacts -q = """ - ASK { - { - SELECT (COUNT(*) AS ?c1) - WHERE { - ?tro trov:hasArrangement ?arr . - ?arr trov:hasLocus/trov:hasArtifact ?art . - } - } - - { - SELECT (COUNT(*) AS ?c2) - WHERE { - ?tro trov:hasArrangement ?arr . - ?arr trov:hasLocus/trov:hasArtifact/trov:sha256 ?art_digest . - } - } - FILTER (?c1 = ?c2) - } -""" - -res5 = bool(g.query(q)) -print("Validate that a TRO Declaration has arrangement(s) with valid artifacts: " + ("PASS" if res5 else "FAIL")) - -if res1 and res2 and res3 and res4 and res5: - print("This is a valid TRO Declaration!!!") -else: - print("This is NOT a valid TRO Declaration!!!") - -END_PYTHON - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -Validate that a TRO Declaration has a TRS with a public key: FAIL -Validate that a TRO Declaration has (1) NO TSA or (2) ONE TSA with a public key: [method 1]FAIL -Validate that a TRO Declaration has (1) NO TSA or (2) ONE TSA with a public key: [method 2]FAIL -Validate that a TRO Declaration has at least a composition and each composition has exactly ONE fingerprint: FAIL -Validate that a TRO Declaration has at least a composition and each composition has at least an artifact: FAIL -Validate that a TRO Declaration has arrangement(s) with valid artifacts: FAIL -This is NOT a valid TRO Declaration!!! -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - diff --git a/demo/02-explorations/12-validate-jsonld/03-pyshacl/Makefile b/demo/02-explorations/12-validate-jsonld/03-pyshacl/Makefile deleted file mode 100644 index 68e529c..0000000 --- a/demo/02-explorations/12-validate-jsonld/03-pyshacl/Makefile +++ /dev/null @@ -1 +0,0 @@ -include ${SHELL_NOTEBOOK_DOT_DIR}/Makefile.demo-runner diff --git a/demo/02-explorations/12-validate-jsonld/03-pyshacl/run.sh b/demo/02-explorations/12-validate-jsonld/03-pyshacl/run.sh deleted file mode 100644 index f7a3ae7..0000000 --- a/demo/02-explorations/12-validate-jsonld/03-pyshacl/run.sh +++ /dev/null @@ -1,474 +0,0 @@ -#!/usr/bin/env bash - -# ------------------------------------------------------------------------------ - -bash_cell 'validate tro declaration with pyshacl (without comments)' << END_CELL - -python3 << END_PYTHON - -# It allows any number of comments for each TRO -from pyshacl import validate - -tro_jsonld = """ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [ - { "@id": "tro", "@type": "trov:TransparentResearchObject" } - ] -} -""" - -with open("data/tro.schema.ttl") as fin: - tro_schema = fin.read() - -r = validate(data_graph=tro_jsonld, - shacl_graph=tro_schema, - data_graph_format="json-ld", - inference='rdfs', - debug=True) -conforms, results_graph, results_text = r - -print("results_text: ", results_text) - -END_PYTHON - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'validate tro declaration with pyshacl (multiple trs pk)' << END_CELL - -python3 << END_PYTHON - -from pyshacl import validate - -tro_jsonld = """ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [ - { "@id": "trs", "@type": "trov:TrustedResearchSystem" }, - { "@id": "trs", "trov:publicKey": "trs.pk.1" }, - { "@id": "trs", "trov:publicKey": "trs.pk.2" } - ] -} -""" - -with open("data/tro.schema.ttl") as fin: - tro_schema = fin.read() - -r = validate(data_graph=tro_jsonld, - shacl_graph=tro_schema, - data_graph_format="json-ld", - inference='rdfs', - debug=True) -conforms, results_graph, results_text = r - -print("results_text: ", results_text) - -END_PYTHON - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'validate tro declaration with pyshacl (multiple tsa pk)' << END_CELL - -python3 << END_PYTHON - -from pyshacl import validate - -tro_jsonld = """ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [ - { "@id": "tsa", "@type": "trov:TimeStampingAuthority" }, - { "@id": "tsa", "trov:publicKey": "tsa.pk.1" }, - { "@id": "tsa", "trov:publicKey": "tsa.pk.2" } - ] -} -""" - -with open("data/tro.schema.ttl") as fin: - tro_schema = fin.read() - -r = validate(data_graph=tro_jsonld, - shacl_graph=tro_schema, - data_graph_format="json-ld", - inference='rdfs', - debug=True) -conforms, results_graph, results_text = r - -print("results_text: ", results_text) - -END_PYTHON - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'validate tro declaration with pyshacl (multiple fingerprints per composition)' << END_CELL - -python3 << END_PYTHON - -from pyshacl import validate - -tro_jsonld = """ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [{ - "trov:hasComposition": - { - "@id": "composition/1", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": - { - "@id": "fp1", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "sha256.fp1" - } - } - }, - { - "@id": "composition/1", - "trov:hasFingerprint": { - "@id": "fp2", - "trov:sha256": "sha256.fp2" - } - }] -} -""" - -with open("data/tro.schema.ttl") as fin: - tro_schema = fin.read() - -r = validate(data_graph=tro_jsonld, - shacl_graph=tro_schema, - data_graph_format="json-ld", - inference='rdfs', - debug=True) -conforms, results_graph, results_text = r - -print("results_text: ", results_text) - -END_PYTHON - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'validate tro declaration with pyshacl (multiple sha256 per fingerprint)' << END_CELL - -python3 << END_PYTHON - -from pyshacl import validate - -tro_jsonld = """ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [{ - "trov:hasComposition": - { - "@id": "composition/1", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": - { - "@id": "fp1", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "sha256.fp1" - } - } - }, - { "@id": "fp1", "trov:sha256": "sha256.fp2" } - ] -} -""" - -with open("data/tro.schema.ttl") as fin: - tro_schema = fin.read() - -r = validate(data_graph=tro_jsonld, - shacl_graph=tro_schema, - data_graph_format="json-ld", - inference='rdfs', - debug=True) -conforms, results_graph, results_text = r - -print("results_text: ", results_text) - -END_PYTHON - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'validate tro declaration with pyshacl (composition with at least one artifact)' << END_CELL - -python3 << END_PYTHON - -from pyshacl import validate - -tro_jsonld = """ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [{ - "trov:hasComposition": [ - { - "@id": "composition/1", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": - { - "@id": "fp1", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "sha256.fp1" - }, - - "trov:hasArtifact": [ - { - "@id": "composition/1/artifact/1", - "@type": "trov:ResearchArtifact", - "trov:mimeType": "text/plain", - "trov:sha256": "art.sha256.1" - }] - }, - { - "@id": "composition/2", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": - { - "@id": "fp2", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "sha256.fp2" - } - }] - }] -} -""" - -with open("data/tro.schema.ttl") as fin: - tro_schema = fin.read() - -r = validate(data_graph=tro_jsonld, - shacl_graph=tro_schema, - data_graph_format="json-ld", - inference='rdfs', - debug=True) -conforms, results_graph, results_text = r - -print(results_text) - -END_PYTHON - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'validate tro declaration with pyshacl (arrangement links to a valid artifact) and validate error msg with SPARQL' << END_CELL - -python3 << END_PYTHON - -from pyshacl import validate - -tro_jsonld = """ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [{ - "trov:hasComposition": [ - { - "@id": "composition/1", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": - { - "@id": "fp1", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "sha256.fp1" - }, - - "trov:hasArtifact": [ - { - "@id": "composition/1/artifact/1", - "@type": "trov:ResearchArtifact", - "trov:sha256": "art.sha256.1" - }] - }], - "trov:hasArrangement": { - "@id": "arrangement/1", - "@type": "trov:ArtifactArrangement", - "trov:hasLocus": [ - { - "@id": "arrangement/1/locus/1", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, - "trov:hasLocation": "filepath1" - }, - { - "@id": "arrangement/1/locus/2", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/100" }, - "trov:hasLocation": "filepath2" - }] - } - }] -} -""" - -with open("data/tro.schema.ttl") as fin: - tro_schema = fin.read() - -r = validate(data_graph=tro_jsonld, - shacl_graph=tro_schema, - data_graph_format="json-ld", - inference='rdfs', - debug=True) -conforms, results_graph, results_text = r - -q = """ - ASK { - ?node ?p "Value does not have class trov:ResearchArtifact" . - } -""" - -res = bool(results_graph.query(q)) -print("Validate error message: " + ("PASS" if res else "FAIL")) - -END_PYTHON - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'validate tro declaration with pyshacl (arrangement links to a valid artifact) and select msg with SPARQL' << END_CELL - -python3 << END_PYTHON - -from pyshacl import validate - -tro_jsonld = """ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [{ - "trov:hasComposition": [ - { - "@id": "composition/1", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": - { - "@id": "fp1", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "sha256.fp1" - }, - - "trov:hasArtifact": [ - { - "@id": "composition/1/artifact/1", - "@type": "trov:ResearchArtifact", - "trov:sha256": "art.sha256.1" - }] - }], - "trov:hasArrangement": { - "@id": "arrangement/1", - "@type": "trov:ArtifactArrangement", - "trov:hasLocus": [ - { - "@id": "arrangement/1/locus/1", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, - "trov:hasLocation": "filepath1" - }, - { - "@id": "arrangement/1/locus/2", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/100" }, - "trov:hasLocation": "filepath2" - }] - } - }] -} -""" - -with open("data/tro.schema.ttl") as fin: - tro_schema = fin.read() - -r = validate(data_graph=tro_jsonld, - shacl_graph=tro_schema, - data_graph_format="json-ld", - inference='rdfs', - debug=True) -conforms, results_graph, results_text = r - -q = """ - PREFIX : - - SELECT ?focus ?value ?msg - WHERE { - ?curr_node :focusNode ?focus . - ?curr_node :value ?value . - ?curr_node :resultMessage ?msg . - ?another_node :focusNode ?another_focus . - FILTER (?value != ?another_focus) - FILTER (?another_node != ?curr_node) - } - ORDER BY ?focus ?value ?msg -""" - -for x in results_graph.query(q): - print(x) - -END_PYTHON - -END_CELL - -# ------------------------------------------------------------------------------ diff --git a/demo/02-explorations/12-validate-jsonld/03-pyshacl/run.txt b/demo/02-explorations/12-validate-jsonld/03-pyshacl/run.txt deleted file mode 100644 index a132ecd..0000000 --- a/demo/02-explorations/12-validate-jsonld/03-pyshacl/run.txt +++ /dev/null @@ -1,574 +0,0 @@ -=============================== bash cell | validate tro declaration with pyshacl (without comments) =============================== - -python3 << END_PYTHON - -# It allows any number of comments for each TRO -from pyshacl import validate - -tro_jsonld = """ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [ - { "@id": "tro", "@type": "trov:TransparentResearchObject" } - ] -} -""" - -with open("data/tro.schema.ttl") as fin: - tro_schema = fin.read() - -r = validate(data_graph=tro_jsonld, - shacl_graph=tro_schema, - data_graph_format="json-ld", - inference='rdfs', - debug=True) -conforms, results_graph, results_text = r - -print("results_text: ", results_text) - -END_PYTHON - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -results_text: Validation Report -Conforms: False -Results (3): -Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:TrsShape ; sh:path trov:wasAssembledBy ] - Focus Node: - Result Path: trov:wasAssembledBy - Message: Less than 1 values on ->trov:wasAssembledBy -Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:CompShape ; sh:path trov:hasComposition ] - Focus Node: - Result Path: trov:hasComposition - Message: Less than 1 values on ->trov:hasComposition -Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:ArrShape ; sh:path trov:hasArrangement ] - Focus Node: - Result Path: trov:hasArrangement - Message: Less than 1 values on ->trov:hasArrangement - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -=============================== bash cell | validate tro declaration with pyshacl (multiple trs pk) ================================ - -python3 << END_PYTHON - -from pyshacl import validate - -tro_jsonld = """ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [ - { "@id": "trs", "@type": "trov:TrustedResearchSystem" }, - { "@id": "trs", "trov:publicKey": "trs.pk.1" }, - { "@id": "trs", "trov:publicKey": "trs.pk.2" } - ] -} -""" - -with open("data/tro.schema.ttl") as fin: - tro_schema = fin.read() - -r = validate(data_graph=tro_jsonld, - shacl_graph=tro_schema, - data_graph_format="json-ld", - inference='rdfs', - debug=True) -conforms, results_graph, results_text = r - -print("results_text: ", results_text) - -END_PYTHON - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -results_text: Validation Report -Conforms: False -Results (1): -Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:publicKey ] - Focus Node: - Result Path: trov:publicKey - Message: More than 1 values on ->trov:publicKey - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -=============================== bash cell | validate tro declaration with pyshacl (multiple tsa pk) ================================ - -python3 << END_PYTHON - -from pyshacl import validate - -tro_jsonld = """ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [ - { "@id": "tsa", "@type": "trov:TimeStampingAuthority" }, - { "@id": "tsa", "trov:publicKey": "tsa.pk.1" }, - { "@id": "tsa", "trov:publicKey": "tsa.pk.2" } - ] -} -""" - -with open("data/tro.schema.ttl") as fin: - tro_schema = fin.read() - -r = validate(data_graph=tro_jsonld, - shacl_graph=tro_schema, - data_graph_format="json-ld", - inference='rdfs', - debug=True) -conforms, results_graph, results_text = r - -print("results_text: ", results_text) - -END_PYTHON - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -results_text: Validation Report -Conforms: False -Results (1): -Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:publicKey ] - Focus Node: - Result Path: trov:publicKey - Message: More than 1 values on ->trov:publicKey - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -==================== bash cell | validate tro declaration with pyshacl (multiple fingerprints per composition) ===================== - -python3 << END_PYTHON - -from pyshacl import validate - -tro_jsonld = """ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [{ - "trov:hasComposition": - { - "@id": "composition/1", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": - { - "@id": "fp1", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "sha256.fp1" - } - } - }, - { - "@id": "composition/1", - "trov:hasFingerprint": { - "@id": "fp2", - "trov:sha256": "sha256.fp2" - } - }] -} -""" - -with open("data/tro.schema.ttl") as fin: - tro_schema = fin.read() - -r = validate(data_graph=tro_jsonld, - shacl_graph=tro_schema, - data_graph_format="json-ld", - inference='rdfs', - debug=True) -conforms, results_graph, results_text = r - -print("results_text: ", results_text) - -END_PYTHON - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -results_text: Validation Report -Conforms: False -Results (2): -Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:FingerprintShape ; sh:path trov:hasFingerprint ] - Focus Node: - Result Path: trov:hasFingerprint - Message: More than 1 values on ->trov:hasFingerprint -Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:ArtifactShape ; sh:path trov:hasArtifact ] - Focus Node: - Result Path: trov:hasArtifact - Message: Less than 1 values on ->trov:hasArtifact - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -======================= bash cell | validate tro declaration with pyshacl (multiple sha256 per fingerprint) ======================== - -python3 << END_PYTHON - -from pyshacl import validate - -tro_jsonld = """ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [{ - "trov:hasComposition": - { - "@id": "composition/1", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": - { - "@id": "fp1", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "sha256.fp1" - } - } - }, - { "@id": "fp1", "trov:sha256": "sha256.fp2" } - ] -} -""" - -with open("data/tro.schema.ttl") as fin: - tro_schema = fin.read() - -r = validate(data_graph=tro_jsonld, - shacl_graph=tro_schema, - data_graph_format="json-ld", - inference='rdfs', - debug=True) -conforms, results_graph, results_text = r - -print("results_text: ", results_text) - -END_PYTHON - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -results_text: Validation Report -Conforms: False -Results (3): -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:FingerprintShape ; sh:path trov:hasFingerprint ] - Focus Node: - Value Node: - Result Path: trov:hasFingerprint - Message: Value does not conform to Shape schema1:FingerprintShape. See details for more information. - Details: - Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** -Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:ArtifactShape ; sh:path trov:hasArtifact ] - Focus Node: - Result Path: trov:hasArtifact - Message: Less than 1 values on ->trov:hasArtifact -Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -==================== bash cell | validate tro declaration with pyshacl (composition with at least one artifact) ==================== - -python3 << END_PYTHON - -from pyshacl import validate - -tro_jsonld = """ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [{ - "trov:hasComposition": [ - { - "@id": "composition/1", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": - { - "@id": "fp1", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "sha256.fp1" - }, - - "trov:hasArtifact": [ - { - "@id": "composition/1/artifact/1", - "@type": "trov:ResearchArtifact", - "trov:mimeType": "text/plain", - "trov:sha256": "art.sha256.1" - }] - }, - { - "@id": "composition/2", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": - { - "@id": "fp2", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "sha256.fp2" - } - }] - }] -} -""" - -with open("data/tro.schema.ttl") as fin: - tro_schema = fin.read() - -r = validate(data_graph=tro_jsonld, - shacl_graph=tro_schema, - data_graph_format="json-ld", - inference='rdfs', - debug=True) -conforms, results_graph, results_text = r - -print(results_text) - -END_PYTHON - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -Validation Report -Conforms: False -Results (1): -Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:ArtifactShape ; sh:path trov:hasArtifact ] - Focus Node: - Result Path: trov:hasArtifact - Message: Less than 1 values on ->trov:hasArtifact - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -=== bash cell | validate tro declaration with pyshacl (arrangement links to a valid artifact) and validate error msg with SPARQL === - -python3 << END_PYTHON - -from pyshacl import validate - -tro_jsonld = """ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [{ - "trov:hasComposition": [ - { - "@id": "composition/1", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": - { - "@id": "fp1", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "sha256.fp1" - }, - - "trov:hasArtifact": [ - { - "@id": "composition/1/artifact/1", - "@type": "trov:ResearchArtifact", - "trov:sha256": "art.sha256.1" - }] - }], - "trov:hasArrangement": { - "@id": "arrangement/1", - "@type": "trov:ArtifactArrangement", - "trov:hasLocus": [ - { - "@id": "arrangement/1/locus/1", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, - "trov:hasLocation": "filepath1" - }, - { - "@id": "arrangement/1/locus/2", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/100" }, - "trov:hasLocation": "filepath2" - }] - } - }] -} -""" - -with open("data/tro.schema.ttl") as fin: - tro_schema = fin.read() - -r = validate(data_graph=tro_jsonld, - shacl_graph=tro_schema, - data_graph_format="json-ld", - inference='rdfs', - debug=True) -conforms, results_graph, results_text = r - -q = """ - ASK { - ?node ?p "Value does not have class trov:ResearchArtifact" . - } -""" - -res = bool(results_graph.query(q)) -print("Validate error message: " + ("PASS" if res else "FAIL")) - -END_PYTHON - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -Validate error message: PASS -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -======= bash cell | validate tro declaration with pyshacl (arrangement links to a valid artifact) and select msg with SPARQL ======= - -python3 << END_PYTHON - -from pyshacl import validate - -tro_jsonld = """ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [{ - "trov:hasComposition": [ - { - "@id": "composition/1", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": - { - "@id": "fp1", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "sha256.fp1" - }, - - "trov:hasArtifact": [ - { - "@id": "composition/1/artifact/1", - "@type": "trov:ResearchArtifact", - "trov:sha256": "art.sha256.1" - }] - }], - "trov:hasArrangement": { - "@id": "arrangement/1", - "@type": "trov:ArtifactArrangement", - "trov:hasLocus": [ - { - "@id": "arrangement/1/locus/1", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, - "trov:hasLocation": "filepath1" - }, - { - "@id": "arrangement/1/locus/2", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/100" }, - "trov:hasLocation": "filepath2" - }] - } - }] -} -""" - -with open("data/tro.schema.ttl") as fin: - tro_schema = fin.read() - -r = validate(data_graph=tro_jsonld, - shacl_graph=tro_schema, - data_graph_format="json-ld", - inference='rdfs', - debug=True) -conforms, results_graph, results_text = r - -q = """ - PREFIX : - - SELECT ?focus ?value ?msg - WHERE { - ?curr_node :focusNode ?focus . - ?curr_node :value ?value . - ?curr_node :resultMessage ?msg . - ?another_node :focusNode ?another_focus . - FILTER (?value != ?another_focus) - FILTER (?another_node != ?curr_node) - } - ORDER BY ?focus ?value ?msg -""" - -for x in results_graph.query(q): - print(x) - -END_PYTHON - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/100'), rdflib.term.Literal('Value does not have class trov:ResearchArtifact')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/100'), rdflib.term.Literal('Value does not have class trov:ResearchArtifact')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/100'), rdflib.term.Literal('Value does not have class trov:ResearchArtifact')) -(rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/arrangement/1/locus/2'), rdflib.term.URIRef('https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/composition/1/artifact/100'), rdflib.term.Literal('Value does not have class trov:ResearchArtifact')) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - diff --git a/demo/02-explorations/12-validate-jsonld/04-report-yfiles/Makefile b/demo/02-explorations/12-validate-jsonld/04-report-yfiles/Makefile deleted file mode 100644 index 68e529c..0000000 --- a/demo/02-explorations/12-validate-jsonld/04-report-yfiles/Makefile +++ /dev/null @@ -1 +0,0 @@ -include ${SHELL_NOTEBOOK_DOT_DIR}/Makefile.demo-runner diff --git a/demo/02-explorations/12-validate-jsonld/04-report-yfiles/data/tro.jsonld b/demo/02-explorations/12-validate-jsonld/04-report-yfiles/data/tro.jsonld deleted file mode 100644 index 48ffe6a..0000000 --- a/demo/02-explorations/12-validate-jsonld/04-report-yfiles/data/tro.jsonld +++ /dev/null @@ -1,51 +0,0 @@ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [ - { - "@id": "tro/1", - "@type": "trov:TransparentResearchObject", - - "trov:hasComposition": [ - { - "@id": "composition/1", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": - { - "@id": "fp1", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "sha256.fp1" - }, - - "trov:hasArtifact": [ - { - "@id": "composition/1/artifact/1", - "@type": "trov:ResearchArtifact", - "trov:sha256": "art.sha256.1" - }] - }], - "trov:hasArrangement": { - "@id": "arrangement/1", - "@type": "trov:ArtifactArrangement", - "trov:hasLocus": [ - { - "@id": "arrangement/1/locus/1", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, - "trov:hasLocation": "filepath1" - }, - { - "@id": "arrangement/1/locus/2", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/100" }, - "trov:hasLocation": "filepath2" - }] - } - }] -} \ No newline at end of file diff --git a/demo/02-explorations/12-validate-jsonld/04-report-yfiles/products/triples.csv b/demo/02-explorations/12-validate-jsonld/04-report-yfiles/products/triples.csv deleted file mode 100644 index 41bc1f3..0000000 --- a/demo/02-explorations/12-validate-jsonld/04-report-yfiles/products/triples.csv +++ /dev/null @@ -1,20 +0,0 @@ -source,label,target -arrangement/1,trov#hasLocus,arrangement/1/locus/1 -arrangement/1,trov#hasLocus,arrangement/1/locus/2 -arrangement/1,rdf#type,trov#ArtifactArrangement -arrangement/1/locus/1,trov#hasArtifact,composition/1/artifact/1 -arrangement/1/locus/1,trov#hasLocation,filepath1 -arrangement/1/locus/1,rdf#type,trov#ArtifactLocus -arrangement/1/locus/2,trov#hasArtifact,composition/1/artifact/100 -arrangement/1/locus/2,trov#hasLocation,filepath2 -arrangement/1/locus/2,rdf#type,trov#ArtifactLocus -composition/1,trov#hasArtifact,composition/1/artifact/1 -composition/1,trov#hasFingerprint,fp1 -composition/1,rdf#type,trov#ArtifactComposition -composition/1/artifact/1,trov#sha256,art.sha256.1 -composition/1/artifact/1,rdf#type,trov#ResearchArtifact -fp1,trov#sha256,sha256.fp1 -fp1,rdf#type,trov#CompositionFingerprint -tro/1,trov#hasArrangement,arrangement/1 -tro/1,trov#hasComposition,composition/1 -tro/1,rdf#type,trov#TransparentResearchObject diff --git a/demo/02-explorations/12-validate-jsonld/04-report-yfiles/run.sh b/demo/02-explorations/12-validate-jsonld/04-report-yfiles/run.sh deleted file mode 100644 index 3a05c08..0000000 --- a/demo/02-explorations/12-validate-jsonld/04-report-yfiles/run.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env bash - -# ------------------------------------------------------------------------------ - -bash_cell 'export tro declaration as triples' << END_CELL - -python3 << END_PYTHON - -from rdflib import Graph -import pandas as pd - -mappings = { - "http://www.w3.org/1999/02/22-rdf-syntax-ns#": "rdf#", - "http://www.w3.org/2000/01/rdf-schema#": "rdfs#", - "https://w3id.org/trace/2023/05/trov#": "trov#", - "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/": "" -} - -with open("data/tro.jsonld") as fin: - tro_jsonld = fin.read() - -# Load JSON-LD file with RDFLib -g = Graph() -g.parse(data=tro_jsonld, format="json-ld") - -# Query the imported triples -q = """ - SELECT ?s ?p ?o - WHERE { - ?s ?p ?o - } - ORDER BY ?s ?p ?o - """ - -rows = [] -for r in g.query(q): - rows.append(r) - -graphs = pd.DataFrame(rows, columns=["source", "label", "target"]).replace(mappings, regex=True).sort_values(by=["source", "target"]) -graphs.to_csv("products/triples.csv", index=False) - -END_PYTHON - -END_CELL - -# ------------------------------------------------------------------------------ -bash_cell 'visualize triples with errors' << END_CELL - -jupyter nbconvert --ExecutePreprocessor.kernel_name=python3 --to html --execute visualize_triples.ipynb --output products/report.html - -# Please run this code in terminal to check the html file: python3 -m http.server -# Then open your web browser, go to http://127.0.0.1:8000/, and find the products/report.html file - -END_CELL -# ------------------------------------------------------------------------------ \ No newline at end of file diff --git a/demo/02-explorations/12-validate-jsonld/04-report-yfiles/run.txt b/demo/02-explorations/12-validate-jsonld/04-report-yfiles/run.txt deleted file mode 100644 index 50590cd..0000000 --- a/demo/02-explorations/12-validate-jsonld/04-report-yfiles/run.txt +++ /dev/null @@ -1,54 +0,0 @@ -========================================== bash cell | export tro declaration as triples =========================================== - -python3 << END_PYTHON - -from rdflib import Graph -import pandas as pd - -mappings = { - "http://www.w3.org/1999/02/22-rdf-syntax-ns#": "rdf#", - "http://www.w3.org/2000/01/rdf-schema#": "rdfs#", - "https://w3id.org/trace/2023/05/trov#": "trov#", - "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/": "" -} - -with open("data/tro.jsonld") as fin: - tro_jsonld = fin.read() - -# Load JSON-LD file with RDFLib -g = Graph() -g.parse(data=tro_jsonld, format="json-ld") - -# Query the imported triples -q = """ - SELECT ?s ?p ?o - WHERE { - ?s ?p ?o - } - ORDER BY ?s ?p ?o - """ - -rows = [] -for r in g.query(q): - rows.append(r) - -graphs = pd.DataFrame(rows, columns=["source", "label", "target"]).replace(mappings, regex=True).sort_values(by=["source", "target"]) -graphs.to_csv("products/triples.csv", index=False) - -END_PYTHON - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -============================================ bash cell | visualize triples with errors ============================================= - -jupyter nbconvert --ExecutePreprocessor.kernel_name=python3 --to html --execute visualize_triples.ipynb --output products/report.html - -# Please run this code in terminal to check the html file: python3 -m http.server -# Then open your web browser, go to http://127.0.0.1:8000/, and find the products/report.html file - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - diff --git a/demo/02-explorations/12-validate-jsonld/04-report-yfiles/visualize_triples.ipynb b/demo/02-explorations/12-validate-jsonld/04-report-yfiles/visualize_triples.ipynb deleted file mode 100644 index 4eccb05..0000000 --- a/demo/02-explorations/12-validate-jsonld/04-report-yfiles/visualize_triples.ipynb +++ /dev/null @@ -1,128 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import networkx as nx\n", - "from yfiles_jupyter_graphs import GraphWidget" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "# Load triples of the given TRO Declaration\n", - "triples = pd.read_csv(\"products/triples.csv\")\n", - "# Load triples to NetworkX's graph\n", - "# Reference: https://github.com/yWorks/yfiles-jupyter-graphs/blob/main/examples/import_from_networkx.ipynb\n", - "G = nx.from_pandas_edgelist(triples, source=\"source\", target=\"target\", edge_attr=[\"label\"], create_using=nx.DiGraph())\n", - "# Add node attributes: error_flag and error_msg\n", - "nx.set_node_attributes(G, None, name=\"error_flag\")\n", - "nx.set_node_attributes(G, None, name=\"error_msg\")\n", - "# Add an error manually: the artifact/100 node\n", - "G.add_node(\"composition/1/artifact/100\", error_flag=\"ERROR\", error_msg=\"The node of composition/1/artifact/100 should have an edge point to the node of trov#ResearchArtifact with the label of rdf#type\")\n", - "# Visualize graph with YFile\n", - "w = GraphWidget(graph = G)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "f239e436d787485e93816af118172587", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "GraphWidget(layout=Layout(height='500px', width='100%'))" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Update node color\n", - "def custom_node_color_mapping(index, node):\n", - " if node[\"properties\"][\"label\"] == \"composition/1/artifact/100\":\n", - " color = \"#E26A6A\"\n", - " else:\n", - " color = \"#58BBBA\"\n", - " return color\n", - "\n", - "w.set_node_color_mapping(custom_node_color_mapping)\n", - "w.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\"\"\"\n", - "# Load triples of the given TRO Declaration\n", - "triples = pd.read_csv(\"products/triples.csv\")\n", - "triples[\"error_flag\"] = \"\"\n", - "triples[\"error_msg\"] = \"\"\n", - "# Load triples to NetworkX's graph\n", - "# Reference: https://github.com/yWorks/yfiles-jupyter-graphs/blob/main/examples/import_from_networkx.ipynb\n", - "G = nx.from_pandas_edgelist(triples, source=\"source\", target=\"target\", edge_attr=[\"label\", \"error_flag\", \"error_msg\"], create_using=nx.DiGraph())\n", - "# Add an error manually: the (artifact/100, trov#ResearchArtifact) edge should exist\n", - "G.add_edge(\"composition/1/artifact/100\", \"trov#ResearchArtifact\", label=\"rdf#type\", error_flag=\"ERROR\", error_msg=\"This edge should exist.\")\n", - "# Visualize graph with YFile\n", - "w = GraphWidget(graph = G)\n", - "\n", - "# Update edge color\n", - "def custom_edge_color_mapping(index, edge):\n", - " if edge[\"properties\"][\"error_flag\"] == \"ERROR\":\n", - " color = \"#E26A6A\"\n", - " else:\n", - " color = \"#58BBBA\"\n", - " return color\n", - "w.set_edge_color_mapping(custom_edge_color_mapping)\n", - "w.show()\n", - "\"\"\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "gelato", - "language": "python", - "name": "gelato" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.15" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/Makefile b/demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/Makefile deleted file mode 100644 index 68e529c..0000000 --- a/demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/Makefile +++ /dev/null @@ -1 +0,0 @@ -include ${SHELL_NOTEBOOK_DOT_DIR}/Makefile.demo-runner diff --git a/demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/data/tro.jsonld b/demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/data/tro.jsonld deleted file mode 100644 index 48ffe6a..0000000 --- a/demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/data/tro.jsonld +++ /dev/null @@ -1,51 +0,0 @@ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [ - { - "@id": "tro/1", - "@type": "trov:TransparentResearchObject", - - "trov:hasComposition": [ - { - "@id": "composition/1", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": - { - "@id": "fp1", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "sha256.fp1" - }, - - "trov:hasArtifact": [ - { - "@id": "composition/1/artifact/1", - "@type": "trov:ResearchArtifact", - "trov:sha256": "art.sha256.1" - }] - }], - "trov:hasArrangement": { - "@id": "arrangement/1", - "@type": "trov:ArtifactArrangement", - "trov:hasLocus": [ - { - "@id": "arrangement/1/locus/1", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, - "trov:hasLocation": "filepath1" - }, - { - "@id": "arrangement/1/locus/2", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/100" }, - "trov:hasLocation": "filepath2" - }] - } - }] -} \ No newline at end of file diff --git a/demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/data/tro.schema.ttl b/demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/data/tro.schema.ttl deleted file mode 100644 index 6ecd9c9..0000000 --- a/demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/data/tro.schema.ttl +++ /dev/null @@ -1,128 +0,0 @@ -@prefix rdf: . -@prefix rdfs: . -@prefix trov: . -@prefix : . - -@prefix xsd: . -@prefix sh: . -@prefix schema: . - -schema:TroShape - a sh:NodeShape ; - sh:targetClass trov:TransparentResearchObject ; - sh:property [ # One TRO has ANY number of comments - sh:path rdfs:comment ; - sh:datatype xsd:string ; - ] ; - sh:property [ # One TRO has EXACTLY ONE TRS - sh:path trov:wasAssembledBy ; - sh:minCount 1 ; - sh:maxCount 1 ; - sh:node schema:TrsShape ; - ] ; - sh:property [ # One TRO has at MOST ONE TSA - sh:path trov:wasTimestampedBy ; - sh:maxCount 1 ; - sh:node schema:TsaShape ; - ] ; - sh:property [ # One TRO has at LEAST ONE composition - sh:path trov:hasComposition ; - sh:minCount 1 ; - sh:node schema:CompShape ; - ] ; - sh:property [ # One TRO has at LEAST ONE arrangement - sh:path trov:hasArrangement ; - sh:minCount 1 ; - sh:node schema:ArrShape ; - ] . - - -schema:TrsShape - a sh:NodeShape ; - sh:targetClass trov:TrustedResearchSystem ; - sh:property [ - sh:path rdfs:comment ; - sh:datatype xsd:string ; - ] ; - sh:property [ # One TRS has EXACTLY ONE public key - sh:path trov:publicKey ; - sh:datatype xsd:string ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] . - -schema:TsaShape - a sh:NodeShape ; - sh:targetClass trov:TimeStampingAuthority ; - sh:property [ # One TSA has EXACTLY ONE public key - sh:path trov:publicKey ; - sh:datatype xsd:string ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] . - -schema:CompShape - a sh:NodeShape ; - sh:targetClass trov:ArtifactComposition ; - sh:property [ # Each composition has EXACTLY ONE fingerprint - sh:path trov:hasFingerprint ; - sh:minCount 1 ; - sh:maxCount 1 ; - sh:node schema:FingerprintShape ; - ] ; - sh:property [ # Each composition has at LEAST ONE artifact - sh:path trov:hasArtifact ; - sh:minCount 1 ; - sh:node schema:ArtifactShape ; - ] . - -schema:FingerprintShape - a sh:NodeShape ; - sh:targetClass trov:CompositionFingerprint ; - sh:property [ # Each composition has at EXACTLY ONE sha256 - sh:message "*** Each fingerprint should have EXACTLY ONE sha256 with String format ***" ; - sh:path trov:sha256 ; - sh:datatype xsd:string ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] . - -schema:ArtifactShape - a sh:NodeShape ; - sh:targetClass trov:ResearchArtifact ; - sh:property [ # Each artifact has at MOST ONE memeType - sh:path trov:mimeType ; - sh:datatype xsd:string ; - sh:maxCount 1 ; - ] ; - sh:property [ # Each artifact has EXACTLY ONE sha256 - sh:path trov:sha256 ; - sh:datatype xsd:string ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] . - -schema:ArrShape - a sh:NodeShape ; - sh:targetClass trov:ArtifactArrangement ; - sh:property [ # Each artifact has at LEAST ONE artifact locus - sh:path trov:hasLocus ; - sh:minCount 1 ; - sh:node schema:LocusShape ; - ] . - -schema:LocusShape - a sh:NodeShape ; - sh:targetClass trov:ArtifactLocus ; - sh:property [ # Each artifact locus is linked to a valid artifact - sh:path trov:hasArtifact ; - sh:class trov:ResearchArtifact ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] ; - sh:property [ # Each artifact locus has EXACTLY ONE location - sh:path trov:hasLocation ; - sh:datatype xsd:string ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] . diff --git a/demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/products/scratch_report.gv b/demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/products/scratch_report.gv deleted file mode 100644 index 2b06d4e..0000000 --- a/demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/products/scratch_report.gv +++ /dev/null @@ -1,24 +0,0 @@ -strict digraph "" { - "arrangement/1" [color="#f77580"]; - "arrangement/1" -> "trov#ArtifactArrangement" [label="rdf#type"]; - "arrangement/1" -> "arrangement/1/locus/1" [label="trov#hasLocus"]; - "arrangement/1/locus/2" [color="#f77580"]; - "arrangement/1" -> "arrangement/1/locus/2" [label="trov#hasLocus"]; - "arrangement/1/locus/1" -> "trov#ArtifactLocus" [label="rdf#type"]; - "arrangement/1/locus/1" -> "composition/1/artifact/1" [label="trov#hasArtifact"]; - "arrangement/1/locus/1" -> filepath1 [label="trov#hasLocation"]; - "arrangement/1/locus/2" -> "trov#ArtifactLocus" [label="rdf#type"]; - "composition/1/artifact/100" [color="#f77580"]; - "arrangement/1/locus/2" -> "composition/1/artifact/100" [label="trov#hasArtifact"]; - "arrangement/1/locus/2" -> filepath2 [label="trov#hasLocation"]; - "composition/1/artifact/1" -> "trov#ResearchArtifact" [label="rdf#type"]; - "composition/1/artifact/1" -> "art.sha256.1" [label="trov#sha256"]; - "composition/1" -> "composition/1/artifact/1" [label="trov#hasArtifact"]; - "composition/1" -> "trov#ArtifactComposition" [label="rdf#type"]; - "composition/1" -> fp1 [label="trov#hasFingerprint"]; - fp1 -> "trov#CompositionFingerprint" [label="rdf#type"]; - fp1 -> "sha256.fp1" [label="trov#sha256"]; - "tro/1" -> "arrangement/1" [label="trov#hasArrangement"]; - "tro/1" -> "composition/1" [label="trov#hasComposition"]; - "tro/1" -> "trov#TransparentResearchObject" [label="rdf#type"]; -} diff --git a/demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/products/scratch_report.png b/demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/products/scratch_report.png deleted file mode 100644 index b62f8de300465db4ca5df8c04f09afbc44fe405e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149736 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

` 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%0D6-(dlG%M;$Y0 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 aCq63TZ!VVB7#38EPw%s``-x%cdFsEpu+Jy} diff --git a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro4.gv b/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro4.gv deleted file mode 100644 index b73e426..0000000 --- a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro4.gv +++ /dev/null @@ -1,58 +0,0 @@ -strict digraph "" { - "arrangement/1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "trov#ArtifactArrangement" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1" -> "trov#ArtifactArrangement" [label="rdf#type"]; - "arrangement/1/locus/1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1" -> "arrangement/1/locus/1" [label="trov#hasLocus"]; - "trov#ArtifactLocus" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1/locus/1" -> "trov#ArtifactLocus" [label="rdf#type"]; - "composition/1/artifact/1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1/locus/1" -> "composition/1/artifact/1" [label="trov#hasArtifact"]; - filepath1 [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1/locus/1" -> filepath1 [label="trov#hasLocation"]; - "trov#ResearchArtifact" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1/artifact/1" -> "trov#ResearchArtifact" [label="rdf#type"]; - "art.sha256.1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1/artifact/1" -> "art.sha256.1" [label="trov#sha256"]; - "composition/1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1" -> "composition/1/artifact/1" [label="trov#hasArtifact"]; - "trov#ArtifactComposition" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1" -> "trov#ArtifactComposition" [label="rdf#type"]; - fp1 [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1" -> fp1 [label="trov#hasFingerprint"]; - "trov#CompositionFingerprint" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - fp1 -> "trov#CompositionFingerprint" [label="rdf#type"]; - "tro/1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "tro/1" -> "arrangement/1" [label="trov#hasArrangement"]; - "tro/1" -> "composition/1" [label="trov#hasComposition"]; - "trov#TransparentResearchObject" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "tro/1" -> "trov#TransparentResearchObject" [label="rdf#type"]; -} diff --git a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro4.png b/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro4.png deleted file mode 100644 index bfa2134b71cfc1dc60481ffaa8a2e3729b215e5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84092 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%0DLF$FpPP$L_s*sBl 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 Q3jQ2BtfG{npnv=S1OGJJQvd(} diff --git a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro5.gv b/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro5.gv deleted file mode 100644 index 2153330..0000000 --- a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro5.gv +++ /dev/null @@ -1,71 +0,0 @@ -strict digraph "" { - "arrangement/1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "trov#ArtifactArrangement" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1" -> "trov#ArtifactArrangement" [label="rdf#type"]; - "arrangement/1/locus/1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1" -> "arrangement/1/locus/1" [label="trov#hasLocus"]; - "trov#ArtifactLocus" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1/locus/1" -> "trov#ArtifactLocus" [label="rdf#type"]; - "composition/1/artifact/1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1/locus/1" -> "composition/1/artifact/1" [label="trov#hasArtifact"]; - filepath1 [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1/locus/1" -> filepath1 [label="trov#hasLocation"]; - "trov#ResearchArtifact" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1/artifact/1" -> "trov#ResearchArtifact" [label="rdf#type"]; - "art.sha256.1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1/artifact/1" -> "art.sha256.1" [label="trov#sha256"]; - "composition/1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1" -> "composition/1/artifact/1" [label="trov#hasArtifact"]; - "trov#ArtifactComposition" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1" -> "trov#ArtifactComposition" [label="rdf#type"]; - fp1 [fillcolor="#fdccac", - shape=box, - style="filled, rounded"]; - "composition/1" -> fp1 [label="trov#hasFingerprint"]; - "trov#CompositionFingerprint" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - fp1 -> "trov#CompositionFingerprint" [label="rdf#type"]; - "sha256.fp1" [fillcolor="#cbd5e8", - shape=box, - style="filled, rounded"]; - fp1 -> "sha256.fp1" [label="trov#sha256"]; - "sha256.fp2" [fillcolor="#cbd5e8", - shape=box, - style="filled, rounded"]; - fp1 -> "sha256.fp2" [label="trov#sha256"]; - "*** Each fingerprint should have EXACTLY ONE sha256 with String format ***" [fillcolor="#fdccac", - shape=box, - style="filled, rounded, dashed"]; - fp1 -> "*** Each fingerprint should have EXACTLY ONE sha256 with String format ***" [label=ErrorMsg, - style=dashed]; - "tro/1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "tro/1" -> "arrangement/1" [label="trov#hasArrangement"]; - "tro/1" -> "composition/1" [label="trov#hasComposition"]; - "trov#TransparentResearchObject" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "tro/1" -> "trov#TransparentResearchObject" [label="rdf#type"]; -} diff --git a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro5.png b/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro5.png deleted file mode 100644 index 41a00b517143c406ec6fa73fcf135481b4b7b245..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118819 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 (&15E|^h*sCwuu61ubD_LAc!8q(NJ2FEyGuh0c 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 diff --git a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro5.txt b/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro5.txt deleted file mode 100644 index 6f632ac..0000000 --- a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro5.txt +++ /dev/null @@ -1,4 +0,0 @@ -Node: fp1 -Error Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** -Suggested Node(s) to be Updated: sha256.fp1, sha256.fp2 - diff --git a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/run.sh b/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/run.sh deleted file mode 100644 index 75cd639..0000000 --- a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/run.sh +++ /dev/null @@ -1,95 +0,0 @@ -#!/usr/bin/env bash - -# paths to data files -TRO_DECLARATION_SCHEMA_PATH="data/tro.schema.ttl" - -# ------------------------------------------------------------------------------ - -bash_cell 'tro validation 1 png: refer to a nonexistent artifact' << END_CELL - -validate_tro -f data/tro1.jsonld -s ${TRO_DECLARATION_SCHEMA_PATH} -o products/tro1 -of png -se True - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'tro validation 1 gv: refer to a nonexistent artifact' << END_CELL - -validate_tro -f data/tro1.jsonld -s ${TRO_DECLARATION_SCHEMA_PATH} -o products/tro1 -of gv -se True - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'tro validation 2 png: refer to a nonexistent artifact' << END_CELL - -validate_tro -f data/tro2.jsonld -s ${TRO_DECLARATION_SCHEMA_PATH} -o products/tro2 -of png -se True - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'tro validation 2 gv: refer to a nonexistent artifact' << END_CELL - -validate_tro -f data/tro2.jsonld -s ${TRO_DECLARATION_SCHEMA_PATH} -o products/tro2 -of gv -se True - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'tro validation 3 png: refer to a nonexistent artifact' << END_CELL - -validate_tro -f data/tro3.jsonld -s ${TRO_DECLARATION_SCHEMA_PATH} -o products/tro3 -of png -se True - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'tro validation 3 gv: refer to a nonexistent artifact' << END_CELL - -validate_tro -f data/tro3.jsonld -s ${TRO_DECLARATION_SCHEMA_PATH} -o products/tro3 -of gv -se True - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'tro validation 4 png: lack of sha256' << END_CELL - -validate_tro -f data/tro4.jsonld -s ${TRO_DECLARATION_SCHEMA_PATH} -o products/tro4 -of png -se True - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'tro validation 4 gv: lack of sha256' << END_CELL - -validate_tro -f data/tro4.jsonld -s ${TRO_DECLARATION_SCHEMA_PATH} -o products/tro4 -of gv -se True - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'tro validation 5 export as png: multiple sha256' << END_CELL - -validate_tro -f data/tro5.jsonld -s ${TRO_DECLARATION_SCHEMA_PATH} -o products/tro5 -of png -se True - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'tro validation 5 export as gv: multiple sha256' << END_CELL - -validate_tro -f data/tro5.jsonld -s ${TRO_DECLARATION_SCHEMA_PATH} -o products/tro5 -of gv -se True - -END_CELL - -# ------------------------------------------------------------------------------ - - -bash_cell 'tro validation 5 export as txt: multiple sha256' << END_CELL - -validate_tro -f data/tro5.jsonld -s ${TRO_DECLARATION_SCHEMA_PATH} -o products/tro5 -of txt -se True - -END_CELL - -# ------------------------------------------------------------------------------ \ No newline at end of file diff --git a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/run.txt b/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/run.txt deleted file mode 100644 index 7237b74..0000000 --- a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/run.txt +++ /dev/null @@ -1,914 +0,0 @@ -================================ bash cell | tro validation 1 png: refer to a nonexistent artifact ================================= - -validate_tro -f data/tro1.jsonld -s data/tro.schema.ttl -o products/tro1 -of png -se True - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -Validation Report -Conforms: False -Results (4): -Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:TrsShape ; sh:path trov:wasAssembledBy ] - Focus Node: - Result Path: trov:wasAssembledBy - Message: Less than 1 values on ->trov:wasAssembledBy -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:ArrShape ; sh:path trov:hasArrangement ] - Focus Node: - Value Node: - Result Path: trov:hasArrangement - Message: Value does not conform to Shape schema1:ArrShape. See details for more information. - Details: - Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:LocusShape ; sh:path trov:hasLocus ] - Focus Node: - Value Node: - Result Path: trov:hasLocus - Message: Value does not conform to Shape schema1:LocusShape. See details for more information. - Details: - Constraint Violation in ClassConstraintComponent (http://www.w3.org/ns/shacl#ClassConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:class trov:ResearchArtifact ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:hasArtifact ] - Focus Node: - Value Node: - Result Path: trov:hasArtifact - Message: Value does not have class trov:ResearchArtifact -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:LocusShape ; sh:path trov:hasLocus ] - Focus Node: - Value Node: - Result Path: trov:hasLocus - Message: Value does not conform to Shape schema1:LocusShape. See details for more information. - Details: - Constraint Violation in ClassConstraintComponent (http://www.w3.org/ns/shacl#ClassConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:class trov:ResearchArtifact ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:hasArtifact ] - Focus Node: - Value Node: - Result Path: trov:hasArtifact - Message: Value does not have class trov:ResearchArtifact -Constraint Violation in ClassConstraintComponent (http://www.w3.org/ns/shacl#ClassConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:class trov:ResearchArtifact ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:hasArtifact ] - Focus Node: - Value Node: - Result Path: trov:hasArtifact - Message: Value does not have class trov:ResearchArtifact - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -================================= bash cell | tro validation 1 gv: refer to a nonexistent artifact ================================= - -validate_tro -f data/tro1.jsonld -s data/tro.schema.ttl -o products/tro1 -of gv -se True - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -Validation Report -Conforms: False -Results (4): -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:LocusShape ; sh:path trov:hasLocus ] - Focus Node: - Value Node: - Result Path: trov:hasLocus - Message: Value does not conform to Shape schema1:LocusShape. See details for more information. - Details: - Constraint Violation in ClassConstraintComponent (http://www.w3.org/ns/shacl#ClassConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:class trov:ResearchArtifact ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:hasArtifact ] - Focus Node: - Value Node: - Result Path: trov:hasArtifact - Message: Value does not have class trov:ResearchArtifact -Constraint Violation in ClassConstraintComponent (http://www.w3.org/ns/shacl#ClassConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:class trov:ResearchArtifact ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:hasArtifact ] - Focus Node: - Value Node: - Result Path: trov:hasArtifact - Message: Value does not have class trov:ResearchArtifact -Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:TrsShape ; sh:path trov:wasAssembledBy ] - Focus Node: - Result Path: trov:wasAssembledBy - Message: Less than 1 values on ->trov:wasAssembledBy -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:ArrShape ; sh:path trov:hasArrangement ] - Focus Node: - Value Node: - Result Path: trov:hasArrangement - Message: Value does not conform to Shape schema1:ArrShape. See details for more information. - Details: - Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:LocusShape ; sh:path trov:hasLocus ] - Focus Node: - Value Node: - Result Path: trov:hasLocus - Message: Value does not conform to Shape schema1:LocusShape. See details for more information. - Details: - Constraint Violation in ClassConstraintComponent (http://www.w3.org/ns/shacl#ClassConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:class trov:ResearchArtifact ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:hasArtifact ] - Focus Node: - Value Node: - Result Path: trov:hasArtifact - Message: Value does not have class trov:ResearchArtifact - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -================================ bash cell | tro validation 2 png: refer to a nonexistent artifact ================================= - -validate_tro -f data/tro2.jsonld -s data/tro.schema.ttl -o products/tro2 -of png -se True - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -Validation Report -Conforms: False -Results (3): -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:ArrShape ; sh:path trov:hasArrangement ] - Focus Node: - Value Node: - Result Path: trov:hasArrangement - Message: Value does not conform to Shape schema1:ArrShape. See details for more information. - Details: - Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:LocusShape ; sh:path trov:hasLocus ] - Focus Node: - Value Node: - Result Path: trov:hasLocus - Message: Value does not conform to Shape schema1:LocusShape. See details for more information. - Details: - Constraint Violation in ClassConstraintComponent (http://www.w3.org/ns/shacl#ClassConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:class trov:ResearchArtifact ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:hasArtifact ] - Focus Node: - Value Node: - Result Path: trov:hasArtifact - Message: Value does not have class trov:ResearchArtifact -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:LocusShape ; sh:path trov:hasLocus ] - Focus Node: - Value Node: - Result Path: trov:hasLocus - Message: Value does not conform to Shape schema1:LocusShape. See details for more information. - Details: - Constraint Violation in ClassConstraintComponent (http://www.w3.org/ns/shacl#ClassConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:class trov:ResearchArtifact ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:hasArtifact ] - Focus Node: - Value Node: - Result Path: trov:hasArtifact - Message: Value does not have class trov:ResearchArtifact -Constraint Violation in ClassConstraintComponent (http://www.w3.org/ns/shacl#ClassConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:class trov:ResearchArtifact ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:hasArtifact ] - Focus Node: - Value Node: - Result Path: trov:hasArtifact - Message: Value does not have class trov:ResearchArtifact - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -================================= bash cell | tro validation 2 gv: refer to a nonexistent artifact ================================= - -validate_tro -f data/tro2.jsonld -s data/tro.schema.ttl -o products/tro2 -of gv -se True - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -Validation Report -Conforms: False -Results (3): -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:ArrShape ; sh:path trov:hasArrangement ] - Focus Node: - Value Node: - Result Path: trov:hasArrangement - Message: Value does not conform to Shape schema1:ArrShape. See details for more information. - Details: - Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:LocusShape ; sh:path trov:hasLocus ] - Focus Node: - Value Node: - Result Path: trov:hasLocus - Message: Value does not conform to Shape schema1:LocusShape. See details for more information. - Details: - Constraint Violation in ClassConstraintComponent (http://www.w3.org/ns/shacl#ClassConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:class trov:ResearchArtifact ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:hasArtifact ] - Focus Node: - Value Node: - Result Path: trov:hasArtifact - Message: Value does not have class trov:ResearchArtifact -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:LocusShape ; sh:path trov:hasLocus ] - Focus Node: - Value Node: - Result Path: trov:hasLocus - Message: Value does not conform to Shape schema1:LocusShape. See details for more information. - Details: - Constraint Violation in ClassConstraintComponent (http://www.w3.org/ns/shacl#ClassConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:class trov:ResearchArtifact ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:hasArtifact ] - Focus Node: - Value Node: - Result Path: trov:hasArtifact - Message: Value does not have class trov:ResearchArtifact -Constraint Violation in ClassConstraintComponent (http://www.w3.org/ns/shacl#ClassConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:class trov:ResearchArtifact ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:hasArtifact ] - Focus Node: - Value Node: - Result Path: trov:hasArtifact - Message: Value does not have class trov:ResearchArtifact - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -================================ bash cell | tro validation 3 png: refer to a nonexistent artifact ================================= - -validate_tro -f data/tro3.jsonld -s data/tro.schema.ttl -o products/tro3 -of png -se True - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -Validation Report -Conforms: False -Results (13): -Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:publicKey ] - Focus Node: - Result Path: trov:publicKey - Message: More than 1 values on ->trov:publicKey -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:FingerprintShape ; sh:path trov:hasFingerprint ] - Focus Node: - Value Node: - Result Path: trov:hasFingerprint - Message: Value does not conform to Shape schema1:FingerprintShape. See details for more information. - Details: - Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:FingerprintShape ; sh:path trov:hasFingerprint ] - Focus Node: - Value Node: - Result Path: trov:hasFingerprint - Message: Value does not conform to Shape schema1:FingerprintShape. See details for more information. - Details: - Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** -Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:ArtifactShape ; sh:path trov:hasArtifact ] - Focus Node: - Result Path: trov:hasArtifact - Message: Less than 1 values on ->trov:hasArtifact -Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:publicKey ] - Focus Node: - Result Path: trov:publicKey - Message: More than 1 values on ->trov:publicKey -Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:LocusShape ; sh:path trov:hasLocus ] - Focus Node: - Value Node: - Result Path: trov:hasLocus - Message: Value does not conform to Shape schema1:LocusShape. See details for more information. - Details: - Constraint Violation in ClassConstraintComponent (http://www.w3.org/ns/shacl#ClassConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:class trov:ResearchArtifact ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:hasArtifact ] - Focus Node: - Value Node: - Result Path: trov:hasArtifact - Message: Value does not have class trov:ResearchArtifact -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:TrsShape ; sh:path trov:wasAssembledBy ] - Focus Node: - Value Node: - Result Path: trov:wasAssembledBy - Message: Value does not conform to Shape schema1:TrsShape. See details for more information. - Details: - Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:publicKey ] - Focus Node: - Result Path: trov:publicKey - Message: More than 1 values on ->trov:publicKey -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:node schema1:TsaShape ; sh:path trov:wasTimestampedBy ] - Focus Node: - Value Node: - Result Path: trov:wasTimestampedBy - Message: Value does not conform to Shape schema1:TsaShape. See details for more information. - Details: - Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:publicKey ] - Focus Node: - Result Path: trov:publicKey - Message: More than 1 values on ->trov:publicKey -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:CompShape ; sh:path trov:hasComposition ] - Focus Node: - Value Node: - Result Path: trov:hasComposition - Message: Value does not conform to Shape schema1:CompShape. See details for more information. - Details: - Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:FingerprintShape ; sh:path trov:hasFingerprint ] - Focus Node: - Value Node: - Result Path: trov:hasFingerprint - Message: Value does not conform to Shape schema1:FingerprintShape. See details for more information. - Details: - Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** - Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:ArtifactShape ; sh:path trov:hasArtifact ] - Focus Node: - Result Path: trov:hasArtifact - Message: Less than 1 values on ->trov:hasArtifact -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:CompShape ; sh:path trov:hasComposition ] - Focus Node: - Value Node: - Result Path: trov:hasComposition - Message: Value does not conform to Shape schema1:CompShape. See details for more information. - Details: - Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:FingerprintShape ; sh:path trov:hasFingerprint ] - Focus Node: - Value Node: - Result Path: trov:hasFingerprint - Message: Value does not conform to Shape schema1:FingerprintShape. See details for more information. - Details: - Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:ArrShape ; sh:path trov:hasArrangement ] - Focus Node: - Value Node: - Result Path: trov:hasArrangement - Message: Value does not conform to Shape schema1:ArrShape. See details for more information. - Details: - Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:LocusShape ; sh:path trov:hasLocus ] - Focus Node: - Value Node: - Result Path: trov:hasLocus - Message: Value does not conform to Shape schema1:LocusShape. See details for more information. - Details: - Constraint Violation in ClassConstraintComponent (http://www.w3.org/ns/shacl#ClassConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:class trov:ResearchArtifact ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:hasArtifact ] - Focus Node: - Value Node: - Result Path: trov:hasArtifact - Message: Value does not have class trov:ResearchArtifact -Constraint Violation in ClassConstraintComponent (http://www.w3.org/ns/shacl#ClassConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:class trov:ResearchArtifact ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:hasArtifact ] - Focus Node: - Value Node: - Result Path: trov:hasArtifact - Message: Value does not have class trov:ResearchArtifact - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -================================= bash cell | tro validation 3 gv: refer to a nonexistent artifact ================================= - -validate_tro -f data/tro3.jsonld -s data/tro.schema.ttl -o products/tro3 -of gv -se True - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -Validation Report -Conforms: False -Results (13): -Constraint Violation in ClassConstraintComponent (http://www.w3.org/ns/shacl#ClassConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:class trov:ResearchArtifact ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:hasArtifact ] - Focus Node: - Value Node: - Result Path: trov:hasArtifact - Message: Value does not have class trov:ResearchArtifact -Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:TrsShape ; sh:path trov:wasAssembledBy ] - Focus Node: - Value Node: - Result Path: trov:wasAssembledBy - Message: Value does not conform to Shape schema1:TrsShape. See details for more information. - Details: - Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:publicKey ] - Focus Node: - Result Path: trov:publicKey - Message: More than 1 values on ->trov:publicKey -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:node schema1:TsaShape ; sh:path trov:wasTimestampedBy ] - Focus Node: - Value Node: - Result Path: trov:wasTimestampedBy - Message: Value does not conform to Shape schema1:TsaShape. See details for more information. - Details: - Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:publicKey ] - Focus Node: - Result Path: trov:publicKey - Message: More than 1 values on ->trov:publicKey -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:CompShape ; sh:path trov:hasComposition ] - Focus Node: - Value Node: - Result Path: trov:hasComposition - Message: Value does not conform to Shape schema1:CompShape. See details for more information. - Details: - Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:FingerprintShape ; sh:path trov:hasFingerprint ] - Focus Node: - Value Node: - Result Path: trov:hasFingerprint - Message: Value does not conform to Shape schema1:FingerprintShape. See details for more information. - Details: - Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:CompShape ; sh:path trov:hasComposition ] - Focus Node: - Value Node: - Result Path: trov:hasComposition - Message: Value does not conform to Shape schema1:CompShape. See details for more information. - Details: - Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:FingerprintShape ; sh:path trov:hasFingerprint ] - Focus Node: - Value Node: - Result Path: trov:hasFingerprint - Message: Value does not conform to Shape schema1:FingerprintShape. See details for more information. - Details: - Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** - Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:ArtifactShape ; sh:path trov:hasArtifact ] - Focus Node: - Result Path: trov:hasArtifact - Message: Less than 1 values on ->trov:hasArtifact -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:ArrShape ; sh:path trov:hasArrangement ] - Focus Node: - Value Node: - Result Path: trov:hasArrangement - Message: Value does not conform to Shape schema1:ArrShape. See details for more information. - Details: - Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:LocusShape ; sh:path trov:hasLocus ] - Focus Node: - Value Node: - Result Path: trov:hasLocus - Message: Value does not conform to Shape schema1:LocusShape. See details for more information. - Details: - Constraint Violation in ClassConstraintComponent (http://www.w3.org/ns/shacl#ClassConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:class trov:ResearchArtifact ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:hasArtifact ] - Focus Node: - Value Node: - Result Path: trov:hasArtifact - Message: Value does not have class trov:ResearchArtifact -Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:publicKey ] - Focus Node: - Result Path: trov:publicKey - Message: More than 1 values on ->trov:publicKey -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:LocusShape ; sh:path trov:hasLocus ] - Focus Node: - Value Node: - Result Path: trov:hasLocus - Message: Value does not conform to Shape schema1:LocusShape. See details for more information. - Details: - Constraint Violation in ClassConstraintComponent (http://www.w3.org/ns/shacl#ClassConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:class trov:ResearchArtifact ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:hasArtifact ] - Focus Node: - Value Node: - Result Path: trov:hasArtifact - Message: Value does not have class trov:ResearchArtifact -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:FingerprintShape ; sh:path trov:hasFingerprint ] - Focus Node: - Value Node: - Result Path: trov:hasFingerprint - Message: Value does not conform to Shape schema1:FingerprintShape. See details for more information. - Details: - Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:FingerprintShape ; sh:path trov:hasFingerprint ] - Focus Node: - Value Node: - Result Path: trov:hasFingerprint - Message: Value does not conform to Shape schema1:FingerprintShape. See details for more information. - Details: - Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** -Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:ArtifactShape ; sh:path trov:hasArtifact ] - Focus Node: - Result Path: trov:hasArtifact - Message: Less than 1 values on ->trov:hasArtifact -Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:publicKey ] - Focus Node: - Result Path: trov:publicKey - Message: More than 1 values on ->trov:publicKey - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -========================================= bash cell | tro validation 4 png: lack of sha256 ========================================= - -validate_tro -f data/tro4.jsonld -s data/tro.schema.ttl -o products/tro4 -of png -se True - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -Validation Report -Conforms: False -Results (4): -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:FingerprintShape ; sh:path trov:hasFingerprint ] - Focus Node: - Value Node: - Result Path: trov:hasFingerprint - Message: Value does not conform to Shape schema1:FingerprintShape. See details for more information. - Details: - Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** -Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:TrsShape ; sh:path trov:wasAssembledBy ] - Focus Node: - Result Path: trov:wasAssembledBy - Message: Less than 1 values on ->trov:wasAssembledBy -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:CompShape ; sh:path trov:hasComposition ] - Focus Node: - Value Node: - Result Path: trov:hasComposition - Message: Value does not conform to Shape schema1:CompShape. See details for more information. - Details: - Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:FingerprintShape ; sh:path trov:hasFingerprint ] - Focus Node: - Value Node: - Result Path: trov:hasFingerprint - Message: Value does not conform to Shape schema1:FingerprintShape. See details for more information. - Details: - Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** -Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -========================================= bash cell | tro validation 4 gv: lack of sha256 ========================================== - -validate_tro -f data/tro4.jsonld -s data/tro.schema.ttl -o products/tro4 -of gv -se True - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -Validation Report -Conforms: False -Results (4): -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:FingerprintShape ; sh:path trov:hasFingerprint ] - Focus Node: - Value Node: - Result Path: trov:hasFingerprint - Message: Value does not conform to Shape schema1:FingerprintShape. See details for more information. - Details: - Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** -Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** -Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:TrsShape ; sh:path trov:wasAssembledBy ] - Focus Node: - Result Path: trov:wasAssembledBy - Message: Less than 1 values on ->trov:wasAssembledBy -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:CompShape ; sh:path trov:hasComposition ] - Focus Node: - Value Node: - Result Path: trov:hasComposition - Message: Value does not conform to Shape schema1:CompShape. See details for more information. - Details: - Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:FingerprintShape ; sh:path trov:hasFingerprint ] - Focus Node: - Value Node: - Result Path: trov:hasFingerprint - Message: Value does not conform to Shape schema1:FingerprintShape. See details for more information. - Details: - Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -=================================== bash cell | tro validation 5 export as png: multiple sha256 ==================================== - -validate_tro -f data/tro5.jsonld -s data/tro.schema.ttl -o products/tro5 -of png -se True - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -Validation Report -Conforms: False -Results (4): -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:FingerprintShape ; sh:path trov:hasFingerprint ] - Focus Node: - Value Node: - Result Path: trov:hasFingerprint - Message: Value does not conform to Shape schema1:FingerprintShape. See details for more information. - Details: - Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** -Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** -Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:TrsShape ; sh:path trov:wasAssembledBy ] - Focus Node: - Result Path: trov:wasAssembledBy - Message: Less than 1 values on ->trov:wasAssembledBy -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:CompShape ; sh:path trov:hasComposition ] - Focus Node: - Value Node: - Result Path: trov:hasComposition - Message: Value does not conform to Shape schema1:CompShape. See details for more information. - Details: - Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:FingerprintShape ; sh:path trov:hasFingerprint ] - Focus Node: - Value Node: - Result Path: trov:hasFingerprint - Message: Value does not conform to Shape schema1:FingerprintShape. See details for more information. - Details: - Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -==================================== bash cell | tro validation 5 export as gv: multiple sha256 ==================================== - -validate_tro -f data/tro5.jsonld -s data/tro.schema.ttl -o products/tro5 -of gv -se True - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -Validation Report -Conforms: False -Results (4): -Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:FingerprintShape ; sh:path trov:hasFingerprint ] - Focus Node: - Value Node: - Result Path: trov:hasFingerprint - Message: Value does not conform to Shape schema1:FingerprintShape. See details for more information. - Details: - Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** -Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:TrsShape ; sh:path trov:wasAssembledBy ] - Focus Node: - Result Path: trov:wasAssembledBy - Message: Less than 1 values on ->trov:wasAssembledBy -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:CompShape ; sh:path trov:hasComposition ] - Focus Node: - Value Node: - Result Path: trov:hasComposition - Message: Value does not conform to Shape schema1:CompShape. See details for more information. - Details: - Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:FingerprintShape ; sh:path trov:hasFingerprint ] - Focus Node: - Value Node: - Result Path: trov:hasFingerprint - Message: Value does not conform to Shape schema1:FingerprintShape. See details for more information. - Details: - Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -=================================== bash cell | tro validation 5 export as txt: multiple sha256 ==================================== - -validate_tro -f data/tro5.jsonld -s data/tro.schema.ttl -o products/tro5 -of txt -se True - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -Validation Report -Conforms: False -Results (4): -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:FingerprintShape ; sh:path trov:hasFingerprint ] - Focus Node: - Value Node: - Result Path: trov:hasFingerprint - Message: Value does not conform to Shape schema1:FingerprintShape. See details for more information. - Details: - Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** -Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** -Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:TrsShape ; sh:path trov:wasAssembledBy ] - Focus Node: - Result Path: trov:wasAssembledBy - Message: Less than 1 values on ->trov:wasAssembledBy -Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:CompShape ; sh:path trov:hasComposition ] - Focus Node: - Value Node: - Result Path: trov:hasComposition - Message: Value does not conform to Shape schema1:CompShape. See details for more information. - Details: - Constraint Violation in NodeConstraintComponent (http://www.w3.org/ns/shacl#NodeConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:maxCount Literal("1", datatype=xsd:integer) ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:node schema1:FingerprintShape ; sh:path trov:hasFingerprint ] - Focus Node: - Value Node: - Result Path: trov:hasFingerprint - Message: Value does not conform to Shape schema1:FingerprintShape. See details for more information. - Details: - Constraint Violation in MaxCountConstraintComponent (http://www.w3.org/ns/shacl#MaxCountConstraintComponent): - Severity: sh:Violation - Source Shape: [ sh:datatype xsd:string ; sh:maxCount Literal("1", datatype=xsd:integer) ; sh:message Literal("*** Each fingerprint should have EXACTLY ONE sha256 with String format ***") ; sh:minCount Literal("1", datatype=xsd:integer) ; sh:path trov:sha256 ] - Focus Node: - Result Path: trov:sha256 - Message: *** Each fingerprint should have EXACTLY ONE sha256 with String format *** - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - diff --git a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/Makefile b/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/Makefile deleted file mode 100644 index 68e529c..0000000 --- a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/Makefile +++ /dev/null @@ -1 +0,0 @@ -include ${SHELL_NOTEBOOK_DOT_DIR}/Makefile.demo-runner diff --git a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/data/tro.schema.ttl b/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/data/tro.schema.ttl deleted file mode 100644 index 6ecd9c9..0000000 --- a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/data/tro.schema.ttl +++ /dev/null @@ -1,128 +0,0 @@ -@prefix rdf: . -@prefix rdfs: . -@prefix trov: . -@prefix : . - -@prefix xsd: . -@prefix sh: . -@prefix schema: . - -schema:TroShape - a sh:NodeShape ; - sh:targetClass trov:TransparentResearchObject ; - sh:property [ # One TRO has ANY number of comments - sh:path rdfs:comment ; - sh:datatype xsd:string ; - ] ; - sh:property [ # One TRO has EXACTLY ONE TRS - sh:path trov:wasAssembledBy ; - sh:minCount 1 ; - sh:maxCount 1 ; - sh:node schema:TrsShape ; - ] ; - sh:property [ # One TRO has at MOST ONE TSA - sh:path trov:wasTimestampedBy ; - sh:maxCount 1 ; - sh:node schema:TsaShape ; - ] ; - sh:property [ # One TRO has at LEAST ONE composition - sh:path trov:hasComposition ; - sh:minCount 1 ; - sh:node schema:CompShape ; - ] ; - sh:property [ # One TRO has at LEAST ONE arrangement - sh:path trov:hasArrangement ; - sh:minCount 1 ; - sh:node schema:ArrShape ; - ] . - - -schema:TrsShape - a sh:NodeShape ; - sh:targetClass trov:TrustedResearchSystem ; - sh:property [ - sh:path rdfs:comment ; - sh:datatype xsd:string ; - ] ; - sh:property [ # One TRS has EXACTLY ONE public key - sh:path trov:publicKey ; - sh:datatype xsd:string ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] . - -schema:TsaShape - a sh:NodeShape ; - sh:targetClass trov:TimeStampingAuthority ; - sh:property [ # One TSA has EXACTLY ONE public key - sh:path trov:publicKey ; - sh:datatype xsd:string ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] . - -schema:CompShape - a sh:NodeShape ; - sh:targetClass trov:ArtifactComposition ; - sh:property [ # Each composition has EXACTLY ONE fingerprint - sh:path trov:hasFingerprint ; - sh:minCount 1 ; - sh:maxCount 1 ; - sh:node schema:FingerprintShape ; - ] ; - sh:property [ # Each composition has at LEAST ONE artifact - sh:path trov:hasArtifact ; - sh:minCount 1 ; - sh:node schema:ArtifactShape ; - ] . - -schema:FingerprintShape - a sh:NodeShape ; - sh:targetClass trov:CompositionFingerprint ; - sh:property [ # Each composition has at EXACTLY ONE sha256 - sh:message "*** Each fingerprint should have EXACTLY ONE sha256 with String format ***" ; - sh:path trov:sha256 ; - sh:datatype xsd:string ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] . - -schema:ArtifactShape - a sh:NodeShape ; - sh:targetClass trov:ResearchArtifact ; - sh:property [ # Each artifact has at MOST ONE memeType - sh:path trov:mimeType ; - sh:datatype xsd:string ; - sh:maxCount 1 ; - ] ; - sh:property [ # Each artifact has EXACTLY ONE sha256 - sh:path trov:sha256 ; - sh:datatype xsd:string ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] . - -schema:ArrShape - a sh:NodeShape ; - sh:targetClass trov:ArtifactArrangement ; - sh:property [ # Each artifact has at LEAST ONE artifact locus - sh:path trov:hasLocus ; - sh:minCount 1 ; - sh:node schema:LocusShape ; - ] . - -schema:LocusShape - a sh:NodeShape ; - sh:targetClass trov:ArtifactLocus ; - sh:property [ # Each artifact locus is linked to a valid artifact - sh:path trov:hasArtifact ; - sh:class trov:ResearchArtifact ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] ; - sh:property [ # Each artifact locus has EXACTLY ONE location - sh:path trov:hasLocation ; - sh:datatype xsd:string ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] . diff --git a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/data/tro1.jsonld b/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/data/tro1.jsonld deleted file mode 100644 index 48ffe6a..0000000 --- a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/data/tro1.jsonld +++ /dev/null @@ -1,51 +0,0 @@ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [ - { - "@id": "tro/1", - "@type": "trov:TransparentResearchObject", - - "trov:hasComposition": [ - { - "@id": "composition/1", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": - { - "@id": "fp1", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "sha256.fp1" - }, - - "trov:hasArtifact": [ - { - "@id": "composition/1/artifact/1", - "@type": "trov:ResearchArtifact", - "trov:sha256": "art.sha256.1" - }] - }], - "trov:hasArrangement": { - "@id": "arrangement/1", - "@type": "trov:ArtifactArrangement", - "trov:hasLocus": [ - { - "@id": "arrangement/1/locus/1", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, - "trov:hasLocation": "filepath1" - }, - { - "@id": "arrangement/1/locus/2", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/100" }, - "trov:hasLocation": "filepath2" - }] - } - }] -} \ No newline at end of file diff --git a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/data/tro3.jsonld b/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/data/tro3.jsonld deleted file mode 100644 index f0d6d8e..0000000 --- a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/data/tro3.jsonld +++ /dev/null @@ -1,102 +0,0 @@ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [ - { - "@id": "tro/1", - "@type": "trov:TransparentResearchObject", - "rdfs:comment": "A composition of two files in a single arrangement endorsed by a TRS that enforces no policies", - - "trov:wasAssembledBy": { - "@id": "trs", - "@type": "trov:TrustedResearchSystem", - "rdfs:comment": "TRS that enforces no policies", - "trov:publicKey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n" - }, - - "trov:wasTimestampedBy": { - "@id": "tsa", - "@type": "trov:TimeStampingAuthority", - "trov:publicKey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n" - }, - - "trov:hasComposition": [ - { - "@id": "composition/1", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": - { - "@id": "fingerprint", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc" - }, - - "trov:hasArtifact": [ - { - "@id": "composition/1/artifact/1", - "@type": "trov:ResearchArtifact", - "trov:mimeType": "text/plain", - "trov:sha256": "b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c" - }, - - { - "@id": "composition/1/artifact/2", - "@type": "trov:ResearchArtifact", - "trov:mimeType": "text/plain", - "trov:sha256": "7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730" - }] - }, - { - "@id": "composition/2", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": - { - "@id": "fingerprint", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc" - } - }], - - "trov:hasArrangement": [ - { - "@id": "arrangement/1", - "@type": "trov:ArtifactArrangement", - "trov:hasLocus": [ - { - "@id": "arrangement/1/locus/1", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, - "trov:hasLocation": "file1" - }, - { - "@id": "arrangement/1/locus/2", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, - "trov:hasLocation": "file1" - }, - { - "@id": "arrangement/1/locus/3", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/2" }, - "trov:hasLocation": "file2" - }, - { - "@id": "arrangement/1/locus/4", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/100" }, - "trov:hasLocation": "file2" - } - ] - }] - }, - { "@id": "trs", "trov:publicKey": "trs.pk2" }, - { "@id": "tsa", "trov:publicKey": "tsa.pk2" }, - { "@id": "fingerprint", "trov:sha256": "fp2" } -]} diff --git a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/products/tro2.gv b/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/products/tro2.gv deleted file mode 100644 index dfc46ef..0000000 --- a/demo/02-explorations/12-validate-jsonld/07-report-rdfvr/products/tro2.gv +++ /dev/null @@ -1,168 +0,0 @@ -strict digraph "" { - "arrangement/1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "trov#ArtifactArrangement" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1" -> "trov#ArtifactArrangement" [label="rdf#type"]; - "arrangement/1/locus/1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1" -> "arrangement/1/locus/1" [label="trov#hasLocus"]; - "arrangement/1/locus/2" [fillcolor="#fdccac", - shape=box, - style="filled, rounded"]; - "arrangement/1" -> "arrangement/1/locus/2" [label="trov#hasLocus"]; - "trov#ArtifactLocus" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1/locus/1" -> "trov#ArtifactLocus" [label="rdf#type"]; - "composition/1/artifact/1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1/locus/1" -> "composition/1/artifact/1" [label="trov#hasArtifact"]; - file1 [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1/locus/1" -> file1 [label="trov#hasLocation"]; - "arrangement/1/locus/2" -> "trov#ArtifactLocus" [label="rdf#type"]; - "composition/1/artifact/100" [fillcolor="#cbd5e8", - shape=box, - style="filled, rounded"]; - "arrangement/1/locus/2" -> "composition/1/artifact/100" [label="trov#hasArtifact"]; - file2 [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1/locus/2" -> file2 [label="trov#hasLocation"]; - "Value does not have class trov:ResearchArtifact" [fillcolor="#fdccac", - shape=box, - style="filled, rounded, dashed"]; - "arrangement/1/locus/2" -> "Value does not have class trov:ResearchArtifact" [label=ErrorMsg, - style=dashed]; - "trov#ResearchArtifact" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1/artifact/1" -> "trov#ResearchArtifact" [label="rdf#type"]; - "text/plain" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1/artifact/1" -> "text/plain" [label="trov#mimeType"]; - b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1/artifact/1" -> b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c [label="trov#sha256"]; - "composition/1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1" -> "composition/1/artifact/1" [label="trov#hasArtifact"]; - "trov#ArtifactComposition" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1" -> "trov#ArtifactComposition" [label="rdf#type"]; - "composition/1/artifact/2" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1" -> "composition/1/artifact/2" [label="trov#hasArtifact"]; - fingerprint [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1" -> fingerprint [label="trov#hasFingerprint"]; - "composition/1/artifact/2" -> "trov#ResearchArtifact" [label="rdf#type"]; - "composition/1/artifact/2" -> "text/plain" [label="trov#mimeType"]; - "7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1/artifact/2" -> "7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730" [label="trov#sha256"]; - "trov#CompositionFingerprint" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - fingerprint -> "trov#CompositionFingerprint" [label="rdf#type"]; - "218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - fingerprint -> "218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc" [label="trov#sha256"]; - "tro/1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "tro/1" -> "arrangement/1" [label="trov#hasArrangement"]; - "tro/1" -> "composition/1" [label="trov#hasComposition"]; - "trov#TransparentResearchObject" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "tro/1" -> "trov#TransparentResearchObject" [label="rdf#type"]; - "A composition of two files in a single arrangement endorsed by a TRS that enforces no policies" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "tro/1" -> "A composition of two files in a single arrangement endorsed by a TRS that enforces no policies" [label="rdfs#comment"]; - trs [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "tro/1" -> trs [label="trov#wasAssembledBy"]; - tsa [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "tro/1" -> tsa [label="trov#wasTimestampedBy"]; - "trov#TrustedResearchSystem" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - trs -> "trov#TrustedResearchSystem" [label="rdf#type"]; - "TRS that enforces no policies" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - trs -> "TRS that enforces no policies" [label="rdfs#comment"]; - "-----BEGIN PGP PUBLIC KEY BLOCK----- -mI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f -PFa62W7k1CWEm7KLcOO5hlmMvI+\ -GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6 -TbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0 -HXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+\ -iM4EEwEKADgWIQQS8oDdaGyb -HbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK -CRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+\ -CknyQ3yV/fpEU+IH2T6qS -xrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N -IsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+\ -1An5ogCOACg== -=vuaX ------END PGP PUBLIC KEY BLOCK----- -" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - trs -> "-----BEGIN PGP PUBLIC KEY BLOCK----- -mI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f -PFa62W7k1CWEm7KLcOO5hlmMvI+\ -GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6 -TbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0 -HXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+\ -iM4EEwEKADgWIQQS8oDdaGyb -HbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK -CRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+\ -CknyQ3yV/fpEU+IH2T6qS -xrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N -IsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+\ -1An5ogCOACg== -=vuaX ------END PGP PUBLIC KEY BLOCK----- -" [label="trov#publicKey"]; - tsa -> "-----BEGIN PGP PUBLIC KEY BLOCK----- -mI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f -PFa62W7k1CWEm7KLcOO5hlmMvI+\ -GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6 -TbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0 -HXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+\ -iM4EEwEKADgWIQQS8oDdaGyb -HbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK -CRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+\ -CknyQ3yV/fpEU+IH2T6qS -xrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N -IsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+\ -1An5ogCOACg== -=vuaX ------END PGP PUBLIC KEY BLOCK----- -" [label="trov#publicKey"]; - "trov#TimeStampingAuthority" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - tsa -> "trov#TimeStampingAuthority" [label="rdf#type"]; -} diff --git a/demo/02-explorations/12-validate-jsonld/Makefile b/demo/02-explorations/12-validate-jsonld/Makefile deleted file mode 100644 index 68e529c..0000000 --- a/demo/02-explorations/12-validate-jsonld/Makefile +++ /dev/null @@ -1 +0,0 @@ -include ${SHELL_NOTEBOOK_DOT_DIR}/Makefile.demo-runner diff --git a/demo/02-explorations/common/trace-vocab.jsonld b/demo/02-explorations/common/trace-vocab.jsonld deleted file mode 100644 index 95fae6d..0000000 --- a/demo/02-explorations/common/trace-vocab.jsonld +++ /dev/null @@ -1,102 +0,0 @@ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2022/10/trov#" - }], - - "@graph": [ - - { - "@id": "trov:Policy", - "@type": "rdfs:Class", - "rdfs:label": "Policy" - }, - { - "@id": "trov:ObjectPolicy", - "@type": "rdfs:Class", - "rdfs:label": "ObjectPolicy", - "rdfs:subClassOf": { "@id": "trov:Policy" } - }, - { - "@id": "trov:SystemPolicy", - "@type": "rdfs:Class", - "rdfs:label": "SystemPolicy", - "rdfs:subClassOf": { "@id": "trov:Policy" } - }, - - { - "@id": "trov:enforces", - "@type": "rdf:Property", - "rdfs:label": "enforces" - }, - - - { - "@id": "trov:IncludeAllInput", - "@type": "trov:ObjectPolicy", - "rdfs:label": "IncludeAllInput", - "rdfs:comment": "Research object includes all inputs." - }, - { - "@id": "trov:AllInputAvailableBeforeRuntime", - "@type": "trov:SystemPolicy", - "rdfs:label": "AllInputAvailableBeforeRuntime", - "rdfs:comment": "Research system makes all inputs available prior to runtime." - }, - { - "@id": "trov:AllInputAvailableAfterRuntime", - "@type": "trov:SystemPolicy", - "rdfs:label": "AllInputAvailableAfterRuntime", - "rdfs:comment": "Research system makes all inputs available after runtime." - }, - { - "@id": "trov:IncludeAllOutput", - "@type": "trov:ObjectPolicy", - "rdfs:label": "IncludeAllOutput", - "rdfs:comment": "Research object includes all outputs." - }, - { - "@id": "trov:IncludeAllCode", - "@type": "trov:ObjectPolicy", - "rdfs:label": "IncludeAllCode", - "rdfs:comment": "Research object includes all code." - }, - { - "@id": "trov:DescribeSoftwareEnvironment", - "@type": "trov:ObjectPolicy", - "rdfs:label": "DescribeSoftwareEnvironment", - "rdfs:comment": "Research object describes the full software environment." - }, - { - "@id": "trov:PreventInternetAccess", - "@type": "trov:SystemPolicy", - "rdfs:label": "PreventInternetAccess", - "rdfs:comment": "Research system prevents internet access during execution." - }, - { - "@id": "trov:PreventInterventionDuringRuntime", - "@type": "trov:SystemPolicy", - "rdfs:label": "PreventInterventionDuringRuntime", - "rdfs:comment": "Research system prevents interaction with author of package during runtime." - }, - { - "@id": "trov:PreventInterventionBeforeRuntime", - "@type": "trov:SystemPolicy", - "rdfs:label": "PreventInterventionBeforeRuntime", - "rdfs:comment": "Research system prevents interaction with author prior to runtime." - }, - { - "@id": "trov:TrackIntermediateSteps", - "@type": "trov:SystemPolicy", - "rdfs:label": "TrackIntermediateSteps", - "rdfs:comment": "Research system tracks intermediate steps." - }, - { - "@id": "trov:EvidenceRuntime", - "@type": "trov:SystemPolicy", - "rdfs:label": "EvidenceRuntime", - "rdfs:comment": "Research system shows evidence of runtime." - } - ] -} diff --git a/demo/02-explorations/common/tro-01-from-minimal-trs.jsonld b/demo/02-explorations/common/tro-01-from-minimal-trs.jsonld deleted file mode 100644 index 166d527..0000000 --- a/demo/02-explorations/common/tro-01-from-minimal-trs.jsonld +++ /dev/null @@ -1,14 +0,0 @@ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - }], - - "@graph": [{ - - "@id": "trov:tro/01", - "@type": "trov:ResearchObject", - - "trov:generatedBySystem": { "@id": "trov:system/01" } - }] -} diff --git a/demo/02-explorations/common/tro-02-from-type-a-trs.jsonld b/demo/02-explorations/common/tro-02-from-type-a-trs.jsonld deleted file mode 100644 index 96e6029..0000000 --- a/demo/02-explorations/common/tro-02-from-type-a-trs.jsonld +++ /dev/null @@ -1,21 +0,0 @@ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - }], - - "@graph": [{ - - "@id": "trov:tro/02", - "@type": "trov:ResearchObject", - - "trov:generatedBySystem": { "@id": "trov:system/02" }, - - "trov:satisfies": [ - { "@id": "trov:IncludeAllOutput" }, - { "@id": "trov:IncludeAllCode" }, - { "@id": "trov:DescribeSoftwareEnvironment" } - ] - - }] -} diff --git a/demo/02-explorations/common/tro-03-from-type-b2-trs.jsonld b/demo/02-explorations/common/tro-03-from-type-b2-trs.jsonld deleted file mode 100644 index ac12701..0000000 --- a/demo/02-explorations/common/tro-03-from-type-b2-trs.jsonld +++ /dev/null @@ -1,21 +0,0 @@ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - }], - - "@graph": [{ - - "@id": "trov:tro/03", - "@type": "trov:ResearchObject", - - "trov:generatedBySystem": { "@id": "trov:system/03" }, - - "trov:satisfies": [ - { "@id": "trov:IncludeAllOutput" }, - { "@id": "trov:IncludeAllCode" }, - { "@id": "trov:DescribeSoftwareEnvironment" } - ] - - }] -} \ No newline at end of file diff --git a/demo/02-explorations/common/tro/file1 b/demo/02-explorations/common/tro/file1 new file mode 100644 index 0000000..257cc56 --- /dev/null +++ b/demo/02-explorations/common/tro/file1 @@ -0,0 +1 @@ +foo diff --git a/demo/02-explorations/common/tro/file2 b/demo/02-explorations/common/tro/file2 new file mode 100644 index 0000000..5716ca5 --- /dev/null +++ b/demo/02-explorations/common/tro/file2 @@ -0,0 +1 @@ +bar diff --git a/demo/02-explorations/11-jsonld2csv/data/tro1.jsonld b/demo/02-explorations/common/tro/tro.jsonld similarity index 100% rename from demo/02-explorations/11-jsonld2csv/data/tro1.jsonld rename to demo/02-explorations/common/tro/tro.jsonld diff --git a/demo/02-explorations/common/trs-01-minimal.jsonld b/demo/02-explorations/common/trs-01-minimal.jsonld deleted file mode 100644 index 8a08f35..0000000 --- a/demo/02-explorations/common/trs-01-minimal.jsonld +++ /dev/null @@ -1,15 +0,0 @@ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - - }], - - "@graph": [{ - - "@id": "trov:trs/01", - "@type": "trov:System", - "rdfs:label": "Minimal TRS", - "rdfs:comment": "TRS that enforces no policies." - }] -} diff --git a/demo/02-explorations/common/trs-02-type-a.jsonld b/demo/02-explorations/common/trs-02-type-a.jsonld deleted file mode 100644 index b4954b1..0000000 --- a/demo/02-explorations/common/trs-02-type-a.jsonld +++ /dev/null @@ -1,34 +0,0 @@ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - }], - - "@graph": [{ - - "@id": "trov:trs/02", - "@type": "trov:System", - "rdfs:label": "Example Type B.1 TRS", - "rdfs:comment": "TRS that implements a loose queue.", - - "trov:enforces": [ - { "@id": "trov:IncludeAllOutput" }, - { "@id": "trov:IncludeAllCode" }, - { "@id": "trov:DescribeSoftwareEnvironment" }, - { "@id": "trov:PreventInterventionDuringRuntime" }, - { "@id": "trov:EvidenceRuntime" } - ], - - "trov:prevents": [ - { "@id": "trov:PreventInternetAccess" } - ], - - "trov:allows": [ - { "@id": "trov:IncludeAllInput" }, - { "@id": "trov:AllInputAvailableBeforeRuntime" }, - { "@id": "trov:AllInputAvailableAfterRuntime" }, - { "@id": "trov:PreventInterventionBeforeRuntime" }, - { "@id": "TrackIntermediateSteps" } - ] - }] -} diff --git a/demo/02-explorations/common/trs-03-type-b2.jsonld b/demo/02-explorations/common/trs-03-type-b2.jsonld deleted file mode 100644 index 77af599..0000000 --- a/demo/02-explorations/common/trs-03-type-b2.jsonld +++ /dev/null @@ -1,35 +0,0 @@ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "trov": "https://w3id.org/trace/2022/10/trov#" - }], - - "@graph": [{ - - "@id": "trov:trs/03", - "@type": "trov:System", - "rdfs:label": "Example Type B.2 TRS", - "rdfs:comment": "TRS that implements a transient data.", - - "trov:enforces": [ - { "@id": "trov:AllInputAvailableBeforeRuntime" }, - { "@id": "trov:IncludeAllOutput" }, - { "@id": "trov:IncludeAllCode" }, - { "@id": "trov:DescribeSoftwareEnvironment" }, - { "@id": "trov:PreventInterventionDuringRuntime" }, - { "@id": "trov:EvidenceRuntime" } - ], - - "trov:prevents": [ - { "@id": "trov:IncludeAllInput" }, - { "@id": "trov:AllInputAvailableAfterRuntime" } - ], - - "trov:allows": [ - { "@id": "trov:IncludeAllInput" }, - { "@id": "trov:PreventInternetAccess" }, - { "@id": "trov:PreventInterventionBeforeRuntime" }, - { "@id": "trov:TrackIntermediateSteps" } - ] - }] -} diff --git a/demo/02-explorations/common/trs-queries.sh b/demo/02-explorations/common/trs-queries.sh deleted file mode 100644 index 1351150..0000000 --- a/demo/02-explorations/common/trs-queries.sh +++ /dev/null @@ -1,144 +0,0 @@ - -# ------------------------------------------------------------------------------ - -bash_cell 'query trs enforced policies' << END_CELL - -# What TRS policies are enforced by the TRS? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX trov: - - SELECT DISTINCT ?trs ?policyName ?policyDescription - WHERE { - ?trs rdf:type trov:System . - ?trs trov:enforces ?policy . - ?policy rdf:type trov:SystemPolicy . - ?policy rdfs:label ?policyName . - ?policy rdfs:comment ?policyDescription . - } ORDER BY ?trs ?policyName - -__END_QUERY__ - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'query tro enforced policies' << END_CELL - -# What TRO policies are enforced by the TRS? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX trov: - - SELECT DISTINCT ?trs ?policyName ?policyDescription - WHERE { - ?trs rdf:type trov:System . - ?trs trov:enforces ?policy . - ?policy rdf:type trov:ObjectPolicy . - ?policy rdfs:label ?policyName . - ?policy rdfs:comment ?policyDescription . - } ORDER BY ?trs ?policyName - -__END_QUERY__ - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'query all enforced policies' << END_CELL - -# What policies are enforced by the TRS? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX trov: - - SELECT DISTINCT ?trs ?policyName ?policyDescription - WHERE { - ?trs rdf:type trov:System . - ?trs trov:enforces ?policy . - ?policy rdfs:label ?policyName . - ?policy rdfs:comment ?policyDescription . - } ORDER BY ?trs ?policyName - -__END_QUERY__ - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'query trs prevented policies' << END_CELL - -# What TRS policies are prevented by the TRS? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX trov: - - SELECT DISTINCT ?trs ?policyName ?policyDescription - WHERE { - ?trs rdf:type trov:System . - ?trs trov:prevents ?policy . - ?policy rdf:type trov:SystemPolicy . - ?policy rdfs:label ?policyName . - ?policy rdfs:comment ?policyDescription . - } ORDER BY ?trs ?policyName - -__END_QUERY__ - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'query tro prevented policies' << END_CELL - -# What TRO policies are prevented by the TRS? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX trov: - - SELECT DISTINCT ?trs ?policyName ?policyDescription - WHERE { - ?trs rdf:type trov:System . - ?trs trov:prevents ?policy . - ?policy rdf:type trov:ObjectPolicy . - ?policy rdfs:label ?policyName . - ?policy rdfs:comment ?policyDescription . - } ORDER BY ?trs ?policyName - -__END_QUERY__ - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'query all prevented policies' << END_CELL - -# What policies are prevented by the TRS? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdf: - PREFIX trov: - - SELECT DISTINCT ?trs ?policyName ?policyDescription - WHERE { - ?trs rdf:type trov:System . - ?trs trov:prevents ?policy . - ?policy rdfs:label ?policyName . - ?policy rdfs:comment ?policyDescription . - } ORDER BY ?trs ?policyName - -__END_QUERY__ - -END_CELL - -# ------------------------------------------------------------------------------ diff --git a/pyproject.toml b/pyproject.toml index 439d6a6..0357362 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,11 +11,5 @@ dynamic = ["dependencies"] dependencies = {file = ["requirements.txt"]} [project.scripts] -format_string = "trace_model.format_string:cli" -tro_fingerprint = "trace_model.tro_fingerprint:cli" tro_fingerprint_state = "trace_model.tro_fingerprint_state:cli" merge_states = "trace_model.merge_states:cli" -jsonld2csv = "trace_model.jsonld2csv:cli" -validate_jsonld = "trace_model.validate_jsonld:cli" -validate_tro = "trace_model.validate_tro:cli" -#geist = "geist.__main__:cli" diff --git a/src/trace_model/format_string.py b/src/trace_model/format_string.py deleted file mode 100644 index 15cf5f5..0000000 --- a/src/trace_model/format_string.py +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env python3 - -import argparse - -def format_string(string, convert_flag): - # Convert multiple lines to one line - if convert_flag == "MULTI2ONE": - formatted_string = string.replace("\n", "\\n") - # Convert one line to multiple lines - else: # ONE2MULTI - formatted_string = string.replace("\\n", "\n") - return formatted_string - -def cli(): - - # Parse input - parser = argparse.ArgumentParser() - parser.add_argument("--file", "-f", help="File path ( str )") - parser.add_argument("--string", "-s", help="Raw string ( str )") - parser.add_argument("--convertflag", "-cf", choices=["MULTI2ONE", "ONE2MULTI"], help="Convert flag. It must be MULTI2ONE or ONE2MULTI.") - arg_file, arg_string, arg_convertflag = parser.parse_args().file, parser.parse_args().string, parser.parse_args().convertflag - - if not (arg_file or arg_string): - parser.error("No action requested. Please add input: --file OR --string.") - if arg_file and (not arg_string): - with open(arg_file, encoding="utf-8", mode="r") as fin: - string = fin.read() - if (not arg_file) and arg_string: - string = arg_string - if arg_file and arg_string: - parser.error("Only support one type of input per time. Please add --file OR --string.") - formatted_string = format_string(string, arg_convertflag) - print(formatted_string) - -if __name__ == '__main__': - cli() diff --git a/src/trace_model/jsonld2csv.py b/src/trace_model/jsonld2csv.py deleted file mode 100644 index 894717e..0000000 --- a/src/trace_model/jsonld2csv.py +++ /dev/null @@ -1,79 +0,0 @@ -import pandas as pd -import json, argparse - -def jsonld2csv(data, arg_o): - # Parse the JSON-LD file and convert it into CSV files - # Composition & Arrangement Table - composition = data["trov:hasComposition"] - artifacts = pd.DataFrame(data=composition["trov:hasArtifact"])[["@id", "trov:sha256", "trov:mimeType"]] \ - .rename(columns={"@id": "ArtifactId", "trov:mimeType": "MimeType", "trov:sha256": "Digest"}) \ - .set_index("ArtifactId") - - for arrangement in data["trov:hasArrangement"]: - arrangement_id = arrangement["@id"] - artifacts[arrangement_id] = "" - for artifact in arrangement["trov:hasLocus"]: - artifact_id = artifact["trov:hasArtifact"]["@id"] - artifact_loc = artifact["trov:hasLocation"] - artifacts.loc[artifact_id, arrangement_id] = artifact_loc - - artifacts.to_csv(arg_o + "#composition_and_arrangement.csv", index=True) - - # Only if TRP exits, the following two tables will be available: - # 1) TRO Attribute Justification Table - # 2) TRP & Arrangement Table - if "trov:hasPerformance" in data.keys(): - - # TRS capability: mappings from @id to @type - trscapid2type = {} - for cap in data["trov:wasAssembledBy"]["trov:hasCapability"]: - trscapid2type[cap["@id"]] = cap["@type"] - - if "trov:hasAttribute" in data.keys(): - for tro_att in data["trov:hasAttribute"]: - tro_att_id = tro_att["@id"] - tro_att_type = tro_att["@type"] - justif = pd.DataFrame(tro_att["trov:warrantedBy"]).rename(columns={"@id": "TrpAttId"}).set_index("TrpAttId") - justif["TroAtt"] = tro_att_type - - trp_rows = [] - justif[["TrpAtt", "TrsAttId", "TrsAtt"]] = "" - for trp in data["trov:hasPerformance"]: - trp_att = trp["trov:hadPerformanceAttribute"] - justif.loc[trp_att["@id"], ["TrpAtt", "TrsAttId", "TrsAtt"]] = [trp_att["@type"], trp_att["trov:warrantedBy"]["@id"], trscapid2type[trp_att["trov:warrantedBy"]["@id"]]] - - trp_rows.append((trp["@id"], - trp["rdfs:comment"] if "rdfs:comment" in trp.keys() else None, - trp["trov:wasConductedBy"]["@id"], - trp["trov:startedAtTime"], - trp["trov:endedAtTime"], - trp["trov:accessedArrangement"]["@id"], - trp["trov:contributedToArrangement"]["@id"])) - perf = pd.DataFrame(data=trp_rows, columns=["TrpId", "TrpComment", "TrsId", "StartedAtTime", "EndedAtTime", "accessedArrangementId", "contributedToArrangementId"]) - - justif.reset_index(drop=False)[["TroAtt", "TrpAttId", "TrpAtt", "TrsAttId", "TrsAtt"]].to_csv(arg_o + "#tro_attribute_justification.csv", index=False) - perf.to_csv(arg_o + "#trp_and_arrangement.csv", index=False) - return - -def cli(): - # Parse input - parser = argparse.ArgumentParser() - parser.add_argument("--file", "-f", help="Files of the tro.jsonld (list[str] | str ): please use comma (no space) to split multiple file paths (e.g. file1,file2,file3).") - parser.add_argument("--output", "-o", help="Output folder path.") - arg_file, arg_o = parser.parse_args().file, parser.parse_args().output - - if not arg_file: - parser.error("No action requested. Please add input: --file.") - if not arg_o: - parser.error("Missing output folder path. Please add output file path: --output.") - - for file_path in arg_file.split(","): - tro_filename = file_path.split("/")[-1][:-7] - print(tro_filename) - # Load JSON-LD file - with open(file_path) as fin: - data = json.load(fin)["@graph"][0] - jsonld2csv(data, arg_o + "/" + tro_filename) - -if __name__ == '__main__': - cli() diff --git a/src/trace_model/tro_fingerprint.py b/src/trace_model/tro_fingerprint.py deleted file mode 100644 index 635b053..0000000 --- a/src/trace_model/tro_fingerprint.py +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env python3 - -from hashlib import sha256 -import os, glob, argparse - -def compute_fingerprint(arg_dir, arg_file): - - # All input files - file_paths = [] - if arg_dir != None: - for dir in arg_dir.split(","): - for path in glob.glob(dir + "/**/*", recursive=True): # Include files in sub-directories as well - if not os.path.isdir(path): # Exclude directories - file_paths.append(path) - if arg_file != None: - file_paths.extend(arg_file.split(",")) - - # Compute digest per file and concat in alphabetical order - digests = [] - for file_path in file_paths: - with open(file_path, "rb") as fin: - digests.append(sha256(fin.read()).hexdigest()) - digest = "".join(sorted(digests)) - - # Fingerprint - fingerprint = sha256(digest.encode("utf-8")).hexdigest() - - return fingerprint - -def cli(): - # Parse input - parser = argparse.ArgumentParser() - parser.add_argument("--dir", "-d", help="Directories of the data (list[str] | str ): please use comma (no space) to split multiple directories (e.g. dir1,dir2,dir3).") - parser.add_argument("--file", "-f", help="Files of the data (list[str] | str ): please use comma (no space) to split multiple file paths (e.g. file1,file2,file3).") - parser.add_argument("--expectedfingerprint", "-ef", help="Expected fingerprint (str).") - arg_dir, arg_file, arg_ef = parser.parse_args().dir, parser.parse_args().file, parser.parse_args().expectedfingerprint - - if not (arg_dir or arg_file): - parser.error("No action requested. Please add input: --dir OR --file.") - fingerprint = compute_fingerprint(arg_dir, arg_file) - # If --expectedfingerprint is not specified, - # print the fingerprint of the given directories and/or files directly. - if not arg_ef: - print(fingerprint) - # If --expectedfingerprint is specified, - # we need to validate the fingerprint based on the given field and print True or False. - else: - print(fingerprint == arg_ef) - -if __name__ == '__main__': - cli() diff --git a/src/trace_model/validate_jsonld.py b/src/trace_model/validate_jsonld.py deleted file mode 100644 index 6817b68..0000000 --- a/src/trace_model/validate_jsonld.py +++ /dev/null @@ -1,30 +0,0 @@ -import json, argparse -from jsonschema import Draft7Validator, FormatChecker - -def validate_tro(tro_jsonld_file_path, tro_schema_file_path): - with open(tro_jsonld_file_path) as fin: - tro_jsonld = json.load(fin) - with open(tro_schema_file_path) as fin: - tro_schema = json.load(fin) - validator = Draft7Validator(schema=tro_schema, format_checker=FormatChecker()) - - if validator.is_valid(tro_jsonld): - print("Is a valid TRO JSON-LD file.") - else: - validator.validate(instance=tro_jsonld) - return - -def cli(): - # Parse input - parser = argparse.ArgumentParser() - parser.add_argument("--jsonldpath", "-jp", help="TRO JSON-LD file path ( str ).") - parser.add_argument("--schemapath", "-sp", help="TRO Schema file path ( str ).") - tro_jsonld_file_path, tro_schema_file_path = parser.parse_args().jsonldpath, parser.parse_args().schemapath - if not tro_jsonld_file_path: - parser.error("No JSON-LD file provided. Please add input: --jsonldpath.") - if not tro_schema_file_path: - parser.error("No schema file provided. Please add input: --schemapath.") - validate_tro(tro_jsonld_file_path, tro_schema_file_path) - -if __name__ == '__main__': - cli() diff --git a/src/trace_model/validate_tro.py b/src/trace_model/validate_tro.py deleted file mode 100644 index 08ad227..0000000 --- a/src/trace_model/validate_tro.py +++ /dev/null @@ -1,200 +0,0 @@ -#!/usr/bin/env python3 - -from pyshacl import validate -from rdflib import Graph -import pygraphviz as pgv -import pandas as pd -import argparse, os - -mappings={ - "http://www.w3.org/1999/02/22-rdf-syntax-ns#": "rdf#", - "http://www.w3.org/2000/01/rdf-schema#": "rdfs#", - "https://w3id.org/trace/2023/05/trov#": "trov#", - "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/": "" - } - -def ensure_dir_exists(file_path): - dir_path = os.path.split(file_path)[0] - if (dir_path != '') and (not os.path.isdir(dir_path)): - os.makedirs(dir_path) - return - -def load_tro_file(file_path, graph_format="json-ld"): - """ - This function is to load a file with a given format as a RDF Graph object supported by RDFLib - :param file_path: String. Path of the file - :param graph_format: Defaults to json-ld. It could be one of {xml, n3, turtle, nt, pretty-xml, trix, trig, nquads, json-ld, hext} - :return tro_graph: a RDF Graph object supported by RDFLib - """ - if graph_format not in {"xml", "n3", "turtle", "nt", "pretty-xml", "trix", "trig", "nquads", "json-ld", "hext"}: - raise ValueError("RDFLib .parse() only supports {xml, n3, turtle, nt, pretty-xml, trix, trig, nquads, json-ld, hext}, but '" + str(format) + "' was given.") - # Load the file (e.g., a JSON-LD file) as string - with open(file_path) as fin: - tro_str = fin.read() - # Parse string with RDFLib - tro_graph = Graph() - tro_graph.parse(data=tro_str, format=graph_format) - return tro_graph - -def validate_tro(tro, tro_schema, data_graph_format="json-ld", shacl_graph_format="ttl", flag=False): - """ - This function is validate the tro_jsonld_graph with tro_schema - :param tro: a RDF Graph object supported by RDFLib or a String - :param tro_schema: a RDF Graph object or a String - :param data_graph_format: format of tro, default value is json-ld - :param shacl_graph_format: format of tro_schema, default value is ttl - :return results_graph: a RDF Graph object showing all errors - """ - - r = validate(data_graph=tro, - shacl_graph=tro_schema, - data_graph_format=data_graph_format, - shacl_graph_format=shacl_graph_format, - inference="rdfs", - debug=True) - conforms, results_graph, results_text = r - - if flag: - print(results_text) - - return results_graph - -def extract_errors(results_graph): - """ - This function is to extract the most important errors - Ideally, all errors will be fixed once solve these errors - :param results_graph: a RDF Graph object showing all errors - :return errors: a Pandas data frame with node, msg, and path columns - """ - - q = """ - PREFIX : - - SELECT ?focus ?msg ?path - WHERE { - ?curr_node :focusNode ?focus . - ?curr_node :resultMessage ?msg . - ?curr_node :resultPath ?path. - OPTIONAL { ?curr_node :detail ?child_node. } - FILTER (!bound(?child_node)) - } - ORDER BY ?focus ?msg ?path - """ - rows = [] - for r in results_graph.query(q): - rows.append(r) - errors = pd.DataFrame(rows, columns=["node", "msg", "path"]).replace(mappings, regex=True).drop_duplicates() - return errors - -def process_graph(tro_graph, mappings, errors): - """ - This function is to process a RDF Graph object: - (1) make the node name shorter - (2) export as a Pandas data frame - (3) add suggested nodes to be updated to the errors data frame - :param tro_graph: a RDF Graph object - :param mappings: a dictionary used to make the node name shorter - :param errors: a Pandas data frame with node, msg, and path columns - :return tro_graph_processed: a Pandas data frame - :return errors_with_suggested_nodes: a Pandas data frame with node, msg, and target columns, where target column denotes suggested nodes to be updated - """ - # Query the imported triples in tro_graph - q = """ - SELECT ?s ?p ?o - WHERE { - ?s ?p ?o - } - ORDER BY ?s ?p ?o - """ - rows = [] - for r in tro_graph.query(q): - rows.append(r) - tro_graph_processed = pd.DataFrame(rows, columns=["source", "label", "target"]).replace(mappings, regex=True) - errors_with_suggested_nodes = errors.merge(tro_graph_processed, how="inner", left_on=["node", "path"], right_on=["source", "label"])[["node", "msg", "target"]] - return tro_graph_processed, errors_with_suggested_nodes - -def visualize_graph_as_dot(tro_graph_processed, errors_with_suggested_nodes): - # Create a directed graph - G = pgv.AGraph(directed=True) - # Add nodes and edges - for _, row in tro_graph_processed.iterrows(): - G.add_node(row["source"], shape="box", style="filled, rounded", fillcolor="#b3e2cd") - G.add_node(row["target"], shape="box", style="filled, rounded", fillcolor="#b3e2cd") - G.add_edge(row["source"], row["target"], label=row["label"]) - for _, row in errors_with_suggested_nodes[["node", "msg"]].drop_duplicates().iterrows(): - G.add_node(row["node"], shape="box", style="filled, rounded", fillcolor="#fdccac") - G.add_node(row["msg"], shape="box", style="filled, rounded, dashed", fillcolor="#fdccac") - G.add_edge(row["node"], row["msg"], label="ErrorMsg", style="dashed") - # Suggested nodes to be updated - for suggested_node in errors_with_suggested_nodes["target"].dropna().unique(): - G.add_node(suggested_node, shape="box", style="filled, rounded", fillcolor="#cbd5e8") - return G - -def report_graph_as_txt(errors_with_suggested_nodes): - report_text = "" - for _, row in errors_with_suggested_nodes.groupby(["node", "msg"])["target"].agg(list).reset_index().iterrows(): - report_text = report_text + "Node: {node} \nError Message: {msg}\nSuggested Node(s) to be Updated: {suggested_node}\n\n".format(node=row["node"], msg=row["msg"], suggested_node=", ".join(row["target"])) - return report_text - -def cli(): - # Parse input - parser = argparse.ArgumentParser() - parser.add_argument("--showerrors", "-se", default=False, help="Show all errors.") - parser.add_argument("--file", "-f", help="File(s) of the TRO Declarations to be validated (list[str] | str ): please use comma (no space) to split multiple file paths (e.g. file1,file2,file3).") - parser.add_argument("--schema", "-s", help="Schema of the TRO Declaration (str): path of the file.") - parser.add_argument("--fileformat", "-ff", help="File format(s) of the TRO Declarations to be validated (list[str] | str ). Orders should be consistent with the input of --file. Default format is json-ld. If all input files have the same format, only need to write once.") - parser.add_argument("--schemaformat", "-sf", default="ttl", choices=["xml", "n3", "turtle", "nt", "pretty-xml", "trix", "trig", "nquads", "json-ld", "hext"], help="File format of the schema (str). Default format is ttl.") - parser.add_argument("--output", "-o", help="File(s) of the validation report without extension (list[str] | str ). If no value, then output will be a string. Please use comma (no space) to split multiple file paths (e.g. file1,file2,file3).") - parser.add_argument("--outputformat", "-of", help="File format(s) of the output, validation report (list[str] | str ). Orders should be consistent with the input of --output. Default format is txt. Each item can only be one of {txt,png,gv}. Please use comma (no space) to split multiple formats (e.g. format1,format2,format3). If all output files have the same format, only need to write once.") - arg_showerrors, arg_file, arg_schema, arg_fileformat, arg_schemaformat, arg_outputformat, arg_output = parser.parse_args().showerrors, parser.parse_args().file, parser.parse_args().schema, parser.parse_args().fileformat, parser.parse_args().schemaformat, parser.parse_args().outputformat, parser.parse_args().output - - if not arg_file: - parser.error("File(s) of the TRO Declaration to be validated are missing. Please add: --file.") - if not arg_schema: - parser.error("Schema file is missing. Please add: --schema.") - file_paths = arg_file.split(",") - num_files = len(file_paths) - output_paths = [None] * num_files if not arg_output else arg_output.split(",") - file_formats = ["json-ld"] * num_files if not arg_fileformat else arg_fileformat.split(",") - output_formats = ["txt"] * num_files if not arg_outputformat else arg_outputformat.split(",") - if len(file_formats) == 1: - file_formats = file_formats * num_files - if len(output_formats) == 1: - output_formats = output_formats * num_files - - if num_files != len(file_formats) or num_files != len(output_formats) or num_files != len(output_paths): - raise ValueError("Please make sure the number of input files (and input formats) equals to the number of output files (and output formats): check the value of --file, --fileformat, --output, --outputformat.") - - for file_path, file_format, output_path, output_format in zip(file_paths, file_formats, output_paths, output_formats): - # Load TRO Declaration - tro_graph = load_tro_file(file_path, graph_format=file_format) - # Validate the TRO Declaration - results_graph = validate_tro(tro_graph, arg_schema, data_graph_format=file_format, shacl_graph_format=arg_schemaformat, flag=arg_showerrors) - # Find the most important errors - errors = extract_errors(results_graph) - # Find the suggested error nodes - (tro_graph_processed, errors_with_suggested_nodes) = process_graph(tro_graph, mappings, errors) - # Output - if output_format not in ["txt", "png", "gv"]: - raise ValueError("The output file format can only be one of {txt, png, gv}, but " + str(output_format) + " was given. Please check --outputformat.") - - output_path = output_path + "." + output_format if output_path else None - if output_path: - ensure_dir_exists(output_path) - if output_format == "png" or output_format == "gv": - G = visualize_graph_as_dot(tro_graph_processed, errors_with_suggested_nodes) - if output_format == "png": - G.draw(output_path, prog="dot") - else: # gv - G.write(output_path) - else: - report_text = report_graph_as_txt(errors_with_suggested_nodes) - if not output_path: - # If NO --output, print a string - print(report_text) - else: - with open(output_path, mode="w", encoding="utf-8") as fout: - fout.write(report_text) - -if __name__ == '__main__': - cli() \ No newline at end of file From 10ffa676505e54c8ca0d1407116dc9bd686ecb0b Mon Sep 17 00:00:00 2001 From: Meng Li <34143965+Meng6@users.noreply.github.com> Date: Fri, 6 Oct 2023 15:45:27 +0000 Subject: [PATCH 04/22] Make 04-timestamp demo reproducible --- .../04-timestamp/{data => products}/digest.yaml | 0 .../04-timestamp/{data => products}/file.tsq | Bin demo/02-explorations/04-timestamp/run.sh | 6 +++--- demo/02-explorations/04-timestamp/run.txt | 8 ++++---- 4 files changed, 7 insertions(+), 7 deletions(-) rename demo/02-explorations/04-timestamp/{data => products}/digest.yaml (100%) rename demo/02-explorations/04-timestamp/{data => products}/file.tsq (100%) diff --git a/demo/02-explorations/04-timestamp/data/digest.yaml b/demo/02-explorations/04-timestamp/products/digest.yaml similarity index 100% rename from demo/02-explorations/04-timestamp/data/digest.yaml rename to demo/02-explorations/04-timestamp/products/digest.yaml diff --git a/demo/02-explorations/04-timestamp/data/file.tsq b/demo/02-explorations/04-timestamp/products/file.tsq similarity index 100% rename from demo/02-explorations/04-timestamp/data/file.tsq rename to demo/02-explorations/04-timestamp/products/file.tsq diff --git a/demo/02-explorations/04-timestamp/run.sh b/demo/02-explorations/04-timestamp/run.sh index 77ab723..93abdc7 100644 --- a/demo/02-explorations/04-timestamp/run.sh +++ b/demo/02-explorations/04-timestamp/run.sh @@ -3,9 +3,9 @@ CERTIFICATE_DIR=../common/certificate TRO_DECLARATION_FILE=../common/tro/tro.jsonld TRS_SIGNATURE_FILE=data/signature.asc -DIGEST_FILE=data/digest.yaml -TSQ_FILE=data/file.tsq -TSR_FILE=data/file.tsr +DIGEST_FILE=products/digest.yaml +TSQ_FILE=products/file.tsq +TSR_FILE=tmp/file.tsr diff --git a/demo/02-explorations/04-timestamp/run.txt b/demo/02-explorations/04-timestamp/run.txt index 1731e59..e41e2b0 100644 --- a/demo/02-explorations/04-timestamp/run.txt +++ b/demo/02-explorations/04-timestamp/run.txt @@ -1,6 +1,6 @@ ================================ bash cell | Compute a digest for tro declaration and trs signature ================================ -cat > data/digest.yaml << EOF +cat > products/digest.yaml << EOF tro-declaration: 71fd13607e8cea0a883ebad45037044d4909fb21959ec30c6687dcf86d077cf8 trs-signature": 9fb5dd0a2b9afdf4071b43558848a70101c91d3b1eab61f6a369740c36c2ea8d EOF @@ -11,7 +11,7 @@ EOF ================================================== bash cell | Create a tsq file =================================================== -openssl ts -query -data data/digest.yaml -no_nonce -sha512 -cert -out data/file.tsq +openssl ts -query -data products/digest.yaml -no_nonce -sha512 -cert -out products/file.tsq ----------------------------------------------------------- cell outputs ----------------------------------------------------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -19,7 +19,7 @@ openssl ts -query -data data/digest.yaml -no_nonce -sha512 -cert -out data/file. ================================================== bash cell | Create a tsr file =================================================== -curl -H "Content-Type: application/timestamp-query" --data-binary '@data/file.tsq' https://freetsa.org/tsr > data/file.tsr +curl -H "Content-Type: application/timestamp-query" --data-binary '@products/file.tsq' https://freetsa.org/tsr > tmp/file.tsr ----------------------------------------------------------- cell outputs ----------------------------------------------------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -27,7 +27,7 @@ curl -H "Content-Type: application/timestamp-query" --data-binary '@data/file.ts ==================================================== bash cell | Verify the tsr ==================================================== -openssl ts -verify -in data/file.tsr -queryfile data/file.tsq -CAfile ../common/certificate/cacert.pem -untrusted ../common/certificate/tsa.crt +openssl ts -verify -in tmp/file.tsr -queryfile products/file.tsq -CAfile ../common/certificate/cacert.pem -untrusted ../common/certificate/tsa.crt ----------------------------------------------------------- cell outputs ----------------------------------------------------------- Verification: OK From 3b8e10fc69db52811b640c795b91c8f23df2e354 Mon Sep 17 00:00:00 2001 From: Meng Li <34143965+Meng6@users.noreply.github.com> Date: Fri, 6 Oct 2023 14:55:39 -0500 Subject: [PATCH 05/22] Update the README.md file --- README.md | 504 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 371 insertions(+), 133 deletions(-) diff --git a/README.md b/README.md index 57466bb..8748dde 100644 --- a/README.md +++ b/README.md @@ -6,61 +6,13 @@ This repository is itself structured as a _Reproducible Every-Place Research Obj Make commands issued in the top-level directory are used to obtain the Docker image and run the demos. -## Obtain the Docker image for this REPRO - -Use the `make pull-image` command to pull the Docker image from Docker hub: -``` -trace-model$ make pull-image -docker pull cirss/trace-model:latest -latest: Pulling from cirss/trace-model -d19f32bd9e41: Pull complete -f9e098bd9304: Pull complete -bd67e18a393a: Pull complete -a999842c6b8b: Pull complete -5879f0773d6f: Pull complete -d735389eb5d9: Pull complete -de60b39ca69a: Pull complete -ac79dbfddb45: Pull complete -633a376f999c: Pull complete -4c1f583c231d: Pull complete -40499f468cf6: Pull complete -438476b07eca: Pull complete -66c6f2f0117d: Pull complete -Digest: sha256:013dc3261b141fc79d7bbc5e9cede4376951917f29fa282feebe68b23eaa6666 -Status: Downloaded newer image for cirss/trace-model:latest -docker.io/cirss/trace-model:latest -``` - -Alternatively, build the image locally using the `make build-image` command: -``` -/trace-model$ make build-image -docker build -t cirss/trace-model:latest . -Sending build context to Docker daemon 292.1MB -Step 1/12 : FROM cirss/repro-parent:latest -latest: Pulling from cirss/repro-parent -Digest: sha256:9b589a67c0e43ebaa6a99b7a64fc9ceaf3935ae99550366d323701425dbc2418 -Status: Downloaded newer image for cirss/repro-parent:latest - ---> 7fe3395196d6 -Step 2/12 : COPY exports /repro/exports - ---> 5493da08ada1 -Step 3/12 : ADD ${REPRO_DIST}/boot-setup /repro/dist/ -Downloading 1.315kB - ---> a84c9e2d5371 -Step 4/12 : RUN bash /repro/dist/boot-setup - ---> Running in 6b41b98cbc46 -Get:1 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB] -Hit:2 http://archive.ubuntu.com/ubuntu jammy InRelease -Get:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [114 kB] -. -. -. -Step 12/12 : CMD /bin/bash -il - ---> Running in 0253e7b96eae -Removing intermediate container 0253e7b96eae - ---> d183e074b43e -Successfully built d183e074b43e -Successfully tagged cirss/trace-model:latest -``` +## Setup the environment + +First start the REPRO in interactive mode using the `make start-repro` command (or the shorthand `make start`). + +Then Install the related Python packages using the `pip install .` command. + +Finally, exit the REPRO using the `exit` command. ## Run and confirm the reproducibility of the demonstration @@ -68,50 +20,270 @@ The demonstration and its products are stored in the `demo` directory tree: ``` trace-model$ tree demo demo -├── 01-minimal -│   ├── Makefile -│   ├── run.sh -│   └── run.txt -├── 02-type-a -│   ├── Makefile -│   ├── run.sh -│   └── run.txt -├── common -│   ├── trace-vocab.jsonld -│   ├── tro -│   │   ├── tro-01-from-minimal-trs.jsonld -│   │   └── tro-02-from-type-a-trs.jsonld -│   ├── trs -│   │   ├── trs-01-minimal.jsonld -│   │   └── trs-02-type-a.jsonld -│   └── trs-queries.sh +├── 01-trov-examples +│ ├── 01-two-artifacts-no-trp +│ │ ├── Makefile +│ │ ├── products +│ │ │ ├── img.gv +│ │ │ ├── img.svg +│ │ │ └── report_subclass.html +│ │ ├── run.sh +│ │ ├── run.txt +│ │ ├── tro +│ │ │ ├── file1 +│ │ │ ├── file2 +│ │ │ └── tro.jsonld +│ │ └── trs +│ │ ├── private.asc +│ │ ├── public.gpg +│ │ └── trs.jsonld +│ ├── 02-three-artifacts-one-trp +│ │ ├── Makefile +│ │ ├── products +│ │ │ ├── img.gv +│ │ │ ├── img.svg +│ │ │ └── report_subclass.html +│ │ ├── run.sh +│ │ ├── run.txt +│ │ ├── tro +│ │ │ ├── file1 +│ │ │ ├── file2 +│ │ │ ├── file3 +│ │ │ └── tro.jsonld +│ │ └── trs +│ │ ├── private.asc +│ │ ├── public.gpg +│ │ └── trs.jsonld +│ ├── 03-skope-lbda-processing +│ │ ├── Makefile +│ │ ├── mappings.json +│ │ ├── products +│ │ │ ├── img.gv +│ │ │ ├── img.svg +│ │ │ └── report_subclass.html +│ │ ├── report_file +│ │ │ ├── arrangement.svg +│ │ │ ├── overall_tro_graph.html +│ │ │ ├── report.html +│ │ │ ├── tro.svg +│ │ │ └── trp.svg +│ │ ├── report_inline +│ │ │ ├── arrangement.svg +│ │ │ ├── overall_tro_graph.html +│ │ │ ├── report.html +│ │ │ ├── tro.svg +│ │ │ └── trp.svg +│ │ ├── run.sh +│ │ ├── run.txt +│ │ ├── templates.geist +│ │ ├── tro +│ │ │ └── tro.jsonld +│ │ └── tro_report +│ ├── Makefile +│ └── common +│ ├── query-tro.sh +│ └── templates.geist +├── 02-explorations +│ ├── 01-gpg-runtime +│ │ ├── 01-generate-key +│ │ │ ├── Makefile +│ │ │ ├── run.sh +│ │ │ └── run.txt +│ │ ├── 02-simple-tro +│ │ │ ├── Makefile +│ │ │ ├── data +│ │ │ │ ├── private.asc +│ │ │ │ └── public.gpg +│ │ │ ├── run.sh +│ │ │ └── run.txt +│ │ └── Makefile +│ ├── 02-gpg-api +│ │ ├── 01-generate-key +│ │ │ ├── Makefile +│ │ │ ├── run.sh +│ │ │ └── run.txt +│ │ ├── 02-simple-tro +│ │ │ ├── Makefile +│ │ │ ├── data +│ │ │ │ ├── private.asc +│ │ │ │ └── public.gpg +│ │ │ ├── run.sh +│ │ │ └── run.txt +│ │ └── Makefile +│ ├── 03-tro-fingerprint-state +│ │ ├── Makefile +│ │ ├── data +│ │ │ ├── file1.csv +│ │ │ └── file2.csv +│ │ ├── products +│ │ │ ├── after.csv +│ │ │ ├── before.csv +│ │ │ └── fingerprint_state.csv +│ │ ├── run.sh +│ │ ├── run.txt +│ │ ├── runtime +│ │ │ ├── file1.csv +│ │ │ └── file3.csv +│ │ └── test.py +│ ├── 04-timestamp +│ │ ├── Makefile +│ │ ├── data +│ │ │ └── signature.asc +│ │ ├── products +│ │ │ ├── digest.yaml +│ │ │ └── file.tsq +│ │ ├── run.sh +│ │ └── run.txt +│ ├── 05-validate-tro-declaration +│ │ ├── Makefile +│ │ ├── data +│ │ │ ├── mappings.json +│ │ │ ├── tro.schema.ttl +│ │ │ ├── tro1.jsonld +│ │ │ ├── tro2.jsonld +│ │ │ ├── tro3.jsonld +│ │ │ ├── tro4.jsonld +│ │ │ └── tro5.jsonld +│ │ ├── products +│ │ │ ├── tro1.gv +│ │ │ ├── tro1.png +│ │ │ ├── tro2.gv +│ │ │ ├── tro2.png +│ │ │ ├── tro3.gv +│ │ │ ├── tro3.png +│ │ │ ├── tro4.gv +│ │ │ ├── tro4.png +│ │ │ ├── tro5.gv +│ │ │ └── tro5.png +│ │ ├── run.sh +│ │ └── run.txt +│ ├── Makefile +│ └── common +│ ├── certificate +│ │ ├── cacert.pem +│ │ └── tsa.crt +│ └── tro +│ ├── file1 +│ ├── file2 +│ └── tro.jsonld └── Makefile ``` To establish that the demonstrations can be reproduced, first use the `make clean-demo` command to delete the files produced by the demo: ``` trace-model$ make clean-demo -20221008.054458.104 A MESG Connect to Blazegraph at http://localhost:9999. +------- Cleaning example 01-trov-examples/ ---------------- + +------- Cleaning example 01-two-artifacts-no-trp/ ---------------- +removed './run.txt' +removed './products/img.gv' +removed './products/img.svg' +removed './products/report_subclass.html' +rmdir: removing directory, './products' -------- Cleaning example 01-minimal/ ---------------- +------- Cleaning example 02-three-artifacts-one-trp/ ---------------- removed './run.txt' +removed './products/img.gv' +removed './products/img.svg' +removed './products/report_subclass.html' +rmdir: removing directory, './products' -------- Cleaning example 02-type-a/ ---------------- +------- Cleaning example 03-skope-lbda-processing/ ---------------- removed './run.txt' +removed './products/img.gv' +removed './products/img.svg' +removed './products/report_subclass.html' +rmdir: removing directory, './products' + +------- Cleaning example 02-explorations/ ---------------- + +------- Cleaning example 01-gpg-runtime/ ---------------- + +------- Cleaning example 01-generate-key/ ---------------- +removed './run.txt' + +------- Cleaning example 02-simple-tro/ ---------------- +removed './run.txt' + +------- Cleaning example 02-gpg-api/ ---------------- + +------- Cleaning example 01-generate-key/ ---------------- +removed './run.txt' + +------- Cleaning example 02-simple-tro/ ---------------- +removed './run.txt' + +------- Cleaning example 03-tro-fingerprint-state/ ---------------- +removed './run.txt' +removed './products/after.csv' +removed './products/before.csv' +removed './products/fingerprint_state.csv' +rmdir: removing directory, './products' + +------- Cleaning example 04-timestamp/ ---------------- +removed './run.txt' +removed './products/digest.yaml' +removed './products/file.tsq' +rmdir: removing directory, './products' + +------- Cleaning example 05-validate-tro-declaration/ ---------------- +removed './run.txt' +removed './products/tro1.gv' +removed './products/tro1.png' +removed './products/tro2.gv' +removed './products/tro2.png' +removed './products/tro3.gv' +removed './products/tro3.png' +removed './products/tro4.gv' +removed './products/tro4.png' +removed './products/tro5.gv' +removed './products/tro5.png' +rmdir: removing directory, './products' ``` Confirm with `git status` that version-controlled files have been deleted locally: ``` trace-model$ git status -On branch master -Your branch is up to date with 'origin/master'. +On branch idcc24 +Your branch is up to date with 'origin/idcc24'. Changes not staged for commit: (use "git add/rm ..." to update what will be committed) - (use "git checkout -- ..." to discard changes in working directory) - - deleted: demo/01-minimal/run.txt - deleted: demo/02-type-a/run.txt + (use "git restore ..." to discard changes in working directory) + deleted: demo/01-trov-examples/01-two-artifacts-no-trp/products/img.gv + deleted: demo/01-trov-examples/01-two-artifacts-no-trp/products/img.svg + deleted: demo/01-trov-examples/01-two-artifacts-no-trp/products/report_subclass.html + deleted: demo/01-trov-examples/01-two-artifacts-no-trp/run.txt + deleted: demo/01-trov-examples/02-three-artifacts-one-trp/products/img.gv + deleted: demo/01-trov-examples/02-three-artifacts-one-trp/products/img.svg + deleted: demo/01-trov-examples/02-three-artifacts-one-trp/products/report_subclass.html + deleted: demo/01-trov-examples/02-three-artifacts-one-trp/run.txt + deleted: demo/01-trov-examples/03-skope-lbda-processing/products/img.gv + deleted: demo/01-trov-examples/03-skope-lbda-processing/products/img.svg + deleted: demo/01-trov-examples/03-skope-lbda-processing/products/report_subclass.html + deleted: demo/01-trov-examples/03-skope-lbda-processing/run.txt + deleted: demo/02-explorations/01-gpg-runtime/01-generate-key/run.txt + deleted: demo/02-explorations/01-gpg-runtime/02-simple-tro/run.txt + deleted: demo/02-explorations/02-gpg-api/01-generate-key/run.txt + deleted: demo/02-explorations/02-gpg-api/02-simple-tro/run.txt + deleted: demo/02-explorations/03-tro-fingerprint-state/products/after.csv + deleted: demo/02-explorations/03-tro-fingerprint-state/products/before.csv + deleted: demo/02-explorations/03-tro-fingerprint-state/products/fingerprint_state.csv + deleted: demo/02-explorations/03-tro-fingerprint-state/run.txt + deleted: demo/02-explorations/04-timestamp/products/digest.yaml + deleted: demo/02-explorations/04-timestamp/products/file.tsq + deleted: demo/02-explorations/04-timestamp/run.txt + deleted: demo/02-explorations/05-validate-tro-declaration/products/tro1.gv + deleted: demo/02-explorations/05-validate-tro-declaration/products/tro1.png + deleted: demo/02-explorations/05-validate-tro-declaration/products/tro2.gv + deleted: demo/02-explorations/05-validate-tro-declaration/products/tro2.png + deleted: demo/02-explorations/05-validate-tro-declaration/products/tro3.gv + deleted: demo/02-explorations/05-validate-tro-declaration/products/tro3.png + deleted: demo/02-explorations/05-validate-tro-declaration/products/tro4.gv + deleted: demo/02-explorations/05-validate-tro-declaration/products/tro4.png + deleted: demo/02-explorations/05-validate-tro-declaration/products/tro5.gv + deleted: demo/02-explorations/05-validate-tro-declaration/products/tro5.png + deleted: demo/02-explorations/05-validate-tro-declaration/run.txt no changes added to commit (use "git add" and/or "git commit -a") ``` @@ -119,21 +291,58 @@ no changes added to commit (use "git add" and/or "git commit -a") Now run the demonstration with the `make run-demo` command: ``` trace-model$ make run-demo -20221008.051511.921 A MESG Connect to Blazegraph at http://localhost:9999. +---------- Running example 01-trov-examples/ ------------- + +---------- Running example 01-two-artifacts-no-trp/ ------------- + +---------- Running example 02-three-artifacts-one-trp/ ------------- ----------- Running example 01-minimal/ ------------- +---------- Running example 03-skope-lbda-processing/ ------------- ----------- Running example 02-type-a/ ------------- +---------- Running example 02-explorations/ ------------- + +---------- Running example 01-gpg-runtime/ ------------- + +---------- Running example 01-generate-key/ ------------- +gpg: key 461685ED23B78A04 marked as ultimately trusted +gpg: directory '/mnt/trace-model/.gnupg-runtime/.gnupg/openpgp-revocs.d' created +gpg: revocation certificate stored as '/mnt/trace-model/.gnupg-runtime/.gnupg/openpgp-revocs.d/3BB586DE799A3BC83447D4B0461685ED23B78A04.rev' +gpg: checking the trustdb +gpg: marginals needed: 3 completes needed: 1 trust model: pgp +gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u + +---------- Running example 02-simple-tro/ ------------- + +---------- Running example 02-gpg-api/ ------------- + +---------- Running example 01-generate-key/ ------------- +gpg: checking the trustdb +gpg: marginals needed: 3 completes needed: 1 trust model: pgp +gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u + +---------- Running example 02-simple-tro/ ------------- + +---------- Running example 03-tro-fingerprint-state/ ------------- + +---------- Running example 04-timestamp/ ------------- +Using configuration from /usr/lib/ssl/openssl.cnf + % Total % Received % Xferd Average Speed Time Time Time Current + Dload Upload Total Spent Left Speed +100 5585 0 5494 100 91 12697 210 --:--:-- --:--:-- --:--:-- 12928 +Using configuration from /usr/lib/ssl/openssl.cnf +Warning: certificate from '../common/certificate/tsa.crt' with subject '/O=Free TSA/OU=TSA/description=This certificate digitally signs documents and time stamp requests made using the freetsa.org online services/CN=www.freetsa.org/emailAddress=busilezas@gmail.com/L=Wuerzburg/C=DE/ST=Bayern' is not a CA cert + +---------- Running example 05-validate-tro-declaration/ ------------- ``` Finally, use `git status` to confirm that the demostration products have been restored: ``` trace-model$ git status -On branch master -Your branch is up to date with 'origin/master'. +On branch idcc24 +Your branch is up to date with 'origin/idcc24'. -no changes added to commit (use "git add" and/or "git commit -a") +nothing to commit, working tree clean ``` ## Running a single example @@ -143,106 +352,135 @@ An individual example within the demonstration can be run by starting an interac First start the REPRO in interactive mode using the `make start-repro` command (or the shorthand `make start`). ``` trace-model$ make start-repro -20221010.074008.007 A MESG Connect to Blazegraph at http://localhost:9999. repro@a6c7a4e443a8:/mnt/trace-model$ ``` Set the working directory to a particular example directory: ``` -repro@a6c7a4e443a8:/mnt/trace-model$ cd demo/02-type-a/ -repro@a6c7a4e443a8:/mnt/trace-model/demo/02-type-a$ +repro@a6c7a4e443a8:/mnt/trace-model$ cd demo/01-trov-examples/01-two-artifacts-no-trp/ +repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-examples/01-two-artifacts-no-trp$ -repro@a6c7a4e443a8:/mnt/trace-model/demo/02-type-a$ pwd -/mnt/trace-model/demo/02-type-a +repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-examples/01-two-artifacts-no-trp$ pwd +/mnt/trace-model/demo/01-trov-examples/01-two-artifacts-no-trp ``` Type `make` to run the example: ``` -repro@a6c7a4e443a8:/mnt/trace-model/demo/02-type-a$ make +repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-examples/01-two-artifacts-no-trp$ make bash run.sh > run.txt ``` Use the `tree` command to list the files associated with the example, including the temporary files in the `tmp` subdirectory: ``` -repro@a6c7a4e443a8:/mnt/trace-model/demo/02-type-a$ tree +repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-examples/01-two-artifacts-no-trp$ tree . |-- Makefile |-- products +| |-- img.gv +| |-- img.svg +| `-- report_subclass.html |-- run.sh |-- run.txt -`-- tmp - |-- export_tro_ntriples.sh - |-- export_tro_ntriples.txt - |-- import_tro_jsonld.sh - |-- import_tro_jsonld.txt - |-- query_policies.sh - |-- query_policies.txt - |-- query_tro_policies.sh - |-- query_tro_policies.txt - |-- query_trs_policies.sh - `-- query_trs_policies.txt - -2 directories, 13 files -repro@a6c7a4e443a8:/mnt +|-- tmp +| |-- import tro declaration.sh +| |-- import tro declaration.txt +| |-- import trov vocabulary.sh +| |-- import trov vocabulary.txt +| |-- query subclass vocab.sh +| |-- query subclass vocab.txt +| |-- query tro attributes.sh +| |-- query tro attributes.txt +| |-- query trs attributes.sh +| |-- query trs attributes.txt +| |-- reload trov vocabulary without inferences.sh +| `-- reload trov vocabulary without inferences.txt +|-- tro +| |-- file1 +| |-- file2 +| `-- tro.jsonld +`-- trs + |-- private.asc + |-- public.gpg + `-- trs.jsonld + +4 directories, 24 files ``` The `make clean` command deletes the temporary files and the example output file, `run.txt`: ``` -repro@a6c7a4e443a8:/mnt/trace-model/demo/02-type-a$ make clean +repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-examples/01-two-artifacts-no-trp$ make clean if [[ -f ./"run.txt" ]] ; then \ rm -v ./"run.txt" ; \ fi removed './run.txt' -if [[ -d ./"tmp" ]] ; then \ - rm -vf ./"tmp"/* ; \ - rmdir -v ./"tmp" ; \ +if [[ -d ./"tmp" ]] ; then \ + rm -vf ./"tmp"/* ; \ + rmdir -v ./"tmp" ; \ fi -removed './tmp/export_tro_ntriples.sh' -removed './tmp/export_tro_ntriples.txt' -removed './tmp/import_tro_jsonld.sh' -removed './tmp/import_tro_jsonld.txt' -removed './tmp/query_policies.sh' -removed './tmp/query_policies.txt' -removed './tmp/query_tro_policies.sh' -removed './tmp/query_tro_policies.txt' -removed './tmp/query_trs_policies.sh' -removed './tmp/query_trs_policies.txt' +removed './tmp/import tro declaration.sh' +removed './tmp/import tro declaration.txt' +removed './tmp/import trov vocabulary.sh' +removed './tmp/import trov vocabulary.txt' +removed './tmp/query subclass vocab.sh' +removed './tmp/query subclass vocab.txt' +removed './tmp/query tro attributes.sh' +removed './tmp/query tro attributes.txt' +removed './tmp/query trs attributes.sh' +removed './tmp/query trs attributes.txt' +removed './tmp/reload trov vocabulary without inferences.sh' +removed './tmp/reload trov vocabulary without inferences.txt' rmdir: removing directory, './tmp' if [[ -d ./"products" ]] ; then \ rm -vf ./"products"/* ; \ rmdir -v ./"products" ; \ fi +removed './products/img.gv' +removed './products/img.svg' +removed './products/report_subclass.html' rmdir: removing directory, './products' -repro@a6c7a4e443a8:/mnt/trace-model/demo/02-type-a$ tree +repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-examples/01-two-artifacts-no-trp$ tree . |-- Makefile -`-- run.sh +|-- run.sh +|-- tro +| |-- file1 +| |-- file2 +| `-- tro.jsonld +`-- trs + |-- private.asc + |-- public.gpg + `-- trs.jsonld + +2 directories, 8 files ``` -Confirm that `run.txt` is the only version-controlled file associated with this example that has been deleted: +Confirm that the `run.txt` file and the `products` folder are the version-controlled files associated with this example that has been deleted: ``` -repro@a6c7a4e443a8:/mnt/trace-model/demo/02-type-a$ git status . -On branch master -Your branch is up to date with 'origin/master'. +repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-examples/01-two-artifacts-no-trp$ git status . +On branch idcc24 +Your branch is up to date with 'origin/idcc24'. Changes not staged for commit: (use "git add/rm ..." to update what will be committed) (use "git restore ..." to discard changes in working directory) - deleted: run.txt + deleted: products/img.gv + deleted: products/img.svg + deleted: products/report_subclass.html + deleted: run.txt no changes added to commit (use "git add" and/or "git commit -a") ``` Re-run the and confirm the `run.txt` file was restored: ``` -repro@a6c7a4e443a8:/mnt/trace-model/demo/02-type-a$ make +repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-examples/01-two-artifacts-no-trp$ make bash run.sh > run.txt -repro@a6c7a4e443a8:/mnt/trace-model/demo/02-type-a$ git status . -On branch master -Your branch is up to date with 'origin/master'. +repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-examples/01-two-artifacts-no-trp$ git status . +On branch idcc24 +Your branch is up to date with 'origin/idcc24'. nothing to commit, working tree clean From 9559e6dc43f48888b80824bdb85d7f51ea064a14 Mon Sep 17 00:00:00 2001 From: Meng Li <34143965+Meng6@users.noreply.github.com> Date: Mon, 9 Oct 2023 15:23:09 -0500 Subject: [PATCH 06/22] Update demos: structure --- .../01-two-artifacts-no-trp/products/img.gv | 22 - .../01-two-artifacts-no-trp/products/img.svg | 188 ---- .../products/report_subclass.html | 62 -- .../products/img.gv | 22 - .../products/img.svg | 188 ---- .../03-skope-lbda-processing/products/img.gv | 22 - .../03-skope-lbda-processing/products/img.svg | 188 ---- .../products/report_subclass.html | 62 -- .../03-skope-lbda-processing/run.txt | 811 ------------------ .../Makefile | 0 demo/01-trov-vocab/products/img.gv | 22 + demo/01-trov-vocab/products/img.svg | 188 ++++ .../products/report_subclass.html | 26 +- .../query-tro.sh => 01-trov-vocab/run.sh} | 86 +- demo/01-trov-vocab/run.txt | 145 ++++ .../common => 01-trov-vocab}/templates.geist | 0 .../04-timestamp/products/digest.yaml | 2 - .../04-timestamp/products/file.tsq | Bin 91 -> 0 bytes .../01-two-artifacts-no-trp}/Makefile | 0 .../01-two-artifacts-no-trp/run.sh | 0 .../01-two-artifacts-no-trp}/run.txt | 230 +---- .../01-two-artifacts-no-trp/tro/file1 | 0 .../01-two-artifacts-no-trp/tro/file2 | 0 .../01-two-artifacts-no-trp/tro/tro.jsonld | 2 +- .../01-two-artifacts-no-trp/trs/private.asc | 0 .../01-two-artifacts-no-trp/trs/public.gpg | 0 .../01-two-artifacts-no-trp/trs/trs.jsonld | 2 +- .../02-three-artifacts-one-trp}/Makefile | 0 .../02-three-artifacts-one-trp/run.sh | 0 .../02-three-artifacts-one-trp/run.txt | 248 ++++++ .../02-three-artifacts-one-trp/tro/file1 | 0 .../02-three-artifacts-one-trp/tro/file2 | 0 .../02-three-artifacts-one-trp/tro/file3 | 0 .../02-three-artifacts-one-trp/tro/tro.jsonld | 2 +- .../trs/private.asc | 0 .../02-three-artifacts-one-trp/trs/public.gpg | 0 .../02-three-artifacts-one-trp/trs/trs.jsonld | 2 +- .../03-skope-lbda-processing}/Makefile | 0 .../03-skope-lbda-processing/mappings.json | 2 +- .../report_file/arrangement.svg | 0 .../report_file/overall_tro_graph.html | 0 .../report_file/report.html | 0 .../report_file/tro.svg | 0 .../report_file/trp.svg | 0 .../report_inline/arrangement.svg | 0 .../report_inline/overall_tro_graph.html | 0 .../report_inline/report.html | 0 .../report_inline/tro.svg | 0 .../report_inline/trp.svg | 0 .../03-skope-lbda-processing/run.sh | 0 .../03-skope-lbda-processing}/run.txt | 336 +++++--- .../03-skope-lbda-processing/templates.geist | 0 .../03-skope-lbda-processing/tro/tro.jsonld | 2 +- .../03-skope-lbda-processing/tro_report | 0 .../Makefile | 0 demo/02-tro-examples/common/query-tro.sh | 81 ++ .../01-gpg-runtime/01-generate-key}/Makefile | 0 .../01-gpg-runtime/01-generate-key/run.sh | 0 .../01-gpg-runtime/01-generate-key/run.txt | 0 .../01-gpg-runtime/02-simple-tro}/Makefile | 0 .../02-simple-tro/data/private.asc | 0 .../02-simple-tro/data/public.gpg | 0 .../01-gpg-runtime/02-simple-tro/run.sh | 0 .../01-gpg-runtime/02-simple-tro/run.txt | 0 .../01-gpg-runtime}/Makefile | 0 .../02-gpg-api/01-generate-key}/Makefile | 0 .../02-gpg-api/01-generate-key/run.sh | 0 .../02-gpg-api/01-generate-key/run.txt | 0 .../02-gpg-api/02-simple-tro}/Makefile | 0 .../02-gpg-api/02-simple-tro/data/private.asc | 0 .../02-gpg-api/02-simple-tro/data/public.gpg | 0 .../02-gpg-api/02-simple-tro/run.sh | 0 .../02-gpg-api/02-simple-tro/run.txt | 0 .../02-gpg-api}/Makefile | 0 .../03-tro-fingerprint-state}/Makefile | 0 .../03-tro-fingerprint-state/data/file1.csv | 0 .../03-tro-fingerprint-state/data/file2.csv | 0 .../products/after.csv | 0 .../products/before.csv | 0 .../products/fingerprint_state.csv | 0 .../03-tro-fingerprint-state/run.sh | 0 .../03-tro-fingerprint-state/run.txt | 0 .../runtime/file1.csv | 0 .../runtime/file3.csv | 0 .../03-tro-fingerprint-state/test.py | 0 .../04-timestamp}/Makefile | 0 .../04-timestamp/data/signature.asc | 0 .../04-timestamp/products/digest.yaml | 2 + .../04-timestamp/products/file.tsq | Bin 0 -> 91 bytes .../04-timestamp/run.sh | 0 .../04-timestamp/run.txt | 2 +- .../05-validate-tro-declaration}/Makefile | 0 .../data/mappings.json | 2 +- .../data/tro.schema.ttl | 2 +- .../data/tro1.jsonld | 2 +- .../data/tro2.jsonld | 2 +- .../data/tro3.jsonld | 2 +- .../data/tro4.jsonld | 2 +- .../data/tro5.jsonld | 2 +- .../products/tro1.gv | 0 .../products/tro1.png | Bin .../products/tro2.gv | 0 .../products/tro2.png | Bin .../products/tro3.gv | 0 .../products/tro3.png | Bin .../products/tro4.gv | 0 .../products/tro4.png | Bin .../products/tro5.gv | 0 .../products/tro5.png | Bin .../05-validate-tro-declaration/run.sh | 0 .../05-validate-tro-declaration/run.txt | 0 demo/03-trace-explorations/Makefile | 1 + .../common/certificate/cacert.pem | 0 .../common/certificate/tsa.crt | 0 .../common/tro/file1 | 0 .../common/tro/file2 | 0 .../common/tro/tro.jsonld | 2 +- 117 files changed, 922 insertions(+), 2040 deletions(-) delete mode 100644 demo/01-trov-examples/01-two-artifacts-no-trp/products/img.gv delete mode 100644 demo/01-trov-examples/01-two-artifacts-no-trp/products/img.svg delete mode 100644 demo/01-trov-examples/01-two-artifacts-no-trp/products/report_subclass.html delete mode 100644 demo/01-trov-examples/02-three-artifacts-one-trp/products/img.gv delete mode 100644 demo/01-trov-examples/02-three-artifacts-one-trp/products/img.svg delete mode 100644 demo/01-trov-examples/03-skope-lbda-processing/products/img.gv delete mode 100644 demo/01-trov-examples/03-skope-lbda-processing/products/img.svg delete mode 100644 demo/01-trov-examples/03-skope-lbda-processing/products/report_subclass.html delete mode 100644 demo/01-trov-examples/03-skope-lbda-processing/run.txt rename demo/{01-trov-examples/01-two-artifacts-no-trp => 01-trov-vocab}/Makefile (100%) create mode 100644 demo/01-trov-vocab/products/img.gv create mode 100644 demo/01-trov-vocab/products/img.svg rename demo/{01-trov-examples/02-three-artifacts-one-trp => 01-trov-vocab}/products/report_subclass.html (70%) rename demo/{01-trov-examples/common/query-tro.sh => 01-trov-vocab/run.sh} (50%) create mode 100644 demo/01-trov-vocab/run.txt rename demo/{01-trov-examples/common => 01-trov-vocab}/templates.geist (100%) delete mode 100644 demo/02-explorations/04-timestamp/products/digest.yaml delete mode 100644 demo/02-explorations/04-timestamp/products/file.tsq rename demo/{01-trov-examples/02-three-artifacts-one-trp => 02-tro-examples/01-two-artifacts-no-trp}/Makefile (100%) rename demo/{01-trov-examples => 02-tro-examples}/01-two-artifacts-no-trp/run.sh (100%) rename demo/{01-trov-examples/02-three-artifacts-one-trp => 02-tro-examples/01-two-artifacts-no-trp}/run.txt (50%) rename demo/{01-trov-examples => 02-tro-examples}/01-two-artifacts-no-trp/tro/file1 (100%) rename demo/{01-trov-examples => 02-tro-examples}/01-two-artifacts-no-trp/tro/file2 (100%) rename demo/{01-trov-examples => 02-tro-examples}/01-two-artifacts-no-trp/tro/tro.jsonld (98%) rename demo/{01-trov-examples => 02-tro-examples}/01-two-artifacts-no-trp/trs/private.asc (100%) rename demo/{01-trov-examples => 02-tro-examples}/01-two-artifacts-no-trp/trs/public.gpg (100%) rename demo/{01-trov-examples => 02-tro-examples}/01-two-artifacts-no-trp/trs/trs.jsonld (93%) rename demo/{01-trov-examples/03-skope-lbda-processing => 02-tro-examples/02-three-artifacts-one-trp}/Makefile (100%) rename demo/{01-trov-examples => 02-tro-examples}/02-three-artifacts-one-trp/run.sh (100%) create mode 100644 demo/02-tro-examples/02-three-artifacts-one-trp/run.txt rename demo/{01-trov-examples => 02-tro-examples}/02-three-artifacts-one-trp/tro/file1 (100%) rename demo/{01-trov-examples => 02-tro-examples}/02-three-artifacts-one-trp/tro/file2 (100%) rename demo/{01-trov-examples => 02-tro-examples}/02-three-artifacts-one-trp/tro/file3 (100%) rename demo/{01-trov-examples => 02-tro-examples}/02-three-artifacts-one-trp/tro/tro.jsonld (98%) rename demo/{01-trov-examples => 02-tro-examples}/02-three-artifacts-one-trp/trs/private.asc (100%) rename demo/{01-trov-examples => 02-tro-examples}/02-three-artifacts-one-trp/trs/public.gpg (100%) rename demo/{01-trov-examples => 02-tro-examples}/02-three-artifacts-one-trp/trs/trs.jsonld (94%) rename demo/{01-trov-examples => 02-tro-examples/03-skope-lbda-processing}/Makefile (100%) rename demo/{01-trov-examples => 02-tro-examples}/03-skope-lbda-processing/mappings.json (85%) rename demo/{01-trov-examples => 02-tro-examples}/03-skope-lbda-processing/report_file/arrangement.svg (100%) rename demo/{01-trov-examples => 02-tro-examples}/03-skope-lbda-processing/report_file/overall_tro_graph.html (100%) rename demo/{01-trov-examples => 02-tro-examples}/03-skope-lbda-processing/report_file/report.html (100%) rename demo/{01-trov-examples => 02-tro-examples}/03-skope-lbda-processing/report_file/tro.svg (100%) rename demo/{01-trov-examples => 02-tro-examples}/03-skope-lbda-processing/report_file/trp.svg (100%) rename demo/{01-trov-examples => 02-tro-examples}/03-skope-lbda-processing/report_inline/arrangement.svg (100%) rename demo/{01-trov-examples => 02-tro-examples}/03-skope-lbda-processing/report_inline/overall_tro_graph.html (100%) rename demo/{01-trov-examples => 02-tro-examples}/03-skope-lbda-processing/report_inline/report.html (100%) rename demo/{01-trov-examples => 02-tro-examples}/03-skope-lbda-processing/report_inline/tro.svg (100%) rename demo/{01-trov-examples => 02-tro-examples}/03-skope-lbda-processing/report_inline/trp.svg (100%) rename demo/{01-trov-examples => 02-tro-examples}/03-skope-lbda-processing/run.sh (100%) rename demo/{01-trov-examples/01-two-artifacts-no-trp => 02-tro-examples/03-skope-lbda-processing}/run.txt (65%) rename demo/{01-trov-examples => 02-tro-examples}/03-skope-lbda-processing/templates.geist (100%) rename demo/{01-trov-examples => 02-tro-examples}/03-skope-lbda-processing/tro/tro.jsonld (99%) rename demo/{01-trov-examples => 02-tro-examples}/03-skope-lbda-processing/tro_report (100%) rename demo/{02-explorations/01-gpg-runtime/01-generate-key => 02-tro-examples}/Makefile (100%) create mode 100644 demo/02-tro-examples/common/query-tro.sh rename demo/{02-explorations/01-gpg-runtime/02-simple-tro => 03-trace-explorations/01-gpg-runtime/01-generate-key}/Makefile (100%) rename demo/{02-explorations => 03-trace-explorations}/01-gpg-runtime/01-generate-key/run.sh (100%) rename demo/{02-explorations => 03-trace-explorations}/01-gpg-runtime/01-generate-key/run.txt (100%) rename demo/{02-explorations/01-gpg-runtime => 03-trace-explorations/01-gpg-runtime/02-simple-tro}/Makefile (100%) rename demo/{02-explorations => 03-trace-explorations}/01-gpg-runtime/02-simple-tro/data/private.asc (100%) rename demo/{02-explorations => 03-trace-explorations}/01-gpg-runtime/02-simple-tro/data/public.gpg (100%) rename demo/{02-explorations => 03-trace-explorations}/01-gpg-runtime/02-simple-tro/run.sh (100%) rename demo/{02-explorations => 03-trace-explorations}/01-gpg-runtime/02-simple-tro/run.txt (100%) rename demo/{02-explorations/02-gpg-api/01-generate-key => 03-trace-explorations/01-gpg-runtime}/Makefile (100%) rename demo/{02-explorations/02-gpg-api/02-simple-tro => 03-trace-explorations/02-gpg-api/01-generate-key}/Makefile (100%) rename demo/{02-explorations => 03-trace-explorations}/02-gpg-api/01-generate-key/run.sh (100%) rename demo/{02-explorations => 03-trace-explorations}/02-gpg-api/01-generate-key/run.txt (100%) rename demo/{02-explorations/02-gpg-api => 03-trace-explorations/02-gpg-api/02-simple-tro}/Makefile (100%) rename demo/{02-explorations => 03-trace-explorations}/02-gpg-api/02-simple-tro/data/private.asc (100%) rename demo/{02-explorations => 03-trace-explorations}/02-gpg-api/02-simple-tro/data/public.gpg (100%) rename demo/{02-explorations => 03-trace-explorations}/02-gpg-api/02-simple-tro/run.sh (100%) rename demo/{02-explorations => 03-trace-explorations}/02-gpg-api/02-simple-tro/run.txt (100%) rename demo/{02-explorations/03-tro-fingerprint-state => 03-trace-explorations/02-gpg-api}/Makefile (100%) rename demo/{02-explorations/04-timestamp => 03-trace-explorations/03-tro-fingerprint-state}/Makefile (100%) rename demo/{02-explorations => 03-trace-explorations}/03-tro-fingerprint-state/data/file1.csv (100%) rename demo/{02-explorations => 03-trace-explorations}/03-tro-fingerprint-state/data/file2.csv (100%) rename demo/{02-explorations => 03-trace-explorations}/03-tro-fingerprint-state/products/after.csv (100%) rename demo/{02-explorations => 03-trace-explorations}/03-tro-fingerprint-state/products/before.csv (100%) rename demo/{02-explorations => 03-trace-explorations}/03-tro-fingerprint-state/products/fingerprint_state.csv (100%) rename demo/{02-explorations => 03-trace-explorations}/03-tro-fingerprint-state/run.sh (100%) rename demo/{02-explorations => 03-trace-explorations}/03-tro-fingerprint-state/run.txt (100%) rename demo/{02-explorations => 03-trace-explorations}/03-tro-fingerprint-state/runtime/file1.csv (100%) rename demo/{02-explorations => 03-trace-explorations}/03-tro-fingerprint-state/runtime/file3.csv (100%) rename demo/{02-explorations => 03-trace-explorations}/03-tro-fingerprint-state/test.py (100%) rename demo/{02-explorations/05-validate-tro-declaration => 03-trace-explorations/04-timestamp}/Makefile (100%) rename demo/{02-explorations => 03-trace-explorations}/04-timestamp/data/signature.asc (100%) create mode 100644 demo/03-trace-explorations/04-timestamp/products/digest.yaml create mode 100644 demo/03-trace-explorations/04-timestamp/products/file.tsq rename demo/{02-explorations => 03-trace-explorations}/04-timestamp/run.sh (100%) rename demo/{02-explorations => 03-trace-explorations}/04-timestamp/run.txt (96%) rename demo/{02-explorations => 03-trace-explorations/05-validate-tro-declaration}/Makefile (100%) rename demo/{02-explorations => 03-trace-explorations}/05-validate-tro-declaration/data/mappings.json (78%) rename demo/{02-explorations => 03-trace-explorations}/05-validate-tro-declaration/data/tro.schema.ttl (98%) rename demo/{02-explorations => 03-trace-explorations}/05-validate-tro-declaration/data/tro1.jsonld (95%) rename demo/{02-explorations => 03-trace-explorations}/05-validate-tro-declaration/data/tro2.jsonld (98%) rename demo/{02-explorations => 03-trace-explorations}/05-validate-tro-declaration/data/tro3.jsonld (98%) rename demo/{02-explorations => 03-trace-explorations}/05-validate-tro-declaration/data/tro4.jsonld (94%) rename demo/{02-explorations => 03-trace-explorations}/05-validate-tro-declaration/data/tro5.jsonld (95%) rename demo/{02-explorations => 03-trace-explorations}/05-validate-tro-declaration/products/tro1.gv (100%) rename demo/{02-explorations => 03-trace-explorations}/05-validate-tro-declaration/products/tro1.png (100%) rename demo/{02-explorations => 03-trace-explorations}/05-validate-tro-declaration/products/tro2.gv (100%) rename demo/{02-explorations => 03-trace-explorations}/05-validate-tro-declaration/products/tro2.png (100%) rename demo/{02-explorations => 03-trace-explorations}/05-validate-tro-declaration/products/tro3.gv (100%) rename demo/{02-explorations => 03-trace-explorations}/05-validate-tro-declaration/products/tro3.png (100%) rename demo/{02-explorations => 03-trace-explorations}/05-validate-tro-declaration/products/tro4.gv (100%) rename demo/{02-explorations => 03-trace-explorations}/05-validate-tro-declaration/products/tro4.png (100%) rename demo/{02-explorations => 03-trace-explorations}/05-validate-tro-declaration/products/tro5.gv (100%) rename demo/{02-explorations => 03-trace-explorations}/05-validate-tro-declaration/products/tro5.png (100%) rename demo/{02-explorations => 03-trace-explorations}/05-validate-tro-declaration/run.sh (100%) rename demo/{02-explorations => 03-trace-explorations}/05-validate-tro-declaration/run.txt (100%) create mode 100644 demo/03-trace-explorations/Makefile rename demo/{02-explorations => 03-trace-explorations}/common/certificate/cacert.pem (100%) rename demo/{02-explorations => 03-trace-explorations}/common/certificate/tsa.crt (100%) rename demo/{02-explorations => 03-trace-explorations}/common/tro/file1 (100%) rename demo/{02-explorations => 03-trace-explorations}/common/tro/file2 (100%) rename demo/{02-explorations => 03-trace-explorations}/common/tro/tro.jsonld (98%) diff --git a/demo/01-trov-examples/01-two-artifacts-no-trp/products/img.gv b/demo/01-trov-examples/01-two-artifacts-no-trp/products/img.gv deleted file mode 100644 index 9b2aad2..0000000 --- a/demo/01-trov-examples/01-two-artifacts-no-trp/products/img.gv +++ /dev/null @@ -1,22 +0,0 @@ - - digraph subclass_vocab_graph { - rankdir=LR - fontname=Courier; fontsize=12; labelloc=t - label="Subclass Vocab Graph" - node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] - - "ArtifactCollection" -> "ArtifactComposition" - "ArtifactCollection" -> "ArtifactLocus" - "TREAttribute" -> "TROAttribute" - "TREAttribute" -> "TRSAttribute" - "TROAttribute" -> "IncludesAllInputData" - "TRSAttribute" -> "TRSCapability" - "TRSCapability" -> "CanProvideInternetIsolation" - "TRSCapability" -> "TRSPolicy" - "TRSPolicy" -> "EnforcesInternetIsolation" - "TrustedResearchElement" -> "TimeStampingAuthority" - "TrustedResearchElement" -> "TransparentResearchObject" - "TrustedResearchElement" -> "TrustedResearchPerformance" - "TrustedResearchElement" -> "TrustedResearchSystem" - - } \ No newline at end of file diff --git a/demo/01-trov-examples/01-two-artifacts-no-trp/products/img.svg b/demo/01-trov-examples/01-two-artifacts-no-trp/products/img.svg deleted file mode 100644 index 1137c3b..0000000 --- a/demo/01-trov-examples/01-two-artifacts-no-trp/products/img.svg +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - -subclass_vocab_graph - -Subclass Vocab Graph - - -ArtifactCollection - -ArtifactCollection - - - -ArtifactComposition - -ArtifactComposition - - - -ArtifactCollection->ArtifactComposition - - - - - -ArtifactLocus - -ArtifactLocus - - - -ArtifactCollection->ArtifactLocus - - - - - -TREAttribute - -TREAttribute - - - -TROAttribute - -TROAttribute - - - -TREAttribute->TROAttribute - - - - - -TRSAttribute - -TRSAttribute - - - -TREAttribute->TRSAttribute - - - - - -IncludesAllInputData - -IncludesAllInputData - - - -TROAttribute->IncludesAllInputData - - - - - -TRSCapability - -TRSCapability - - - -TRSAttribute->TRSCapability - - - - - -CanProvideInternetIsolation - -CanProvideInternetIsolation - - - -TRSCapability->CanProvideInternetIsolation - - - - - -TRSPolicy - -TRSPolicy - - - -TRSCapability->TRSPolicy - - - - - -EnforcesInternetIsolation - -EnforcesInternetIsolation - - - -TRSPolicy->EnforcesInternetIsolation - - - - - -TrustedResearchElement - -TrustedResearchElement - - - -TimeStampingAuthority - -TimeStampingAuthority - - - -TrustedResearchElement->TimeStampingAuthority - - - - - -TransparentResearchObject - -TransparentResearchObject - - - -TrustedResearchElement->TransparentResearchObject - - - - - -TrustedResearchPerformance - -TrustedResearchPerformance - - - -TrustedResearchElement->TrustedResearchPerformance - - - - - -TrustedResearchSystem - -TrustedResearchSystem - - - -TrustedResearchElement->TrustedResearchSystem - - - - - diff --git a/demo/01-trov-examples/01-two-artifacts-no-trp/products/report_subclass.html b/demo/01-trov-examples/01-two-artifacts-no-trp/products/report_subclass.html deleted file mode 100644 index abb0246..0000000 --- a/demo/01-trov-examples/01-two-artifacts-no-trp/products/report_subclass.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - Subclass Report - -

Visualize subclass of the vocabularies

-

1. SVG

- -

2. GV

-

-    digraph subclass_vocab_graph {
-    rankdir=LR
-    fontname=Courier; fontsize=12; labelloc=t
-    label="Subclass Vocab Graph"
-            node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier]
-                            
-    "ArtifactCollection" -> "ArtifactComposition"                            
-    "ArtifactCollection" -> "ArtifactLocus"                            
-    "TREAttribute" -> "TROAttribute"                            
-    "TREAttribute" -> "TRSAttribute"                            
-    "TROAttribute" -> "IncludesAllInputData"                            
-    "TRSAttribute" -> "TRSCapability"                            
-    "TRSCapability" -> "CanProvideInternetIsolation"                            
-    "TRSCapability" -> "TRSPolicy"                            
-    "TRSPolicy" -> "EnforcesInternetIsolation"                            
-    "TrustedResearchElement" -> "TimeStampingAuthority"                            
-    "TrustedResearchElement" -> "TransparentResearchObject"                            
-    "TrustedResearchElement" -> "TrustedResearchPerformance"                            
-    "TrustedResearchElement" -> "TrustedResearchSystem"            
-            
-    }        
-

3. Table

- - - - - - - - - - - - - - - - -
ParentLabelChildLabel
"ArtifactCollection""ArtifactComposition"
"ArtifactCollection""ArtifactLocus"
"TREAttribute""TROAttribute"
"TREAttribute""TRSAttribute"
"TROAttribute""IncludesAllInputData"
"TRSAttribute""TRSCapability"
"TRSCapability""CanProvideInternetIsolation"
"TRSCapability""TRSPolicy"
"TRSPolicy""EnforcesInternetIsolation"
"TrustedResearchElement""TimeStampingAuthority"
"TrustedResearchElement""TransparentResearchObject"
"TrustedResearchElement""TrustedResearchPerformance"
"TrustedResearchElement""TrustedResearchSystem"
- - diff --git a/demo/01-trov-examples/02-three-artifacts-one-trp/products/img.gv b/demo/01-trov-examples/02-three-artifacts-one-trp/products/img.gv deleted file mode 100644 index 9b2aad2..0000000 --- a/demo/01-trov-examples/02-three-artifacts-one-trp/products/img.gv +++ /dev/null @@ -1,22 +0,0 @@ - - digraph subclass_vocab_graph { - rankdir=LR - fontname=Courier; fontsize=12; labelloc=t - label="Subclass Vocab Graph" - node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] - - "ArtifactCollection" -> "ArtifactComposition" - "ArtifactCollection" -> "ArtifactLocus" - "TREAttribute" -> "TROAttribute" - "TREAttribute" -> "TRSAttribute" - "TROAttribute" -> "IncludesAllInputData" - "TRSAttribute" -> "TRSCapability" - "TRSCapability" -> "CanProvideInternetIsolation" - "TRSCapability" -> "TRSPolicy" - "TRSPolicy" -> "EnforcesInternetIsolation" - "TrustedResearchElement" -> "TimeStampingAuthority" - "TrustedResearchElement" -> "TransparentResearchObject" - "TrustedResearchElement" -> "TrustedResearchPerformance" - "TrustedResearchElement" -> "TrustedResearchSystem" - - } \ No newline at end of file diff --git a/demo/01-trov-examples/02-three-artifacts-one-trp/products/img.svg b/demo/01-trov-examples/02-three-artifacts-one-trp/products/img.svg deleted file mode 100644 index 1137c3b..0000000 --- a/demo/01-trov-examples/02-three-artifacts-one-trp/products/img.svg +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - -subclass_vocab_graph - -Subclass Vocab Graph - - -ArtifactCollection - -ArtifactCollection - - - -ArtifactComposition - -ArtifactComposition - - - -ArtifactCollection->ArtifactComposition - - - - - -ArtifactLocus - -ArtifactLocus - - - -ArtifactCollection->ArtifactLocus - - - - - -TREAttribute - -TREAttribute - - - -TROAttribute - -TROAttribute - - - -TREAttribute->TROAttribute - - - - - -TRSAttribute - -TRSAttribute - - - -TREAttribute->TRSAttribute - - - - - -IncludesAllInputData - -IncludesAllInputData - - - -TROAttribute->IncludesAllInputData - - - - - -TRSCapability - -TRSCapability - - - -TRSAttribute->TRSCapability - - - - - -CanProvideInternetIsolation - -CanProvideInternetIsolation - - - -TRSCapability->CanProvideInternetIsolation - - - - - -TRSPolicy - -TRSPolicy - - - -TRSCapability->TRSPolicy - - - - - -EnforcesInternetIsolation - -EnforcesInternetIsolation - - - -TRSPolicy->EnforcesInternetIsolation - - - - - -TrustedResearchElement - -TrustedResearchElement - - - -TimeStampingAuthority - -TimeStampingAuthority - - - -TrustedResearchElement->TimeStampingAuthority - - - - - -TransparentResearchObject - -TransparentResearchObject - - - -TrustedResearchElement->TransparentResearchObject - - - - - -TrustedResearchPerformance - -TrustedResearchPerformance - - - -TrustedResearchElement->TrustedResearchPerformance - - - - - -TrustedResearchSystem - -TrustedResearchSystem - - - -TrustedResearchElement->TrustedResearchSystem - - - - - diff --git a/demo/01-trov-examples/03-skope-lbda-processing/products/img.gv b/demo/01-trov-examples/03-skope-lbda-processing/products/img.gv deleted file mode 100644 index 9b2aad2..0000000 --- a/demo/01-trov-examples/03-skope-lbda-processing/products/img.gv +++ /dev/null @@ -1,22 +0,0 @@ - - digraph subclass_vocab_graph { - rankdir=LR - fontname=Courier; fontsize=12; labelloc=t - label="Subclass Vocab Graph" - node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] - - "ArtifactCollection" -> "ArtifactComposition" - "ArtifactCollection" -> "ArtifactLocus" - "TREAttribute" -> "TROAttribute" - "TREAttribute" -> "TRSAttribute" - "TROAttribute" -> "IncludesAllInputData" - "TRSAttribute" -> "TRSCapability" - "TRSCapability" -> "CanProvideInternetIsolation" - "TRSCapability" -> "TRSPolicy" - "TRSPolicy" -> "EnforcesInternetIsolation" - "TrustedResearchElement" -> "TimeStampingAuthority" - "TrustedResearchElement" -> "TransparentResearchObject" - "TrustedResearchElement" -> "TrustedResearchPerformance" - "TrustedResearchElement" -> "TrustedResearchSystem" - - } \ No newline at end of file diff --git a/demo/01-trov-examples/03-skope-lbda-processing/products/img.svg b/demo/01-trov-examples/03-skope-lbda-processing/products/img.svg deleted file mode 100644 index 1137c3b..0000000 --- a/demo/01-trov-examples/03-skope-lbda-processing/products/img.svg +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - -subclass_vocab_graph - -Subclass Vocab Graph - - -ArtifactCollection - -ArtifactCollection - - - -ArtifactComposition - -ArtifactComposition - - - -ArtifactCollection->ArtifactComposition - - - - - -ArtifactLocus - -ArtifactLocus - - - -ArtifactCollection->ArtifactLocus - - - - - -TREAttribute - -TREAttribute - - - -TROAttribute - -TROAttribute - - - -TREAttribute->TROAttribute - - - - - -TRSAttribute - -TRSAttribute - - - -TREAttribute->TRSAttribute - - - - - -IncludesAllInputData - -IncludesAllInputData - - - -TROAttribute->IncludesAllInputData - - - - - -TRSCapability - -TRSCapability - - - -TRSAttribute->TRSCapability - - - - - -CanProvideInternetIsolation - -CanProvideInternetIsolation - - - -TRSCapability->CanProvideInternetIsolation - - - - - -TRSPolicy - -TRSPolicy - - - -TRSCapability->TRSPolicy - - - - - -EnforcesInternetIsolation - -EnforcesInternetIsolation - - - -TRSPolicy->EnforcesInternetIsolation - - - - - -TrustedResearchElement - -TrustedResearchElement - - - -TimeStampingAuthority - -TimeStampingAuthority - - - -TrustedResearchElement->TimeStampingAuthority - - - - - -TransparentResearchObject - -TransparentResearchObject - - - -TrustedResearchElement->TransparentResearchObject - - - - - -TrustedResearchPerformance - -TrustedResearchPerformance - - - -TrustedResearchElement->TrustedResearchPerformance - - - - - -TrustedResearchSystem - -TrustedResearchSystem - - - -TrustedResearchElement->TrustedResearchSystem - - - - - diff --git a/demo/01-trov-examples/03-skope-lbda-processing/products/report_subclass.html b/demo/01-trov-examples/03-skope-lbda-processing/products/report_subclass.html deleted file mode 100644 index abb0246..0000000 --- a/demo/01-trov-examples/03-skope-lbda-processing/products/report_subclass.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - Subclass Report - -

Visualize subclass of the vocabularies

-

1. SVG

- -

2. GV

-

-    digraph subclass_vocab_graph {
-    rankdir=LR
-    fontname=Courier; fontsize=12; labelloc=t
-    label="Subclass Vocab Graph"
-            node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier]
-                            
-    "ArtifactCollection" -> "ArtifactComposition"                            
-    "ArtifactCollection" -> "ArtifactLocus"                            
-    "TREAttribute" -> "TROAttribute"                            
-    "TREAttribute" -> "TRSAttribute"                            
-    "TROAttribute" -> "IncludesAllInputData"                            
-    "TRSAttribute" -> "TRSCapability"                            
-    "TRSCapability" -> "CanProvideInternetIsolation"                            
-    "TRSCapability" -> "TRSPolicy"                            
-    "TRSPolicy" -> "EnforcesInternetIsolation"                            
-    "TrustedResearchElement" -> "TimeStampingAuthority"                            
-    "TrustedResearchElement" -> "TransparentResearchObject"                            
-    "TrustedResearchElement" -> "TrustedResearchPerformance"                            
-    "TrustedResearchElement" -> "TrustedResearchSystem"            
-            
-    }        
-

3. Table

- - - - - - - - - - - - - - - - -
ParentLabelChildLabel
"ArtifactCollection""ArtifactComposition"
"ArtifactCollection""ArtifactLocus"
"TREAttribute""TROAttribute"
"TREAttribute""TRSAttribute"
"TROAttribute""IncludesAllInputData"
"TRSAttribute""TRSCapability"
"TRSCapability""CanProvideInternetIsolation"
"TRSCapability""TRSPolicy"
"TRSPolicy""EnforcesInternetIsolation"
"TrustedResearchElement""TimeStampingAuthority"
"TrustedResearchElement""TransparentResearchObject"
"TrustedResearchElement""TrustedResearchPerformance"
"TrustedResearchElement""TrustedResearchSystem"
- - diff --git a/demo/01-trov-examples/03-skope-lbda-processing/run.txt b/demo/01-trov-examples/03-skope-lbda-processing/run.txt deleted file mode 100644 index 77ebf7c..0000000 --- a/demo/01-trov-examples/03-skope-lbda-processing/run.txt +++ /dev/null @@ -1,811 +0,0 @@ -================================================ bash cell | import trov vocabulary ================================================ - -# Destroy the dataset -geist destroy --dataset kb --quiet - -# Import TRACE vocabulary and TRO Manifest and export as N-TRIPLES -geist create --dataset kb --inputformat json-ld --inputfile /mnt/trace-model/exports/trace-vocab.jsonld --infer owl - -# Import TRO and TRS as JSON-LD and export as N-TRIPLES -geist export --dataset kb --outputformat nt | sort | grep trov - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- - . - "A set of loci describing the location of one or more artifacts" . - "ArtifactArrangement" . - . - . - "Base class for collections of one or more artifacts." . - "ArtifactCollection" . - . - . - "A set of artifacts described by a TRO." . - "ArtifactComposition" . - . - . - . - "The location of a specific artifact." . - "ArtifactLocus" . - . - . - . - "The capability to prevent Internet access during a TRP." . - "CanProvideInternetIsolation" . - . - . - . - . - . - "Unique fingerprint of a particular artifact composition" . - "CompositionFingerprint" . - . - . - "The policy of always preventing Internet access during a TRP." . - "EnforcesInternetIsolation" . - . - . - . - . - . - . - "TRO composition includes all input data employed in creating the TRO." . - "IncludesAllInputData" . - . - . - . - . - "A research artifact described by a TRO." . - "ResearchArtifact" . - . - . - "An attribute of a TRS, TRP, or TRO." . - "TREAttribute" . - . - . - "An attribute of a particular TRO." . - "TROAttribute" . - . - . - . - "An attribute of a TRS." . - "TRSAttribute" . - . - . - . - "A capability of a TRS." . - "TRSCapability" . - . - . - . - . - "A policy always enforced by a particular TRS." . - "TRSPolicy" . - . - . - . - . - . - "A timestamping authority trusted by a TRS." . - "TimeStampingAuthority" . - . - . - . - "A set of research artifacts produced by a TRP and signed by the performing TRS." . - "TransparentResearchObject" . - . - . - . - "Common base class for TRSs, TRPs, and TROs." . - "TrustedResearchElement" . - . - . - "A set of research operations performed by a TRS." . - "An execution of a research process" . - "TrustedResearchPerformance" . - . - . - . - "A system certified to perform TRPs and assemble TROs." . - "TrustedResearchSystem" . - . - . - . - . - . - "hasArrangement" . - . - . - . - . - . - . - "hasArtifact" . - . - . - . - . - . - . - . - "hasComposition" . - . - . - . - . - . - . - . - . - "hasFingerprint" . - . - . - . - . - . - . - . - "hasLocus" . - . - . - . - . - . - . - "hasLocus" . - . - . - . - . - . - . - . - . - "wasAssembledBy" . - . - . - . - . - . - . - . - . - "wasTimestampedBy" . - . - . - . - . - . -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -================================================ bash cell | import tro declaration ================================================ - -# Import TRACE vocabulary and TRO Manifest and export as N-TRIPLES -geist load --dataset kb --inputformat json-ld --inputfile tro/tro.jsonld - -# Import TRO and TRS as JSON-LD and export as N-TRIPLES -geist export --dataset kb --outputformat nt | sort | grep trov-example - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- - . - . - . - "https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc" . - . - "Arrangement decscribing location of LBDA NetCDF file on NOAA web server" . - . - . - . - . - . - "data/lbda-v2_kddm_pmdi_2017.nc" . - . - . - . - "analysis.ipynb" . - . - "Arrangement on fileserver managed by TRS after downloading dataset and before running Jupyter notebook" . - . - . - . - . - . - . - "data/lbda-v2_kddm_pmdi_2017.nc" . - . - . - . - "analysis.ipynb" . - . - . - . - "output/analysis.html" . - . - . - . - "output/histogram.png" . - . - . - . - "lbda-v2_kddm_pmdi_2017.tiff" . - "output/lbda-v2_kddm_pmdi_2017.tiff" . - . - "Arrangement on fileserver managed by TRS after running Jupyter notebook" . - . - . - . - . - . - . - . - . - . - "analysis.ipynb" . - . - . - . - "analysis.html" . - . - . - . - "histogram.png" . - . - "Arrangement of final products packaged in a Zip file" . - . - . - . - . - . - . - "NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset" . - . - "application/x-netcdf" . - "b02edb8d27cf9ac19087938dd3d306895e208bd3a9f0458e63292ea2695a1f78" . - . - "Initial state of Jupyter notebook for processing the LBDA dataset" . - . - "text/plain" . - "8fcf663f1c40cbf846d0e5a136f0797fa560545f5d8c1391a5b13406f3814ad6" . - . - "Final state of Jupyter notebook for processing the LBDA dataset" . - . - "text/plain" . - "8cf4f26b27e83a967bd7ddd97a24e6d4b7a9a7a14fff7ffeb47e2fa9085bccaf" . - . - "HTML rendering of final state of the Jupyter notebook" . - . - "text/html" . - "870c9297ae7439c283697761c90028312cc0312f13182afb0a0125eb29e5f7f0" . - . - "Graphical rendering of the histogram of dataset values" . - . - "image/png" . - "cfc6e4d5e76754d4802d42a2d6ff79a901c7f0e5daccb256cab542bb7953b2bf" . - . - "GeoTIFF file containing LBDA data cube ready for staging to SKOPE server" . - . - "image/tiff" . - "e035f3af957c4f761c1d502cc28f91676fbf2bbdf5f7045a7151a6d3ff04789d" . - . - . - . - . - . - . - . - . - . - . - . - "b2b65040893f35d112979c564121c7425f4aad10838aadcb232be5db715ec2b2" . - . - . - . - . - . - . - "Download LBDA dataset from NOAA website and prepare for use by researchers employing the SKOPE application" . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - "Process that downloaded the LBDA NetCDF file from NOAA server to local filesystem" . - . - . - . - "2023-05-08T01:40:00Z" . - . - "2023-05-08T01:30:00Z" . - . - . - . - . - . - "Process that ran Jupyter notebook" . - . - . - . - "2023-05-08T01:50:00Z" . - . - "2023-05-08T01:41:00Z" . - . - . - . - . - . - "Process that packaged products of the Jupyter notebook execution in a Zip file" . - . - . - . - "2023-05-08T02:00:00Z" . - . - "2023-05-08T01:51:00Z" . - . - . - . - . - . - . - "TRS that can monitor netowrk accesses or provide Internet isolation" . - . - . - . - "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n" . - . - . - "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n" . -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -================================================= bash cell | query tro attributes ================================================= - -# What subclasses of TROAttribute have been defined? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdfs: - PREFIX trov: - - SELECT DISTINCT ?attribute ?attributeLabel ?attributeComment - WHERE { - ?attribute rdfs:subClassOf trov:TROAttribute . - ?attribute rdfs:label ?attributeLabel . - ?attribute rdfs:comment ?attributeComment . - } ORDER BY ?attribute ?attributeLabel ?attributeComment - -__END_QUERY__ - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -| | attribute | attributeLabel | attributeComment | -|---:|:-----------------------------------------------------------|:-----------------------|:------------------------------------------------------------------------| -| 0 | | "IncludesAllInputData" | "TRO composition includes all input data employed in creating the TRO." | -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -================================================= bash cell | query trs attributes ================================================= - -# What subclasses of TRSAttribute have been defined? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdfs: - PREFIX trov: - - SELECT DISTINCT ?attribute ?attributeLabel ?attributeComment - WHERE { - ?attribute rdfs:subClassOf trov:TRSAttribute . - ?attribute rdfs:label ?attributeLabel . - ?attribute rdfs:comment ?attributeComment . - } ORDER BY ?attribute ?attributeLabel ?attributeComment - -__END_QUERY__ - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -| | attribute | attributeLabel | attributeComment | -|---:|:------------------------------------------------------------------|:------------------------------|:----------------------------------------------------------------| -| 0 | | "CanProvideInternetIsolation" | "The capability to prevent Internet access during a TRP." | -| 1 | | "EnforcesInternetIsolation" | "The policy of always preventing Internet access during a TRP." | -| 2 | | "TRSCapability" | "A capability of a TRS." | -| 3 | | "TRSPolicy" | "A policy always enforced by a particular TRS." | -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -====================================== bash cell | reload trov vocabulary without inferences ======================================= - -# Destroy the dataset -geist destroy --dataset kb - -# Import TRACE vocabulary and TRO Manifest and export as N-TRIPLES -geist create --dataset kb --inputformat json-ld --inputfile /mnt/trace-model/exports/trace-vocab.jsonld --infer none - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -================================================= bash cell | query subclass vocab ================================================= - -# What (ParentClass, ChildClass) pairs does trov vocabulary have? - -geist report --outputroot products << END_TEMPLATE - -{%- use "../common/templates.geist" %} -{%- query isfilepath=False as query_subclass_vocab_str %} - PREFIX rdf: - PREFIX rdfs: - - SELECT DISTINCT ?ParentLabel ?ChildLabel - WHERE { - ?ParentClass rdf:type rdfs:Class ; - rdfs:label ?ParentLabel . - - ?ChildClass rdfs:subClassOf ?ParentClass ; - rdf:type rdfs:Class ; - rdfs:label ?ChildLabel . - - FILTER (?ParentLabel != ?ChildLabel) - } - ORDER BY ?ParentLabel ?ChildLabel -{% endquery %} -{%- set query_subclass_vocab = query_subclass_vocab_str | json2df %} - -{%- html "report_subclass.html" %} -{%- head "Subclass Report" %} - -

Visualize subclass of the vocabularies

-

1. SVG

- {% img src="img.svg", width="80%" %} - {%- gv_graph "subclass_vocab_graph", "LR" %} - {%- gv_title "Subclass Vocab Graph" %} - - node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] - {% for _, row in query_subclass_vocab.iterrows() %} - {% gv_edge row["ParentLabel"], row["ChildLabel"] %} - {% endfor %} - - {% gv_end %} - {% endimg %} - -

2. GV

- {% img src="img.gv" %} - {%- gv_graph "subclass_vocab_graph", "LR" %} - {%- gv_title "Subclass Vocab Graph" %} - - node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] - {% for _, row in query_subclass_vocab.iterrows() %} - {% gv_edge row["ParentLabel"], row["ChildLabel"] %} - {% endfor %} - - {% gv_end %} - {% endimg %} - -

3. Table

- {%- table %} - {{ query_subclass_vocab_str }} - {% endtable %} - -{% endhtml %} -{%- destroy %} - -END_TEMPLATE - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- - - - - - - - - - Subclass Report - -

Visualize subclass of the vocabularies

-

1. SVG

- -

2. GV

-

-    digraph subclass_vocab_graph {
-    rankdir=LR
-    fontname=Courier; fontsize=12; labelloc=t
-    label="Subclass Vocab Graph"
-            node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier]
-                            
-    "ArtifactCollection" -> "ArtifactComposition"                            
-    "ArtifactCollection" -> "ArtifactLocus"                            
-    "TREAttribute" -> "TROAttribute"                            
-    "TREAttribute" -> "TRSAttribute"                            
-    "TROAttribute" -> "IncludesAllInputData"                            
-    "TRSAttribute" -> "TRSCapability"                            
-    "TRSCapability" -> "CanProvideInternetIsolation"                            
-    "TRSCapability" -> "TRSPolicy"                            
-    "TRSPolicy" -> "EnforcesInternetIsolation"                            
-    "TrustedResearchElement" -> "TimeStampingAuthority"                            
-    "TrustedResearchElement" -> "TransparentResearchObject"                            
-    "TrustedResearchElement" -> "TrustedResearchPerformance"                            
-    "TrustedResearchElement" -> "TrustedResearchSystem"            
-            
-    }        
-

3. Table

- - - - - - - - - - - - - - - - -
ParentLabelChildLabel
"ArtifactCollection""ArtifactComposition"
"ArtifactCollection""ArtifactLocus"
"TREAttribute""TROAttribute"
"TREAttribute""TRSAttribute"
"TROAttribute""IncludesAllInputData"
"TRSAttribute""TRSCapability"
"TRSCapability""CanProvideInternetIsolation"
"TRSCapability""TRSPolicy"
"TRSPolicy""EnforcesInternetIsolation"
"TrustedResearchElement""TimeStampingAuthority"
"TrustedResearchElement""TransparentResearchObject"
"TrustedResearchElement""TrustedResearchPerformance"
"TrustedResearchElement""TrustedResearchSystem"
- - - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -================================================== bash cell | tro_report_inline =================================================== - -geist report --outputroot report_inline << END_TEMPLATE - -{%- use "templates.geist" %} -{%- create %} tro/tro.jsonld {% endcreate %} - -{%- html "overall_tro_graph.html" %} -{%- head "Overall TRO Graph" %} - - -

Overall TRO Graph

- {%- graph dataset="kb", rankdir="LR", mappings="mappings.json" as tro_graph %} - {% img src="tro.svg" %} {{ tro_graph }} {% endimg %} - - -{% endhtml %} - -{%- html "report.html" %} -{%- head "TRO Report" %} - - -

TRO Report

-

This report shows the TRO of downloading LBDA dataset from NOAA website and preparing for use by researchers employing the SKOPE application. -

1. The TRO was assembled by what TRS?

- {%- table mappings="mappings.json" %} - {% query_tro_trs_str %} - {% endtable %} - -

2. What capabilities does the TRS have?

- {%- table mappings="mappings.json" %} - {% query_trs_capability_str %} - {% endtable %} - -

3. What TRPs does the TRO have? What arrangements are accessed and contributed to per TRP accordingly?

- {% img src="trp.svg" %} - {%- gv_graph "trp", "LR" %} - nodesep=0.6 - node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] - {%- map isfilepath=False, mappings="mappings.json" as query_trp_shorten %} {% query_trp_str %} {% endmap %} - {%- set query_trp = query_trp_shorten | json2df %} - {% for _, row in query_trp.iterrows() %} - {% gv_labeled_edge row["in"], row["out"], row["trp"] %} - {% endfor %} - {% gv_end %} - {% endimg %} - -

4. What artifacts are included in each arrangement?

- {% img src="arrangement.svg" %} - {%- gv_graph "arrangement", "LR" %} - nodesep=0.6 - node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] - {%- map isfilepath=False, mappings="mappings.json" as query_arrangement_shorten %} {% query_arrangement_str %} {% endmap %} - {%- set query_arrangement = query_arrangement_shorten | json2df %} - {% for _, row in query_arrangement.iterrows() %} - {% gv_edge row["arrangement"], row["artifact"] %} - {% endfor %} - {% gv_end %} - {% endimg %} - -

5. What are the type, comment, mimeType, and sha256 of each artifact? Which composition does it belong to?

- {%- table mappings="mappings.json" %} - {% query_artifact_str %} - {% endtable %} - -

6. Overall graph

-
Zoom in the graph - - - -{% endhtml %} - -{%- destroy %} - -END_TEMPLATE - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- - - - - - - - - - Overall TRO Graph - - -

Overall TRO Graph

- - - - - - - - - - - TRO Report - - -

TRO Report

-

This report shows the TRO of downloading LBDA dataset from NOAA website and preparing for use by researchers employing the SKOPE application. -

1. The TRO was assembled by what TRS?

- - - - -
trotrs
<tro><trs>
- -

2. What capabilities does the TRS have?

- - - - - -
trscapability_idcapability_type
<trs><trs/capability/1><trov:CanRecordInternetAccess>
<trs><trs/capability/2><trov:CanProvideInternetIsolation>
- -

3. What TRPs does the TRO have? What arrangements are accessed and contributed to per TRP accordingly?

- -

4. What artifacts are included in each arrangement?

- -

5. What are the type, comment, mimeType, and sha256 of each artifact? Which composition does it belong to?

- - - - - - - - - -
artifacttypecommentmimeTypesha256composition
<composition/1/artifact/1><trov:DataArtifact>"NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset""application/x-netcdf""b02edb8d27cf9ac19087938dd3d306895e208bd3a9f0458e63292ea2695a1f78"<composition/1>
<composition/1/artifact/2><trov:ComputationalNotebookArtifact>"Initial state of Jupyter notebook for processing the LBDA dataset""text/plain""8fcf663f1c40cbf846d0e5a136f0797fa560545f5d8c1391a5b13406f3814ad6"<composition/1>
<composition/1/artifact/3><trov:ComputationalNotebookArtifact>"Final state of Jupyter notebook for processing the LBDA dataset""text/plain""8cf4f26b27e83a967bd7ddd97a24e6d4b7a9a7a14fff7ffeb47e2fa9085bccaf"<composition/1>
<composition/1/artifact/4><trov:HTMLArtifact>"HTML rendering of final state of the Jupyter notebook""text/html""870c9297ae7439c283697761c90028312cc0312f13182afb0a0125eb29e5f7f0"<composition/1>
<composition/1/artifact/5><trov:ImageArtifact>"Graphical rendering of the histogram of dataset values""image/png""cfc6e4d5e76754d4802d42a2d6ff79a901c7f0e5daccb256cab542bb7953b2bf"<composition/1>
<composition/1/artifact/6><trov:DataArtifact>"GeoTIFF file containing LBDA data cube ready for staging to SKOPE server""image/tiff""e035f3af957c4f761c1d502cc28f91676fbf2bbdf5f7045a7151a6d3ff04789d"<composition/1>
- -

6. Overall graph

- Zoom in the graph - - - - - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -=================================================== bash cell | tro_report_file ==================================================== - -geist report --file tro_report --outputroot report_file - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- - - - - - - - - - Overall TRO Graph - - -

Overall TRO Graph

- - - - - - - - - - - TRO Report - - -

TRO Report

-

This report shows the TRO of downloading LBDA dataset from NOAA website and preparing for use by researchers employing the SKOPE application. -

1. The TRO was assembled by what TRS?

- - - - -
trotrs
<tro><trs>
- -

2. What capabilities does the TRS have?

- - - - - -
trscapability_idcapability_type
<trs><trs/capability/1><trov:CanRecordInternetAccess>
<trs><trs/capability/2><trov:CanProvideInternetIsolation>
- -

3. What TRPs does the TRO have? What arrangements are accessed and contributed to per TRP accordingly?

- -

4. What artifacts are included in each arrangement?

- -

5. What are the type, comment, mimeType, and sha256 of each artifact? Which composition does it belong to?

- - - - - - - - - -
artifacttypecommentmimeTypesha256composition
<composition/1/artifact/1><trov:DataArtifact>"NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset""application/x-netcdf""b02edb8d27cf9ac19087938dd3d306895e208bd3a9f0458e63292ea2695a1f78"<composition/1>
<composition/1/artifact/2><trov:ComputationalNotebookArtifact>"Initial state of Jupyter notebook for processing the LBDA dataset""text/plain""8fcf663f1c40cbf846d0e5a136f0797fa560545f5d8c1391a5b13406f3814ad6"<composition/1>
<composition/1/artifact/3><trov:ComputationalNotebookArtifact>"Final state of Jupyter notebook for processing the LBDA dataset""text/plain""8cf4f26b27e83a967bd7ddd97a24e6d4b7a9a7a14fff7ffeb47e2fa9085bccaf"<composition/1>
<composition/1/artifact/4><trov:HTMLArtifact>"HTML rendering of final state of the Jupyter notebook""text/html""870c9297ae7439c283697761c90028312cc0312f13182afb0a0125eb29e5f7f0"<composition/1>
<composition/1/artifact/5><trov:ImageArtifact>"Graphical rendering of the histogram of dataset values""image/png""cfc6e4d5e76754d4802d42a2d6ff79a901c7f0e5daccb256cab542bb7953b2bf"<composition/1>
<composition/1/artifact/6><trov:DataArtifact>"GeoTIFF file containing LBDA data cube ready for staging to SKOPE server""image/tiff""e035f3af957c4f761c1d502cc28f91676fbf2bbdf5f7045a7151a6d3ff04789d"<composition/1>
- -

6. Overall graph

- Zoom in the graph - - - - - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - diff --git a/demo/01-trov-examples/01-two-artifacts-no-trp/Makefile b/demo/01-trov-vocab/Makefile similarity index 100% rename from demo/01-trov-examples/01-two-artifacts-no-trp/Makefile rename to demo/01-trov-vocab/Makefile diff --git a/demo/01-trov-vocab/products/img.gv b/demo/01-trov-vocab/products/img.gv new file mode 100644 index 0000000..109eea1 --- /dev/null +++ b/demo/01-trov-vocab/products/img.gv @@ -0,0 +1,22 @@ + + digraph subclass_vocab_graph { + rankdir=LR + fontname=Courier; fontsize=12; labelloc=t + label="Subclass Vocab Graph" + node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] + + "ArtifactComposition" -> "ArtifactCollection" + "ArtifactLocus" -> "ArtifactCollection" + "TROAttribute" -> "TREAttribute" + "TRSAttribute" -> "TREAttribute" + "IncludesAllInputData" -> "TROAttribute" + "TRSCapability" -> "TRSAttribute" + "CanProvideInternetIsolation" -> "TRSCapability" + "TRSPolicy" -> "TRSCapability" + "EnforcesInternetIsolation" -> "TRSPolicy" + "TimeStampingAuthority" -> "TrustedResearchElement" + "TransparentResearchObject" -> "TrustedResearchElement" + "TrustedResearchPerformance" -> "TrustedResearchElement" + "TrustedResearchSystem" -> "TrustedResearchElement" + + } \ No newline at end of file diff --git a/demo/01-trov-vocab/products/img.svg b/demo/01-trov-vocab/products/img.svg new file mode 100644 index 0000000..f08ab3f --- /dev/null +++ b/demo/01-trov-vocab/products/img.svg @@ -0,0 +1,188 @@ + + + + + + +subclass_vocab_graph + +Subclass Vocab Graph + + +ArtifactComposition + +ArtifactComposition + + + +ArtifactCollection + +ArtifactCollection + + + +ArtifactComposition->ArtifactCollection + + + + + +ArtifactLocus + +ArtifactLocus + + + +ArtifactLocus->ArtifactCollection + + + + + +TROAttribute + +TROAttribute + + + +TREAttribute + +TREAttribute + + + +TROAttribute->TREAttribute + + + + + +TRSAttribute + +TRSAttribute + + + +TRSAttribute->TREAttribute + + + + + +IncludesAllInputData + +IncludesAllInputData + + + +IncludesAllInputData->TROAttribute + + + + + +TRSCapability + +TRSCapability + + + +TRSCapability->TRSAttribute + + + + + +CanProvideInternetIsolation + +CanProvideInternetIsolation + + + +CanProvideInternetIsolation->TRSCapability + + + + + +TRSPolicy + +TRSPolicy + + + +TRSPolicy->TRSCapability + + + + + +EnforcesInternetIsolation + +EnforcesInternetIsolation + + + +EnforcesInternetIsolation->TRSPolicy + + + + + +TimeStampingAuthority + +TimeStampingAuthority + + + +TrustedResearchElement + +TrustedResearchElement + + + +TimeStampingAuthority->TrustedResearchElement + + + + + +TransparentResearchObject + +TransparentResearchObject + + + +TransparentResearchObject->TrustedResearchElement + + + + + +TrustedResearchPerformance + +TrustedResearchPerformance + + + +TrustedResearchPerformance->TrustedResearchElement + + + + + +TrustedResearchSystem + +TrustedResearchSystem + + + +TrustedResearchSystem->TrustedResearchElement + + + + + diff --git a/demo/01-trov-examples/02-three-artifacts-one-trp/products/report_subclass.html b/demo/01-trov-vocab/products/report_subclass.html similarity index 70% rename from demo/01-trov-examples/02-three-artifacts-one-trp/products/report_subclass.html rename to demo/01-trov-vocab/products/report_subclass.html index abb0246..170136f 100644 --- a/demo/01-trov-examples/02-three-artifacts-one-trp/products/report_subclass.html +++ b/demo/01-trov-vocab/products/report_subclass.html @@ -25,19 +25,19 @@

2. GV

label="Subclass Vocab Graph" node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] - "ArtifactCollection" -> "ArtifactComposition" - "ArtifactCollection" -> "ArtifactLocus" - "TREAttribute" -> "TROAttribute" - "TREAttribute" -> "TRSAttribute" - "TROAttribute" -> "IncludesAllInputData" - "TRSAttribute" -> "TRSCapability" - "TRSCapability" -> "CanProvideInternetIsolation" - "TRSCapability" -> "TRSPolicy" - "TRSPolicy" -> "EnforcesInternetIsolation" - "TrustedResearchElement" -> "TimeStampingAuthority" - "TrustedResearchElement" -> "TransparentResearchObject" - "TrustedResearchElement" -> "TrustedResearchPerformance" - "TrustedResearchElement" -> "TrustedResearchSystem" + "ArtifactComposition" -> "ArtifactCollection" + "ArtifactLocus" -> "ArtifactCollection" + "TROAttribute" -> "TREAttribute" + "TRSAttribute" -> "TREAttribute" + "IncludesAllInputData" -> "TROAttribute" + "TRSCapability" -> "TRSAttribute" + "CanProvideInternetIsolation" -> "TRSCapability" + "TRSPolicy" -> "TRSCapability" + "EnforcesInternetIsolation" -> "TRSPolicy" + "TimeStampingAuthority" -> "TrustedResearchElement" + "TransparentResearchObject" -> "TrustedResearchElement" + "TrustedResearchPerformance" -> "TrustedResearchElement" + "TrustedResearchSystem" -> "TrustedResearchElement" }

3. Table

diff --git a/demo/01-trov-examples/common/query-tro.sh b/demo/01-trov-vocab/run.sh similarity index 50% rename from demo/01-trov-examples/common/query-tro.sh rename to demo/01-trov-vocab/run.sh index db8c39d..8d2a08a 100644 --- a/demo/01-trov-examples/common/query-tro.sh +++ b/demo/01-trov-vocab/run.sh @@ -1,89 +1,16 @@ - +#!/usr/bin/env bash TRACE_VOCAB=$REPRO_MNT/exports/trace-vocab.jsonld -TRO_DECLARATION=tro/tro.jsonld -TRS_CERTIFICATE=trs/trs.jsonld -GEIST_TEMPLATES=../common/templates.geist - -# ------------------------------------------------------------------------------ - -bash_cell 'import trov vocabulary' << END_CELL - -# Destroy the dataset -geist destroy --dataset kb --quiet - -# Import TRACE vocabulary and TRO Manifest and export as N-TRIPLES -geist create --dataset kb --inputformat json-ld --inputfile ${TRACE_VOCAB} --infer owl - -# Import TRO and TRS as JSON-LD and export as N-TRIPLES -geist export --dataset kb --outputformat nt | sort | grep trov - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'import tro declaration' << END_CELL - -# Import TRACE vocabulary and TRO Manifest and export as N-TRIPLES -geist load --dataset kb --inputformat json-ld --inputfile ${TRO_DECLARATION} - -# Import TRO and TRS as JSON-LD and export as N-TRIPLES -geist export --dataset kb --outputformat nt | sort | grep trov-example - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'query tro attributes' << END_CELL - -# What subclasses of TROAttribute have been defined? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdfs: - PREFIX trov: - - SELECT DISTINCT ?attribute ?attributeLabel ?attributeComment - WHERE { - ?attribute rdfs:subClassOf trov:TROAttribute . - ?attribute rdfs:label ?attributeLabel . - ?attribute rdfs:comment ?attributeComment . - } ORDER BY ?attribute ?attributeLabel ?attributeComment - -__END_QUERY__ - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'query trs attributes' << END_CELL - -# What subclasses of TRSAttribute have been defined? - -geist query --dataset kb << __END_QUERY__ - - PREFIX rdfs: - PREFIX trov: - - SELECT DISTINCT ?attribute ?attributeLabel ?attributeComment - WHERE { - ?attribute rdfs:subClassOf trov:TRSAttribute . - ?attribute rdfs:label ?attributeLabel . - ?attribute rdfs:comment ?attributeComment . - } ORDER BY ?attribute ?attributeLabel ?attributeComment - -__END_QUERY__ - -END_CELL +GEIST_TEMPLATES=templates.geist # ------------------------------------------------------------------------------ bash_cell 'reload trov vocabulary without inferences' << END_CELL # Destroy the dataset -geist destroy --dataset kb +geist destroy --dataset kb --quiet -# Import TRACE vocabulary and TRO Manifest and export as N-TRIPLES +# Import TRACE vocabulary and export as N-TRIPLES geist create --dataset kb --inputformat json-ld --inputfile ${TRACE_VOCAB} --infer none END_CELL @@ -128,7 +55,7 @@ geist report --outputroot products << END_TEMPLATE node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] {% for _, row in query_subclass_vocab.iterrows() %} - {% gv_edge row["ParentLabel"], row["ChildLabel"] %} + {% gv_edge row["ChildLabel"], row["ParentLabel"] %} {% endfor %} {% gv_end %} @@ -141,7 +68,7 @@ geist report --outputroot products << END_TEMPLATE node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] {% for _, row in query_subclass_vocab.iterrows() %} - {% gv_edge row["ParentLabel"], row["ChildLabel"] %} + {% gv_edge row["ChildLabel"], row["ParentLabel"] %} {% endfor %} {% gv_end %} @@ -160,3 +87,4 @@ END_TEMPLATE END_CELL # ------------------------------------------------------------------------------ + diff --git a/demo/01-trov-vocab/run.txt b/demo/01-trov-vocab/run.txt new file mode 100644 index 0000000..b83d200 --- /dev/null +++ b/demo/01-trov-vocab/run.txt @@ -0,0 +1,145 @@ +====================================== bash cell | reload trov vocabulary without inferences ======================================= + +# Destroy the dataset +geist destroy --dataset kb --quiet + +# Import TRACE vocabulary and export as N-TRIPLES +geist create --dataset kb --inputformat json-ld --inputfile /mnt/trace-model/exports/trace-vocab.jsonld --infer none + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +================================================= bash cell | query subclass vocab ================================================= + +# What (ParentClass, ChildClass) pairs does trov vocabulary have? + +geist report --outputroot products << END_TEMPLATE + +{%- use "templates.geist" %} +{%- query isfilepath=False as query_subclass_vocab_str %} + PREFIX rdf: + PREFIX rdfs: + + SELECT DISTINCT ?ParentLabel ?ChildLabel + WHERE { + ?ParentClass rdf:type rdfs:Class ; + rdfs:label ?ParentLabel . + + ?ChildClass rdfs:subClassOf ?ParentClass ; + rdf:type rdfs:Class ; + rdfs:label ?ChildLabel . + + FILTER (?ParentLabel != ?ChildLabel) + } + ORDER BY ?ParentLabel ?ChildLabel +{% endquery %} +{%- set query_subclass_vocab = query_subclass_vocab_str | json2df %} + +{%- html "report_subclass.html" %} +{%- head "Subclass Report" %} + +

Visualize subclass of the vocabularies

+

1. SVG

+ {% img src="img.svg", width="80%" %} + {%- gv_graph "subclass_vocab_graph", "LR" %} + {%- gv_title "Subclass Vocab Graph" %} + + node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] + {% for _, row in query_subclass_vocab.iterrows() %} + {% gv_edge row["ChildLabel"], row["ParentLabel"] %} + {% endfor %} + + {% gv_end %} + {% endimg %} + +

2. GV

+ {% img src="img.gv" %} + {%- gv_graph "subclass_vocab_graph", "LR" %} + {%- gv_title "Subclass Vocab Graph" %} + + node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] + {% for _, row in query_subclass_vocab.iterrows() %} + {% gv_edge row["ChildLabel"], row["ParentLabel"] %} + {% endfor %} + + {% gv_end %} + {% endimg %} + +

3. Table

+ {%- table %} + {{ query_subclass_vocab_str }} + {% endtable %} + +{% endhtml %} +{%- destroy %} + +END_TEMPLATE + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- + + + + + + + + + Subclass Report + +

Visualize subclass of the vocabularies

+

1. SVG

+ +

2. GV

+

+    digraph subclass_vocab_graph {
+    rankdir=LR
+    fontname=Courier; fontsize=12; labelloc=t
+    label="Subclass Vocab Graph"
+            node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier]
+                            
+    "ArtifactComposition" -> "ArtifactCollection"                            
+    "ArtifactLocus" -> "ArtifactCollection"                            
+    "TROAttribute" -> "TREAttribute"                            
+    "TRSAttribute" -> "TREAttribute"                            
+    "IncludesAllInputData" -> "TROAttribute"                            
+    "TRSCapability" -> "TRSAttribute"                            
+    "CanProvideInternetIsolation" -> "TRSCapability"                            
+    "TRSPolicy" -> "TRSCapability"                            
+    "EnforcesInternetIsolation" -> "TRSPolicy"                            
+    "TimeStampingAuthority" -> "TrustedResearchElement"                            
+    "TransparentResearchObject" -> "TrustedResearchElement"                            
+    "TrustedResearchPerformance" -> "TrustedResearchElement"                            
+    "TrustedResearchSystem" -> "TrustedResearchElement"            
+            
+    }        
+

3. Table

+ + + + + + + + + + + + + + + + +
ParentLabelChildLabel
"ArtifactCollection""ArtifactComposition"
"ArtifactCollection""ArtifactLocus"
"TREAttribute""TROAttribute"
"TREAttribute""TRSAttribute"
"TROAttribute""IncludesAllInputData"
"TRSAttribute""TRSCapability"
"TRSCapability""CanProvideInternetIsolation"
"TRSCapability""TRSPolicy"
"TRSPolicy""EnforcesInternetIsolation"
"TrustedResearchElement""TimeStampingAuthority"
"TrustedResearchElement""TransparentResearchObject"
"TrustedResearchElement""TrustedResearchPerformance"
"TrustedResearchElement""TrustedResearchSystem"
+ + + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + diff --git a/demo/01-trov-examples/common/templates.geist b/demo/01-trov-vocab/templates.geist similarity index 100% rename from demo/01-trov-examples/common/templates.geist rename to demo/01-trov-vocab/templates.geist diff --git a/demo/02-explorations/04-timestamp/products/digest.yaml b/demo/02-explorations/04-timestamp/products/digest.yaml deleted file mode 100644 index 31c1240..0000000 --- a/demo/02-explorations/04-timestamp/products/digest.yaml +++ /dev/null @@ -1,2 +0,0 @@ -tro-declaration: 71fd13607e8cea0a883ebad45037044d4909fb21959ec30c6687dcf86d077cf8 -trs-signature": 9fb5dd0a2b9afdf4071b43558848a70101c91d3b1eab61f6a369740c36c2ea8d diff --git a/demo/02-explorations/04-timestamp/products/file.tsq b/demo/02-explorations/04-timestamp/products/file.tsq deleted file mode 100644 index 5807c83c52342b7fcc9e6ecbfd59fa39a7fb4d5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91 zcmV-h0HpsgSpoq8Fi|iK1_@w>NC9O71OfvE00cmYS9-sxIJ@h0B*kv9IUj%h<(0t+ xx2+l+p?e8{GIuLisp@NedKp;^h)6L|)T+&($JUx8y;W)du5w9_iE>2&0sm#VBc1>N diff --git a/demo/01-trov-examples/02-three-artifacts-one-trp/Makefile b/demo/02-tro-examples/01-two-artifacts-no-trp/Makefile similarity index 100% rename from demo/01-trov-examples/02-three-artifacts-one-trp/Makefile rename to demo/02-tro-examples/01-two-artifacts-no-trp/Makefile diff --git a/demo/01-trov-examples/01-two-artifacts-no-trp/run.sh b/demo/02-tro-examples/01-two-artifacts-no-trp/run.sh similarity index 100% rename from demo/01-trov-examples/01-two-artifacts-no-trp/run.sh rename to demo/02-tro-examples/01-two-artifacts-no-trp/run.sh diff --git a/demo/01-trov-examples/02-three-artifacts-one-trp/run.txt b/demo/02-tro-examples/01-two-artifacts-no-trp/run.txt similarity index 50% rename from demo/01-trov-examples/02-three-artifacts-one-trp/run.txt rename to demo/02-tro-examples/01-two-artifacts-no-trp/run.txt index 58bc476..fc7ab3a 100644 --- a/demo/01-trov-examples/02-three-artifacts-one-trp/run.txt +++ b/demo/02-tro-examples/01-two-artifacts-no-trp/run.txt @@ -187,88 +187,6 @@ geist load --dataset kb --inputformat json-ld --inputfile tro/tro.jsonld geist export --dataset kb --outputformat nt | sort | grep trov-example ----------------------------------------------------------- cell outputs ----------------------------------------------------------- - . - . - . - "file1" . - . - . - . - "file2" . - . - "Initial arrangement" . - . - . - . - . - . - . - "file2" . - . - . - . - "file3" . - . - "Final arrangement" . - . - . - . - . - . - "text/plain" . - "b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c" . - . - . - "text/plain" . - "7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730" . - . - . - "text/plain" . - "7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730" . - . - . - . - . - . - . - . - . - "218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc" . - . - . - . - . - "A composition of two files in a single arrangement endorsed by a TRS that enforced Interent isolation" . - . - . - . - . - . - . - . - . - . - . - . - . - "Workflow execution" . - . - . - "2023-05-05T01:40:00Z" . - . - . - "2023-05-05T01:30:00Z" . - . - . - . - . - "TRS that can provide Internet isolation" . - . - . - "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n" . - . - . - "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n" . ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -315,6 +233,9 @@ geist query --dataset kb << __END_QUERY__ __END_QUERY__ +# Destroy the dataset +geist destroy --dataset kb + ----------------------------------------------------------- cell outputs ----------------------------------------------------------- | | attribute | attributeLabel | attributeComment | |---:|:------------------------------------------------------------------|:------------------------------|:----------------------------------------------------------------| @@ -325,148 +246,3 @@ __END_QUERY__ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -====================================== bash cell | reload trov vocabulary without inferences ======================================= - -# Destroy the dataset -geist destroy --dataset kb - -# Import TRACE vocabulary and TRO Manifest and export as N-TRIPLES -geist create --dataset kb --inputformat json-ld --inputfile /mnt/trace-model/exports/trace-vocab.jsonld --infer none - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -================================================= bash cell | query subclass vocab ================================================= - -# What (ParentClass, ChildClass) pairs does trov vocabulary have? - -geist report --outputroot products << END_TEMPLATE - -{%- use "../common/templates.geist" %} -{%- query isfilepath=False as query_subclass_vocab_str %} - PREFIX rdf: - PREFIX rdfs: - - SELECT DISTINCT ?ParentLabel ?ChildLabel - WHERE { - ?ParentClass rdf:type rdfs:Class ; - rdfs:label ?ParentLabel . - - ?ChildClass rdfs:subClassOf ?ParentClass ; - rdf:type rdfs:Class ; - rdfs:label ?ChildLabel . - - FILTER (?ParentLabel != ?ChildLabel) - } - ORDER BY ?ParentLabel ?ChildLabel -{% endquery %} -{%- set query_subclass_vocab = query_subclass_vocab_str | json2df %} - -{%- html "report_subclass.html" %} -{%- head "Subclass Report" %} - -

Visualize subclass of the vocabularies

-

1. SVG

- {% img src="img.svg", width="80%" %} - {%- gv_graph "subclass_vocab_graph", "LR" %} - {%- gv_title "Subclass Vocab Graph" %} - - node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] - {% for _, row in query_subclass_vocab.iterrows() %} - {% gv_edge row["ParentLabel"], row["ChildLabel"] %} - {% endfor %} - - {% gv_end %} - {% endimg %} - -

2. GV

- {% img src="img.gv" %} - {%- gv_graph "subclass_vocab_graph", "LR" %} - {%- gv_title "Subclass Vocab Graph" %} - - node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] - {% for _, row in query_subclass_vocab.iterrows() %} - {% gv_edge row["ParentLabel"], row["ChildLabel"] %} - {% endfor %} - - {% gv_end %} - {% endimg %} - -

3. Table

- {%- table %} - {{ query_subclass_vocab_str }} - {% endtable %} - -{% endhtml %} -{%- destroy %} - -END_TEMPLATE - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- - - - - - - - - - Subclass Report - -

Visualize subclass of the vocabularies

-

1. SVG

- -

2. GV

-

-    digraph subclass_vocab_graph {
-    rankdir=LR
-    fontname=Courier; fontsize=12; labelloc=t
-    label="Subclass Vocab Graph"
-            node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier]
-                            
-    "ArtifactCollection" -> "ArtifactComposition"                            
-    "ArtifactCollection" -> "ArtifactLocus"                            
-    "TREAttribute" -> "TROAttribute"                            
-    "TREAttribute" -> "TRSAttribute"                            
-    "TROAttribute" -> "IncludesAllInputData"                            
-    "TRSAttribute" -> "TRSCapability"                            
-    "TRSCapability" -> "CanProvideInternetIsolation"                            
-    "TRSCapability" -> "TRSPolicy"                            
-    "TRSPolicy" -> "EnforcesInternetIsolation"                            
-    "TrustedResearchElement" -> "TimeStampingAuthority"                            
-    "TrustedResearchElement" -> "TransparentResearchObject"                            
-    "TrustedResearchElement" -> "TrustedResearchPerformance"                            
-    "TrustedResearchElement" -> "TrustedResearchSystem"            
-            
-    }        
-

3. Table

- - - - - - - - - - - - - - - - -
ParentLabelChildLabel
"ArtifactCollection""ArtifactComposition"
"ArtifactCollection""ArtifactLocus"
"TREAttribute""TROAttribute"
"TREAttribute""TRSAttribute"
"TROAttribute""IncludesAllInputData"
"TRSAttribute""TRSCapability"
"TRSCapability""CanProvideInternetIsolation"
"TRSCapability""TRSPolicy"
"TRSPolicy""EnforcesInternetIsolation"
"TrustedResearchElement""TimeStampingAuthority"
"TrustedResearchElement""TransparentResearchObject"
"TrustedResearchElement""TrustedResearchPerformance"
"TrustedResearchElement""TrustedResearchSystem"
- - - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - diff --git a/demo/01-trov-examples/01-two-artifacts-no-trp/tro/file1 b/demo/02-tro-examples/01-two-artifacts-no-trp/tro/file1 similarity index 100% rename from demo/01-trov-examples/01-two-artifacts-no-trp/tro/file1 rename to demo/02-tro-examples/01-two-artifacts-no-trp/tro/file1 diff --git a/demo/01-trov-examples/01-two-artifacts-no-trp/tro/file2 b/demo/02-tro-examples/01-two-artifacts-no-trp/tro/file2 similarity index 100% rename from demo/01-trov-examples/01-two-artifacts-no-trp/tro/file2 rename to demo/02-tro-examples/01-two-artifacts-no-trp/tro/file2 diff --git a/demo/01-trov-examples/01-two-artifacts-no-trp/tro/tro.jsonld b/demo/02-tro-examples/01-two-artifacts-no-trp/tro/tro.jsonld similarity index 98% rename from demo/01-trov-examples/01-two-artifacts-no-trp/tro/tro.jsonld rename to demo/02-tro-examples/01-two-artifacts-no-trp/tro/tro.jsonld index fda2e4f..67b1e1a 100644 --- a/demo/01-trov-examples/01-two-artifacts-no-trp/tro/tro.jsonld +++ b/demo/02-tro-examples/01-two-artifacts-no-trp/tro/tro.jsonld @@ -3,7 +3,7 @@ "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdfs": "http://www.w3.org/2000/01/rdf-schema#", "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" + "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/02-tro-examples/01-two-artifacts-no-trp/" }], "@graph": [ diff --git a/demo/01-trov-examples/01-two-artifacts-no-trp/trs/private.asc b/demo/02-tro-examples/01-two-artifacts-no-trp/trs/private.asc similarity index 100% rename from demo/01-trov-examples/01-two-artifacts-no-trp/trs/private.asc rename to demo/02-tro-examples/01-two-artifacts-no-trp/trs/private.asc diff --git a/demo/01-trov-examples/01-two-artifacts-no-trp/trs/public.gpg b/demo/02-tro-examples/01-two-artifacts-no-trp/trs/public.gpg similarity index 100% rename from demo/01-trov-examples/01-two-artifacts-no-trp/trs/public.gpg rename to demo/02-tro-examples/01-two-artifacts-no-trp/trs/public.gpg diff --git a/demo/01-trov-examples/01-two-artifacts-no-trp/trs/trs.jsonld b/demo/02-tro-examples/01-two-artifacts-no-trp/trs/trs.jsonld similarity index 93% rename from demo/01-trov-examples/01-two-artifacts-no-trp/trs/trs.jsonld rename to demo/02-tro-examples/01-two-artifacts-no-trp/trs/trs.jsonld index 3a036ee..099ee02 100644 --- a/demo/01-trov-examples/01-two-artifacts-no-trp/trs/trs.jsonld +++ b/demo/02-tro-examples/01-two-artifacts-no-trp/trs/trs.jsonld @@ -3,7 +3,7 @@ "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdfs": "http://www.w3.org/2000/01/rdf-schema#", "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" + "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/02-tro-examples/01-two-artifacts-no-trp/" }], "@graph": [{ diff --git a/demo/01-trov-examples/03-skope-lbda-processing/Makefile b/demo/02-tro-examples/02-three-artifacts-one-trp/Makefile similarity index 100% rename from demo/01-trov-examples/03-skope-lbda-processing/Makefile rename to demo/02-tro-examples/02-three-artifacts-one-trp/Makefile diff --git a/demo/01-trov-examples/02-three-artifacts-one-trp/run.sh b/demo/02-tro-examples/02-three-artifacts-one-trp/run.sh similarity index 100% rename from demo/01-trov-examples/02-three-artifacts-one-trp/run.sh rename to demo/02-tro-examples/02-three-artifacts-one-trp/run.sh diff --git a/demo/02-tro-examples/02-three-artifacts-one-trp/run.txt b/demo/02-tro-examples/02-three-artifacts-one-trp/run.txt new file mode 100644 index 0000000..fc7ab3a --- /dev/null +++ b/demo/02-tro-examples/02-three-artifacts-one-trp/run.txt @@ -0,0 +1,248 @@ +================================================ bash cell | import trov vocabulary ================================================ + +# Destroy the dataset +geist destroy --dataset kb --quiet + +# Import TRACE vocabulary and TRO Manifest and export as N-TRIPLES +geist create --dataset kb --inputformat json-ld --inputfile /mnt/trace-model/exports/trace-vocab.jsonld --infer owl + +# Import TRO and TRS as JSON-LD and export as N-TRIPLES +geist export --dataset kb --outputformat nt | sort | grep trov + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- + . + "A set of loci describing the location of one or more artifacts" . + "ArtifactArrangement" . + . + . + "Base class for collections of one or more artifacts." . + "ArtifactCollection" . + . + . + "A set of artifacts described by a TRO." . + "ArtifactComposition" . + . + . + . + "The location of a specific artifact." . + "ArtifactLocus" . + . + . + . + "The capability to prevent Internet access during a TRP." . + "CanProvideInternetIsolation" . + . + . + . + . + . + "Unique fingerprint of a particular artifact composition" . + "CompositionFingerprint" . + . + . + "The policy of always preventing Internet access during a TRP." . + "EnforcesInternetIsolation" . + . + . + . + . + . + . + "TRO composition includes all input data employed in creating the TRO." . + "IncludesAllInputData" . + . + . + . + . + "A research artifact described by a TRO." . + "ResearchArtifact" . + . + . + "An attribute of a TRS, TRP, or TRO." . + "TREAttribute" . + . + . + "An attribute of a particular TRO." . + "TROAttribute" . + . + . + . + "An attribute of a TRS." . + "TRSAttribute" . + . + . + . + "A capability of a TRS." . + "TRSCapability" . + . + . + . + . + "A policy always enforced by a particular TRS." . + "TRSPolicy" . + . + . + . + . + . + "A timestamping authority trusted by a TRS." . + "TimeStampingAuthority" . + . + . + . + "A set of research artifacts produced by a TRP and signed by the performing TRS." . + "TransparentResearchObject" . + . + . + . + "Common base class for TRSs, TRPs, and TROs." . + "TrustedResearchElement" . + . + . + "A set of research operations performed by a TRS." . + "An execution of a research process" . + "TrustedResearchPerformance" . + . + . + . + "A system certified to perform TRPs and assemble TROs." . + "TrustedResearchSystem" . + . + . + . + . + . + "hasArrangement" . + . + . + . + . + . + . + "hasArtifact" . + . + . + . + . + . + . + . + "hasComposition" . + . + . + . + . + . + . + . + . + "hasFingerprint" . + . + . + . + . + . + . + . + "hasLocus" . + . + . + . + . + . + . + "hasLocus" . + . + . + . + . + . + . + . + . + "wasAssembledBy" . + . + . + . + . + . + . + . + . + "wasTimestampedBy" . + . + . + . + . + . +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +================================================ bash cell | import tro declaration ================================================ + +# Import TRACE vocabulary and TRO Manifest and export as N-TRIPLES +geist load --dataset kb --inputformat json-ld --inputfile tro/tro.jsonld + +# Import TRO and TRS as JSON-LD and export as N-TRIPLES +geist export --dataset kb --outputformat nt | sort | grep trov-example + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +================================================= bash cell | query tro attributes ================================================= + +# What subclasses of TROAttribute have been defined? + +geist query --dataset kb << __END_QUERY__ + + PREFIX rdfs: + PREFIX trov: + + SELECT DISTINCT ?attribute ?attributeLabel ?attributeComment + WHERE { + ?attribute rdfs:subClassOf trov:TROAttribute . + ?attribute rdfs:label ?attributeLabel . + ?attribute rdfs:comment ?attributeComment . + } ORDER BY ?attribute ?attributeLabel ?attributeComment + +__END_QUERY__ + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- +| | attribute | attributeLabel | attributeComment | +|---:|:-----------------------------------------------------------|:-----------------------|:------------------------------------------------------------------------| +| 0 | | "IncludesAllInputData" | "TRO composition includes all input data employed in creating the TRO." | +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +================================================= bash cell | query trs attributes ================================================= + +# What subclasses of TRSAttribute have been defined? + +geist query --dataset kb << __END_QUERY__ + + PREFIX rdfs: + PREFIX trov: + + SELECT DISTINCT ?attribute ?attributeLabel ?attributeComment + WHERE { + ?attribute rdfs:subClassOf trov:TRSAttribute . + ?attribute rdfs:label ?attributeLabel . + ?attribute rdfs:comment ?attributeComment . + } ORDER BY ?attribute ?attributeLabel ?attributeComment + +__END_QUERY__ + +# Destroy the dataset +geist destroy --dataset kb + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- +| | attribute | attributeLabel | attributeComment | +|---:|:------------------------------------------------------------------|:------------------------------|:----------------------------------------------------------------| +| 0 | | "CanProvideInternetIsolation" | "The capability to prevent Internet access during a TRP." | +| 1 | | "EnforcesInternetIsolation" | "The policy of always preventing Internet access during a TRP." | +| 2 | | "TRSCapability" | "A capability of a TRS." | +| 3 | | "TRSPolicy" | "A policy always enforced by a particular TRS." | +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + diff --git a/demo/01-trov-examples/02-three-artifacts-one-trp/tro/file1 b/demo/02-tro-examples/02-three-artifacts-one-trp/tro/file1 similarity index 100% rename from demo/01-trov-examples/02-three-artifacts-one-trp/tro/file1 rename to demo/02-tro-examples/02-three-artifacts-one-trp/tro/file1 diff --git a/demo/01-trov-examples/02-three-artifacts-one-trp/tro/file2 b/demo/02-tro-examples/02-three-artifacts-one-trp/tro/file2 similarity index 100% rename from demo/01-trov-examples/02-three-artifacts-one-trp/tro/file2 rename to demo/02-tro-examples/02-three-artifacts-one-trp/tro/file2 diff --git a/demo/01-trov-examples/02-three-artifacts-one-trp/tro/file3 b/demo/02-tro-examples/02-three-artifacts-one-trp/tro/file3 similarity index 100% rename from demo/01-trov-examples/02-three-artifacts-one-trp/tro/file3 rename to demo/02-tro-examples/02-three-artifacts-one-trp/tro/file3 diff --git a/demo/01-trov-examples/02-three-artifacts-one-trp/tro/tro.jsonld b/demo/02-tro-examples/02-three-artifacts-one-trp/tro/tro.jsonld similarity index 98% rename from demo/01-trov-examples/02-three-artifacts-one-trp/tro/tro.jsonld rename to demo/02-tro-examples/02-three-artifacts-one-trp/tro/tro.jsonld index a0572ce..c880395 100644 --- a/demo/01-trov-examples/02-three-artifacts-one-trp/tro/tro.jsonld +++ b/demo/02-tro-examples/02-three-artifacts-one-trp/tro/tro.jsonld @@ -3,7 +3,7 @@ "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdfs": "http://www.w3.org/2000/01/rdf-schema#", "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/01-trov-examples/02-three-artifacts-one-trp/" + "@base": "https://github.com/transparency-certified/trace-model/tree/master/02-tro-examples/02-three-artifacts-one-trp/" }], "@graph": [ diff --git a/demo/01-trov-examples/02-three-artifacts-one-trp/trs/private.asc b/demo/02-tro-examples/02-three-artifacts-one-trp/trs/private.asc similarity index 100% rename from demo/01-trov-examples/02-three-artifacts-one-trp/trs/private.asc rename to demo/02-tro-examples/02-three-artifacts-one-trp/trs/private.asc diff --git a/demo/01-trov-examples/02-three-artifacts-one-trp/trs/public.gpg b/demo/02-tro-examples/02-three-artifacts-one-trp/trs/public.gpg similarity index 100% rename from demo/01-trov-examples/02-three-artifacts-one-trp/trs/public.gpg rename to demo/02-tro-examples/02-three-artifacts-one-trp/trs/public.gpg diff --git a/demo/01-trov-examples/02-three-artifacts-one-trp/trs/trs.jsonld b/demo/02-tro-examples/02-three-artifacts-one-trp/trs/trs.jsonld similarity index 94% rename from demo/01-trov-examples/02-three-artifacts-one-trp/trs/trs.jsonld rename to demo/02-tro-examples/02-three-artifacts-one-trp/trs/trs.jsonld index 200c1f4..b871bf1 100644 --- a/demo/01-trov-examples/02-three-artifacts-one-trp/trs/trs.jsonld +++ b/demo/02-tro-examples/02-three-artifacts-one-trp/trs/trs.jsonld @@ -3,7 +3,7 @@ "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdfs": "http://www.w3.org/2000/01/rdf-schema#", "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/01-trov-examples/02-three-artifacts-one-trp/" + "@base": "https://github.com/transparency-certified/trace-model/tree/master/02-tro-examples/02-three-artifacts-one-trp/" }], "@graph": [{ diff --git a/demo/01-trov-examples/Makefile b/demo/02-tro-examples/03-skope-lbda-processing/Makefile similarity index 100% rename from demo/01-trov-examples/Makefile rename to demo/02-tro-examples/03-skope-lbda-processing/Makefile diff --git a/demo/01-trov-examples/03-skope-lbda-processing/mappings.json b/demo/02-tro-examples/03-skope-lbda-processing/mappings.json similarity index 85% rename from demo/01-trov-examples/03-skope-lbda-processing/mappings.json rename to demo/02-tro-examples/03-skope-lbda-processing/mappings.json index c67ee75..ff9976e 100644 --- a/demo/01-trov-examples/03-skope-lbda-processing/mappings.json +++ b/demo/02-tro-examples/03-skope-lbda-processing/mappings.json @@ -2,5 +2,5 @@ "http://www.w3.org/1999/02/22-rdf-syntax-ns#": "rdf:", "http://www.w3.org/2000/01/rdf-schema#": "rdfs:", "https://w3id.org/trace/2023/05/trov#": "trov:", - "https://github.com/transparency-certified/trace-model/tree/master/01-trov-examples/03-skope-/": "" + "https://github.com/transparency-certified/trace-model/tree/master/02-tro-examples/03-skope-/": "" } \ No newline at end of file diff --git a/demo/01-trov-examples/03-skope-lbda-processing/report_file/arrangement.svg b/demo/02-tro-examples/03-skope-lbda-processing/report_file/arrangement.svg similarity index 100% rename from demo/01-trov-examples/03-skope-lbda-processing/report_file/arrangement.svg rename to demo/02-tro-examples/03-skope-lbda-processing/report_file/arrangement.svg diff --git a/demo/01-trov-examples/03-skope-lbda-processing/report_file/overall_tro_graph.html b/demo/02-tro-examples/03-skope-lbda-processing/report_file/overall_tro_graph.html similarity index 100% rename from demo/01-trov-examples/03-skope-lbda-processing/report_file/overall_tro_graph.html rename to demo/02-tro-examples/03-skope-lbda-processing/report_file/overall_tro_graph.html diff --git a/demo/01-trov-examples/03-skope-lbda-processing/report_file/report.html b/demo/02-tro-examples/03-skope-lbda-processing/report_file/report.html similarity index 100% rename from demo/01-trov-examples/03-skope-lbda-processing/report_file/report.html rename to demo/02-tro-examples/03-skope-lbda-processing/report_file/report.html diff --git a/demo/01-trov-examples/03-skope-lbda-processing/report_file/tro.svg b/demo/02-tro-examples/03-skope-lbda-processing/report_file/tro.svg similarity index 100% rename from demo/01-trov-examples/03-skope-lbda-processing/report_file/tro.svg rename to demo/02-tro-examples/03-skope-lbda-processing/report_file/tro.svg diff --git a/demo/01-trov-examples/03-skope-lbda-processing/report_file/trp.svg b/demo/02-tro-examples/03-skope-lbda-processing/report_file/trp.svg similarity index 100% rename from demo/01-trov-examples/03-skope-lbda-processing/report_file/trp.svg rename to demo/02-tro-examples/03-skope-lbda-processing/report_file/trp.svg diff --git a/demo/01-trov-examples/03-skope-lbda-processing/report_inline/arrangement.svg b/demo/02-tro-examples/03-skope-lbda-processing/report_inline/arrangement.svg similarity index 100% rename from demo/01-trov-examples/03-skope-lbda-processing/report_inline/arrangement.svg rename to demo/02-tro-examples/03-skope-lbda-processing/report_inline/arrangement.svg diff --git a/demo/01-trov-examples/03-skope-lbda-processing/report_inline/overall_tro_graph.html b/demo/02-tro-examples/03-skope-lbda-processing/report_inline/overall_tro_graph.html similarity index 100% rename from demo/01-trov-examples/03-skope-lbda-processing/report_inline/overall_tro_graph.html rename to demo/02-tro-examples/03-skope-lbda-processing/report_inline/overall_tro_graph.html diff --git a/demo/01-trov-examples/03-skope-lbda-processing/report_inline/report.html b/demo/02-tro-examples/03-skope-lbda-processing/report_inline/report.html similarity index 100% rename from demo/01-trov-examples/03-skope-lbda-processing/report_inline/report.html rename to demo/02-tro-examples/03-skope-lbda-processing/report_inline/report.html diff --git a/demo/01-trov-examples/03-skope-lbda-processing/report_inline/tro.svg b/demo/02-tro-examples/03-skope-lbda-processing/report_inline/tro.svg similarity index 100% rename from demo/01-trov-examples/03-skope-lbda-processing/report_inline/tro.svg rename to demo/02-tro-examples/03-skope-lbda-processing/report_inline/tro.svg diff --git a/demo/01-trov-examples/03-skope-lbda-processing/report_inline/trp.svg b/demo/02-tro-examples/03-skope-lbda-processing/report_inline/trp.svg similarity index 100% rename from demo/01-trov-examples/03-skope-lbda-processing/report_inline/trp.svg rename to demo/02-tro-examples/03-skope-lbda-processing/report_inline/trp.svg diff --git a/demo/01-trov-examples/03-skope-lbda-processing/run.sh b/demo/02-tro-examples/03-skope-lbda-processing/run.sh similarity index 100% rename from demo/01-trov-examples/03-skope-lbda-processing/run.sh rename to demo/02-tro-examples/03-skope-lbda-processing/run.sh diff --git a/demo/01-trov-examples/01-two-artifacts-no-trp/run.txt b/demo/02-tro-examples/03-skope-lbda-processing/run.txt similarity index 65% rename from demo/01-trov-examples/01-two-artifacts-no-trp/run.txt rename to demo/02-tro-examples/03-skope-lbda-processing/run.txt index 01b3fda..163fe31 100644 --- a/demo/01-trov-examples/01-two-artifacts-no-trp/run.txt +++ b/demo/02-tro-examples/03-skope-lbda-processing/run.txt @@ -187,48 +187,6 @@ geist load --dataset kb --inputformat json-ld --inputfile tro/tro.jsonld geist export --dataset kb --outputformat nt | sort | grep trov-example ----------------------------------------------------------- cell outputs ----------------------------------------------------------- - . - . - . - "file1" . - . - . - . - "file2" . - . - . - . - . - . - . - "text/plain" . - "b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c" . - . - . - "text/plain" . - "7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730" . - . - . - . - . - . - . - . - "218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc" . - . - "A composition of two files in a single arrangement endorsed by a TRS that enforces no policies" . - . - . - . - . - . - . - "TRS that enforces no policies" . - . - "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n" . - . - . - "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n" . ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -275,6 +233,9 @@ geist query --dataset kb << __END_QUERY__ __END_QUERY__ +# Destroy the dataset +geist destroy --dataset kb + ----------------------------------------------------------- cell outputs ----------------------------------------------------------- | | attribute | attributeLabel | attributeComment | |---:|:------------------------------------------------------------------|:------------------------------|:----------------------------------------------------------------| @@ -285,82 +246,80 @@ __END_QUERY__ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -====================================== bash cell | reload trov vocabulary without inferences ======================================= - -# Destroy the dataset -geist destroy --dataset kb - -# Import TRACE vocabulary and TRO Manifest and export as N-TRIPLES -geist create --dataset kb --inputformat json-ld --inputfile /mnt/trace-model/exports/trace-vocab.jsonld --infer none +================================================== bash cell | tro_report_inline =================================================== ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +geist report --outputroot report_inline << END_TEMPLATE +{%- use "templates.geist" %} +{%- create %} tro/tro.jsonld {% endcreate %} -================================================= bash cell | query subclass vocab ================================================= +{%- html "overall_tro_graph.html" %} +{%- head "Overall TRO Graph" %} -# What (ParentClass, ChildClass) pairs does trov vocabulary have? + +

Overall TRO Graph

+ {%- graph dataset="kb", rankdir="LR", mappings="mappings.json" as tro_graph %} + {% img src="tro.svg" %} {{ tro_graph }} {% endimg %} + -geist report --outputroot products << END_TEMPLATE +{% endhtml %} -{%- use "../common/templates.geist" %} -{%- query isfilepath=False as query_subclass_vocab_str %} - PREFIX rdf: - PREFIX rdfs: +{%- html "report.html" %} +{%- head "TRO Report" %} - SELECT DISTINCT ?ParentLabel ?ChildLabel - WHERE { - ?ParentClass rdf:type rdfs:Class ; - rdfs:label ?ParentLabel . - - ?ChildClass rdfs:subClassOf ?ParentClass ; - rdf:type rdfs:Class ; - rdfs:label ?ChildLabel . - - FILTER (?ParentLabel != ?ChildLabel) - } - ORDER BY ?ParentLabel ?ChildLabel -{% endquery %} -{%- set query_subclass_vocab = query_subclass_vocab_str | json2df %} - -{%- html "report_subclass.html" %} -{%- head "Subclass Report" %} -

Visualize subclass of the vocabularies

-

1. SVG

- {% img src="img.svg", width="80%" %} - {%- gv_graph "subclass_vocab_graph", "LR" %} - {%- gv_title "Subclass Vocab Graph" %} +

TRO Report

+

This report shows the TRO of downloading LBDA dataset from NOAA website and preparing for use by researchers employing the SKOPE application. +

1. The TRO was assembled by what TRS?

+ {%- table mappings="mappings.json" %} + {% query_tro_trs_str %} + {% endtable %} + +

2. What capabilities does the TRS have?

+ {%- table mappings="mappings.json" %} + {% query_trs_capability_str %} + {% endtable %} +

3. What TRPs does the TRO have? What arrangements are accessed and contributed to per TRP accordingly?

+ {% img src="trp.svg" %} + {%- gv_graph "trp", "LR" %} + nodesep=0.6 node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] - {% for _, row in query_subclass_vocab.iterrows() %} - {% gv_edge row["ParentLabel"], row["ChildLabel"] %} + {%- map isfilepath=False, mappings="mappings.json" as query_trp_shorten %} {% query_trp_str %} {% endmap %} + {%- set query_trp = query_trp_shorten | json2df %} + {% for _, row in query_trp.iterrows() %} + {% gv_labeled_edge row["in"], row["out"], row["trp"] %} {% endfor %} - {% gv_end %} {% endimg %} -

2. GV

- {% img src="img.gv" %} - {%- gv_graph "subclass_vocab_graph", "LR" %} - {%- gv_title "Subclass Vocab Graph" %} - +

4. What artifacts are included in each arrangement?

+ {% img src="arrangement.svg" %} + {%- gv_graph "arrangement", "LR" %} + nodesep=0.6 node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] - {% for _, row in query_subclass_vocab.iterrows() %} - {% gv_edge row["ParentLabel"], row["ChildLabel"] %} + {%- map isfilepath=False, mappings="mappings.json" as query_arrangement_shorten %} {% query_arrangement_str %} {% endmap %} + {%- set query_arrangement = query_arrangement_shorten | json2df %} + {% for _, row in query_arrangement.iterrows() %} + {% gv_edge row["arrangement"], row["artifact"] %} {% endfor %} - {% gv_end %} {% endimg %} - -

3. Table

- {%- table %} - {{ query_subclass_vocab_str }} + +

5. What are the type, comment, mimeType, and sha256 of each artifact? Which composition does it belong to?

+ {%- table mappings="mappings.json" %} + {% query_artifact_str %} {% endtable %} + +

6. Overall graph

+ Zoom in the graph + + {% endhtml %} + {%- destroy %} - + END_TEMPLATE ----------------------------------------------------------- cell outputs ----------------------------------------------------------- @@ -378,55 +337,154 @@ END_TEMPLATE border-collapse: collapse; } - Subclass Report - -

Visualize subclass of the vocabularies

-

1. SVG

- -

2. GV

-

-    digraph subclass_vocab_graph {
-    rankdir=LR
-    fontname=Courier; fontsize=12; labelloc=t
-    label="Subclass Vocab Graph"
-            node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier]
-                            
-    "ArtifactCollection" -> "ArtifactComposition"                            
-    "ArtifactCollection" -> "ArtifactLocus"                            
-    "TREAttribute" -> "TROAttribute"                            
-    "TREAttribute" -> "TRSAttribute"                            
-    "TROAttribute" -> "IncludesAllInputData"                            
-    "TRSAttribute" -> "TRSCapability"                            
-    "TRSCapability" -> "CanProvideInternetIsolation"                            
-    "TRSCapability" -> "TRSPolicy"                            
-    "TRSPolicy" -> "EnforcesInternetIsolation"                            
-    "TrustedResearchElement" -> "TimeStampingAuthority"                            
-    "TrustedResearchElement" -> "TransparentResearchObject"                            
-    "TrustedResearchElement" -> "TrustedResearchPerformance"                            
-    "TrustedResearchElement" -> "TrustedResearchSystem"            
+        Overall TRO Graph
+    
+    
+        

Overall TRO Graph

+ + + + + + + + + + + TRO Report + + +

TRO Report

+

This report shows the TRO of downloading LBDA dataset from NOAA website and preparing for use by researchers employing the SKOPE application. +

1. The TRO was assembled by what TRS?

+ + + + +
trotrs
<tro><trs>
- }
-

3. Table

+

2. What capabilities does the TRS have?

- + - - - - - - - - - - - - - + +
ParentLabelChildLabel
trscapability_idcapability_type
"ArtifactCollection""ArtifactComposition"
"ArtifactCollection""ArtifactLocus"
"TREAttribute""TROAttribute"
"TREAttribute""TRSAttribute"
"TROAttribute""IncludesAllInputData"
"TRSAttribute""TRSCapability"
"TRSCapability""CanProvideInternetIsolation"
"TRSCapability""TRSPolicy"
"TRSPolicy""EnforcesInternetIsolation"
"TrustedResearchElement""TimeStampingAuthority"
"TrustedResearchElement""TransparentResearchObject"
"TrustedResearchElement""TrustedResearchPerformance"
"TrustedResearchElement""TrustedResearchSystem"
<trs><trs/capability/1><trov:CanRecordInternetAccess>
<trs><trs/capability/2><trov:CanProvideInternetIsolation>
- + +

3. What TRPs does the TRO have? What arrangements are accessed and contributed to per TRP accordingly?

+ +

4. What artifacts are included in each arrangement?

+ +

5. What are the type, comment, mimeType, and sha256 of each artifact? Which composition does it belong to?

+ + + + + + + + + +
artifacttypecommentmimeTypesha256composition
<composition/1/artifact/1><trov:DataArtifact>"NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset""application/x-netcdf""b02edb8d27cf9ac19087938dd3d306895e208bd3a9f0458e63292ea2695a1f78"<composition/1>
<composition/1/artifact/2><trov:ComputationalNotebookArtifact>"Initial state of Jupyter notebook for processing the LBDA dataset""text/plain""8fcf663f1c40cbf846d0e5a136f0797fa560545f5d8c1391a5b13406f3814ad6"<composition/1>
<composition/1/artifact/3><trov:ComputationalNotebookArtifact>"Final state of Jupyter notebook for processing the LBDA dataset""text/plain""8cf4f26b27e83a967bd7ddd97a24e6d4b7a9a7a14fff7ffeb47e2fa9085bccaf"<composition/1>
<composition/1/artifact/4><trov:HTMLArtifact>"HTML rendering of final state of the Jupyter notebook""text/html""870c9297ae7439c283697761c90028312cc0312f13182afb0a0125eb29e5f7f0"<composition/1>
<composition/1/artifact/5><trov:ImageArtifact>"Graphical rendering of the histogram of dataset values""image/png""cfc6e4d5e76754d4802d42a2d6ff79a901c7f0e5daccb256cab542bb7953b2bf"<composition/1>
<composition/1/artifact/6><trov:DataArtifact>"GeoTIFF file containing LBDA data cube ready for staging to SKOPE server""image/tiff""e035f3af957c4f761c1d502cc28f91676fbf2bbdf5f7045a7151a6d3ff04789d"<composition/1>
+ +

6. Overall graph

+ Zoom in the graph + + + + + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +=================================================== bash cell | tro_report_file ==================================================== + +geist report --file tro_report --outputroot report_file + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- + + + + + + + + + Overall TRO Graph + + +

Overall TRO Graph

+ + + + + + + + + + TRO Report + + +

TRO Report

+

This report shows the TRO of downloading LBDA dataset from NOAA website and preparing for use by researchers employing the SKOPE application. +

1. The TRO was assembled by what TRS?

+ + + + +
trotrs
<tro><trs>
+ +

2. What capabilities does the TRS have?

+ + + + + +
trscapability_idcapability_type
<trs><trs/capability/1><trov:CanRecordInternetAccess>
<trs><trs/capability/2><trov:CanProvideInternetIsolation>
+

3. What TRPs does the TRO have? What arrangements are accessed and contributed to per TRP accordingly?

+ +

4. What artifacts are included in each arrangement?

+ +

5. What are the type, comment, mimeType, and sha256 of each artifact? Which composition does it belong to?

+ + + + + + + + + +
artifacttypecommentmimeTypesha256composition
<composition/1/artifact/1><trov:DataArtifact>"NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset""application/x-netcdf""b02edb8d27cf9ac19087938dd3d306895e208bd3a9f0458e63292ea2695a1f78"<composition/1>
<composition/1/artifact/2><trov:ComputationalNotebookArtifact>"Initial state of Jupyter notebook for processing the LBDA dataset""text/plain""8fcf663f1c40cbf846d0e5a136f0797fa560545f5d8c1391a5b13406f3814ad6"<composition/1>
<composition/1/artifact/3><trov:ComputationalNotebookArtifact>"Final state of Jupyter notebook for processing the LBDA dataset""text/plain""8cf4f26b27e83a967bd7ddd97a24e6d4b7a9a7a14fff7ffeb47e2fa9085bccaf"<composition/1>
<composition/1/artifact/4><trov:HTMLArtifact>"HTML rendering of final state of the Jupyter notebook""text/html""870c9297ae7439c283697761c90028312cc0312f13182afb0a0125eb29e5f7f0"<composition/1>
<composition/1/artifact/5><trov:ImageArtifact>"Graphical rendering of the histogram of dataset values""image/png""cfc6e4d5e76754d4802d42a2d6ff79a901c7f0e5daccb256cab542bb7953b2bf"<composition/1>
<composition/1/artifact/6><trov:DataArtifact>"GeoTIFF file containing LBDA data cube ready for staging to SKOPE server""image/tiff""e035f3af957c4f761c1d502cc28f91676fbf2bbdf5f7045a7151a6d3ff04789d"<composition/1>
+ +

6. Overall graph

+ Zoom in the graph + + + + + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/demo/01-trov-examples/03-skope-lbda-processing/templates.geist b/demo/02-tro-examples/03-skope-lbda-processing/templates.geist similarity index 100% rename from demo/01-trov-examples/03-skope-lbda-processing/templates.geist rename to demo/02-tro-examples/03-skope-lbda-processing/templates.geist diff --git a/demo/01-trov-examples/03-skope-lbda-processing/tro/tro.jsonld b/demo/02-tro-examples/03-skope-lbda-processing/tro/tro.jsonld similarity index 99% rename from demo/01-trov-examples/03-skope-lbda-processing/tro/tro.jsonld rename to demo/02-tro-examples/03-skope-lbda-processing/tro/tro.jsonld index 0006479..a89a2e8 100644 --- a/demo/01-trov-examples/03-skope-lbda-processing/tro/tro.jsonld +++ b/demo/02-tro-examples/03-skope-lbda-processing/tro/tro.jsonld @@ -3,7 +3,7 @@ "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdfs": "http://www.w3.org/2000/01/rdf-schema#", "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/01-trov-examples/03-skope-/" + "@base": "https://github.com/transparency-certified/trace-model/tree/master/02-tro-examples/03-skope-/" }], "@graph": [ diff --git a/demo/01-trov-examples/03-skope-lbda-processing/tro_report b/demo/02-tro-examples/03-skope-lbda-processing/tro_report similarity index 100% rename from demo/01-trov-examples/03-skope-lbda-processing/tro_report rename to demo/02-tro-examples/03-skope-lbda-processing/tro_report diff --git a/demo/02-explorations/01-gpg-runtime/01-generate-key/Makefile b/demo/02-tro-examples/Makefile similarity index 100% rename from demo/02-explorations/01-gpg-runtime/01-generate-key/Makefile rename to demo/02-tro-examples/Makefile diff --git a/demo/02-tro-examples/common/query-tro.sh b/demo/02-tro-examples/common/query-tro.sh new file mode 100644 index 0000000..cb6028e --- /dev/null +++ b/demo/02-tro-examples/common/query-tro.sh @@ -0,0 +1,81 @@ + + +TRACE_VOCAB=$REPRO_MNT/exports/trace-vocab.jsonld +TRO_DECLARATION=tro/tro.jsonld +TRS_CERTIFICATE=trs/trs.jsonld + +# ------------------------------------------------------------------------------ + +bash_cell 'import trov vocabulary' << END_CELL + +# Destroy the dataset +geist destroy --dataset kb --quiet + +# Import TRACE vocabulary and TRO Manifest and export as N-TRIPLES +geist create --dataset kb --inputformat json-ld --inputfile ${TRACE_VOCAB} --infer owl + +# Import TRO and TRS as JSON-LD and export as N-TRIPLES +geist export --dataset kb --outputformat nt | sort | grep trov + +END_CELL + +# ------------------------------------------------------------------------------ + +bash_cell 'import tro declaration' << END_CELL + +# Import TRACE vocabulary and TRO Manifest and export as N-TRIPLES +geist load --dataset kb --inputformat json-ld --inputfile ${TRO_DECLARATION} + +# Import TRO and TRS as JSON-LD and export as N-TRIPLES +geist export --dataset kb --outputformat nt | sort | grep trov-example + +END_CELL + +# ------------------------------------------------------------------------------ + +bash_cell 'query tro attributes' << END_CELL + +# What subclasses of TROAttribute have been defined? + +geist query --dataset kb << __END_QUERY__ + + PREFIX rdfs: + PREFIX trov: + + SELECT DISTINCT ?attribute ?attributeLabel ?attributeComment + WHERE { + ?attribute rdfs:subClassOf trov:TROAttribute . + ?attribute rdfs:label ?attributeLabel . + ?attribute rdfs:comment ?attributeComment . + } ORDER BY ?attribute ?attributeLabel ?attributeComment + +__END_QUERY__ + +END_CELL + +# ------------------------------------------------------------------------------ + +bash_cell 'query trs attributes' << END_CELL + +# What subclasses of TRSAttribute have been defined? + +geist query --dataset kb << __END_QUERY__ + + PREFIX rdfs: + PREFIX trov: + + SELECT DISTINCT ?attribute ?attributeLabel ?attributeComment + WHERE { + ?attribute rdfs:subClassOf trov:TRSAttribute . + ?attribute rdfs:label ?attributeLabel . + ?attribute rdfs:comment ?attributeComment . + } ORDER BY ?attribute ?attributeLabel ?attributeComment + +__END_QUERY__ + +# Destroy the dataset +geist destroy --dataset kb + +END_CELL + +# ------------------------------------------------------------------------------ diff --git a/demo/02-explorations/01-gpg-runtime/02-simple-tro/Makefile b/demo/03-trace-explorations/01-gpg-runtime/01-generate-key/Makefile similarity index 100% rename from demo/02-explorations/01-gpg-runtime/02-simple-tro/Makefile rename to demo/03-trace-explorations/01-gpg-runtime/01-generate-key/Makefile diff --git a/demo/02-explorations/01-gpg-runtime/01-generate-key/run.sh b/demo/03-trace-explorations/01-gpg-runtime/01-generate-key/run.sh similarity index 100% rename from demo/02-explorations/01-gpg-runtime/01-generate-key/run.sh rename to demo/03-trace-explorations/01-gpg-runtime/01-generate-key/run.sh diff --git a/demo/02-explorations/01-gpg-runtime/01-generate-key/run.txt b/demo/03-trace-explorations/01-gpg-runtime/01-generate-key/run.txt similarity index 100% rename from demo/02-explorations/01-gpg-runtime/01-generate-key/run.txt rename to demo/03-trace-explorations/01-gpg-runtime/01-generate-key/run.txt diff --git a/demo/02-explorations/01-gpg-runtime/Makefile b/demo/03-trace-explorations/01-gpg-runtime/02-simple-tro/Makefile similarity index 100% rename from demo/02-explorations/01-gpg-runtime/Makefile rename to demo/03-trace-explorations/01-gpg-runtime/02-simple-tro/Makefile diff --git a/demo/02-explorations/01-gpg-runtime/02-simple-tro/data/private.asc b/demo/03-trace-explorations/01-gpg-runtime/02-simple-tro/data/private.asc similarity index 100% rename from demo/02-explorations/01-gpg-runtime/02-simple-tro/data/private.asc rename to demo/03-trace-explorations/01-gpg-runtime/02-simple-tro/data/private.asc diff --git a/demo/02-explorations/01-gpg-runtime/02-simple-tro/data/public.gpg b/demo/03-trace-explorations/01-gpg-runtime/02-simple-tro/data/public.gpg similarity index 100% rename from demo/02-explorations/01-gpg-runtime/02-simple-tro/data/public.gpg rename to demo/03-trace-explorations/01-gpg-runtime/02-simple-tro/data/public.gpg diff --git a/demo/02-explorations/01-gpg-runtime/02-simple-tro/run.sh b/demo/03-trace-explorations/01-gpg-runtime/02-simple-tro/run.sh similarity index 100% rename from demo/02-explorations/01-gpg-runtime/02-simple-tro/run.sh rename to demo/03-trace-explorations/01-gpg-runtime/02-simple-tro/run.sh diff --git a/demo/02-explorations/01-gpg-runtime/02-simple-tro/run.txt b/demo/03-trace-explorations/01-gpg-runtime/02-simple-tro/run.txt similarity index 100% rename from demo/02-explorations/01-gpg-runtime/02-simple-tro/run.txt rename to demo/03-trace-explorations/01-gpg-runtime/02-simple-tro/run.txt diff --git a/demo/02-explorations/02-gpg-api/01-generate-key/Makefile b/demo/03-trace-explorations/01-gpg-runtime/Makefile similarity index 100% rename from demo/02-explorations/02-gpg-api/01-generate-key/Makefile rename to demo/03-trace-explorations/01-gpg-runtime/Makefile diff --git a/demo/02-explorations/02-gpg-api/02-simple-tro/Makefile b/demo/03-trace-explorations/02-gpg-api/01-generate-key/Makefile similarity index 100% rename from demo/02-explorations/02-gpg-api/02-simple-tro/Makefile rename to demo/03-trace-explorations/02-gpg-api/01-generate-key/Makefile diff --git a/demo/02-explorations/02-gpg-api/01-generate-key/run.sh b/demo/03-trace-explorations/02-gpg-api/01-generate-key/run.sh similarity index 100% rename from demo/02-explorations/02-gpg-api/01-generate-key/run.sh rename to demo/03-trace-explorations/02-gpg-api/01-generate-key/run.sh diff --git a/demo/02-explorations/02-gpg-api/01-generate-key/run.txt b/demo/03-trace-explorations/02-gpg-api/01-generate-key/run.txt similarity index 100% rename from demo/02-explorations/02-gpg-api/01-generate-key/run.txt rename to demo/03-trace-explorations/02-gpg-api/01-generate-key/run.txt diff --git a/demo/02-explorations/02-gpg-api/Makefile b/demo/03-trace-explorations/02-gpg-api/02-simple-tro/Makefile similarity index 100% rename from demo/02-explorations/02-gpg-api/Makefile rename to demo/03-trace-explorations/02-gpg-api/02-simple-tro/Makefile diff --git a/demo/02-explorations/02-gpg-api/02-simple-tro/data/private.asc b/demo/03-trace-explorations/02-gpg-api/02-simple-tro/data/private.asc similarity index 100% rename from demo/02-explorations/02-gpg-api/02-simple-tro/data/private.asc rename to demo/03-trace-explorations/02-gpg-api/02-simple-tro/data/private.asc diff --git a/demo/02-explorations/02-gpg-api/02-simple-tro/data/public.gpg b/demo/03-trace-explorations/02-gpg-api/02-simple-tro/data/public.gpg similarity index 100% rename from demo/02-explorations/02-gpg-api/02-simple-tro/data/public.gpg rename to demo/03-trace-explorations/02-gpg-api/02-simple-tro/data/public.gpg diff --git a/demo/02-explorations/02-gpg-api/02-simple-tro/run.sh b/demo/03-trace-explorations/02-gpg-api/02-simple-tro/run.sh similarity index 100% rename from demo/02-explorations/02-gpg-api/02-simple-tro/run.sh rename to demo/03-trace-explorations/02-gpg-api/02-simple-tro/run.sh diff --git a/demo/02-explorations/02-gpg-api/02-simple-tro/run.txt b/demo/03-trace-explorations/02-gpg-api/02-simple-tro/run.txt similarity index 100% rename from demo/02-explorations/02-gpg-api/02-simple-tro/run.txt rename to demo/03-trace-explorations/02-gpg-api/02-simple-tro/run.txt diff --git a/demo/02-explorations/03-tro-fingerprint-state/Makefile b/demo/03-trace-explorations/02-gpg-api/Makefile similarity index 100% rename from demo/02-explorations/03-tro-fingerprint-state/Makefile rename to demo/03-trace-explorations/02-gpg-api/Makefile diff --git a/demo/02-explorations/04-timestamp/Makefile b/demo/03-trace-explorations/03-tro-fingerprint-state/Makefile similarity index 100% rename from demo/02-explorations/04-timestamp/Makefile rename to demo/03-trace-explorations/03-tro-fingerprint-state/Makefile diff --git a/demo/02-explorations/03-tro-fingerprint-state/data/file1.csv b/demo/03-trace-explorations/03-tro-fingerprint-state/data/file1.csv similarity index 100% rename from demo/02-explorations/03-tro-fingerprint-state/data/file1.csv rename to demo/03-trace-explorations/03-tro-fingerprint-state/data/file1.csv diff --git a/demo/02-explorations/03-tro-fingerprint-state/data/file2.csv b/demo/03-trace-explorations/03-tro-fingerprint-state/data/file2.csv similarity index 100% rename from demo/02-explorations/03-tro-fingerprint-state/data/file2.csv rename to demo/03-trace-explorations/03-tro-fingerprint-state/data/file2.csv diff --git a/demo/02-explorations/03-tro-fingerprint-state/products/after.csv b/demo/03-trace-explorations/03-tro-fingerprint-state/products/after.csv similarity index 100% rename from demo/02-explorations/03-tro-fingerprint-state/products/after.csv rename to demo/03-trace-explorations/03-tro-fingerprint-state/products/after.csv diff --git a/demo/02-explorations/03-tro-fingerprint-state/products/before.csv b/demo/03-trace-explorations/03-tro-fingerprint-state/products/before.csv similarity index 100% rename from demo/02-explorations/03-tro-fingerprint-state/products/before.csv rename to demo/03-trace-explorations/03-tro-fingerprint-state/products/before.csv diff --git a/demo/02-explorations/03-tro-fingerprint-state/products/fingerprint_state.csv b/demo/03-trace-explorations/03-tro-fingerprint-state/products/fingerprint_state.csv similarity index 100% rename from demo/02-explorations/03-tro-fingerprint-state/products/fingerprint_state.csv rename to demo/03-trace-explorations/03-tro-fingerprint-state/products/fingerprint_state.csv diff --git a/demo/02-explorations/03-tro-fingerprint-state/run.sh b/demo/03-trace-explorations/03-tro-fingerprint-state/run.sh similarity index 100% rename from demo/02-explorations/03-tro-fingerprint-state/run.sh rename to demo/03-trace-explorations/03-tro-fingerprint-state/run.sh diff --git a/demo/02-explorations/03-tro-fingerprint-state/run.txt b/demo/03-trace-explorations/03-tro-fingerprint-state/run.txt similarity index 100% rename from demo/02-explorations/03-tro-fingerprint-state/run.txt rename to demo/03-trace-explorations/03-tro-fingerprint-state/run.txt diff --git a/demo/02-explorations/03-tro-fingerprint-state/runtime/file1.csv b/demo/03-trace-explorations/03-tro-fingerprint-state/runtime/file1.csv similarity index 100% rename from demo/02-explorations/03-tro-fingerprint-state/runtime/file1.csv rename to demo/03-trace-explorations/03-tro-fingerprint-state/runtime/file1.csv diff --git a/demo/02-explorations/03-tro-fingerprint-state/runtime/file3.csv b/demo/03-trace-explorations/03-tro-fingerprint-state/runtime/file3.csv similarity index 100% rename from demo/02-explorations/03-tro-fingerprint-state/runtime/file3.csv rename to demo/03-trace-explorations/03-tro-fingerprint-state/runtime/file3.csv diff --git a/demo/02-explorations/03-tro-fingerprint-state/test.py b/demo/03-trace-explorations/03-tro-fingerprint-state/test.py similarity index 100% rename from demo/02-explorations/03-tro-fingerprint-state/test.py rename to demo/03-trace-explorations/03-tro-fingerprint-state/test.py diff --git a/demo/02-explorations/05-validate-tro-declaration/Makefile b/demo/03-trace-explorations/04-timestamp/Makefile similarity index 100% rename from demo/02-explorations/05-validate-tro-declaration/Makefile rename to demo/03-trace-explorations/04-timestamp/Makefile diff --git a/demo/02-explorations/04-timestamp/data/signature.asc b/demo/03-trace-explorations/04-timestamp/data/signature.asc similarity index 100% rename from demo/02-explorations/04-timestamp/data/signature.asc rename to demo/03-trace-explorations/04-timestamp/data/signature.asc diff --git a/demo/03-trace-explorations/04-timestamp/products/digest.yaml b/demo/03-trace-explorations/04-timestamp/products/digest.yaml new file mode 100644 index 0000000..8ab0ed3 --- /dev/null +++ b/demo/03-trace-explorations/04-timestamp/products/digest.yaml @@ -0,0 +1,2 @@ +tro-declaration: bb9419749c818caff88814324a83ff279ebbb564215077ae7c65431f73bd02cf +trs-signature": 9fb5dd0a2b9afdf4071b43558848a70101c91d3b1eab61f6a369740c36c2ea8d diff --git a/demo/03-trace-explorations/04-timestamp/products/file.tsq b/demo/03-trace-explorations/04-timestamp/products/file.tsq new file mode 100644 index 0000000000000000000000000000000000000000..4867c7e13e62bde126d6f46041cac890e4738b61 GIT binary patch literal 91 zcmV-h0HpsgSpoq8Fi|iK1_@w>NC9O71OfvE00cn4HO_o*g5WM(T% products/digest.yaml << EOF -tro-declaration: 71fd13607e8cea0a883ebad45037044d4909fb21959ec30c6687dcf86d077cf8 +tro-declaration: bb9419749c818caff88814324a83ff279ebbb564215077ae7c65431f73bd02cf trs-signature": 9fb5dd0a2b9afdf4071b43558848a70101c91d3b1eab61f6a369740c36c2ea8d EOF diff --git a/demo/02-explorations/Makefile b/demo/03-trace-explorations/05-validate-tro-declaration/Makefile similarity index 100% rename from demo/02-explorations/Makefile rename to demo/03-trace-explorations/05-validate-tro-declaration/Makefile diff --git a/demo/02-explorations/05-validate-tro-declaration/data/mappings.json b/demo/03-trace-explorations/05-validate-tro-declaration/data/mappings.json similarity index 78% rename from demo/02-explorations/05-validate-tro-declaration/data/mappings.json rename to demo/03-trace-explorations/05-validate-tro-declaration/data/mappings.json index 5cc7ae4..701d9d4 100644 --- a/demo/02-explorations/05-validate-tro-declaration/data/mappings.json +++ b/demo/03-trace-explorations/05-validate-tro-declaration/data/mappings.json @@ -2,5 +2,5 @@ "http://www.w3.org/1999/02/22-rdf-syntax-ns#": "rdf#", "http://www.w3.org/2000/01/rdf-schema#": "rdfs#", "https://w3id.org/trace/2023/05/trov#": "trov#", - "https://github.com/transparency-certified/trace-model/tree/master/demo/02-explorations/05-validate-tro-declaration/": "" + "https://github.com/transparency-certified/trace-model/tree/master/demo/03-trace-explorations/": "" } \ No newline at end of file diff --git a/demo/02-explorations/05-validate-tro-declaration/data/tro.schema.ttl b/demo/03-trace-explorations/05-validate-tro-declaration/data/tro.schema.ttl similarity index 98% rename from demo/02-explorations/05-validate-tro-declaration/data/tro.schema.ttl rename to demo/03-trace-explorations/05-validate-tro-declaration/data/tro.schema.ttl index 6ecd9c9..3a7c610 100644 --- a/demo/02-explorations/05-validate-tro-declaration/data/tro.schema.ttl +++ b/demo/03-trace-explorations/05-validate-tro-declaration/data/tro.schema.ttl @@ -1,7 +1,7 @@ @prefix rdf: . @prefix rdfs: . @prefix trov: . -@prefix : . +@prefix : . @prefix xsd: . @prefix sh: . diff --git a/demo/02-explorations/05-validate-tro-declaration/data/tro1.jsonld b/demo/03-trace-explorations/05-validate-tro-declaration/data/tro1.jsonld similarity index 95% rename from demo/02-explorations/05-validate-tro-declaration/data/tro1.jsonld rename to demo/03-trace-explorations/05-validate-tro-declaration/data/tro1.jsonld index 6f3e9b5..9bf5f55 100644 --- a/demo/02-explorations/05-validate-tro-declaration/data/tro1.jsonld +++ b/demo/03-trace-explorations/05-validate-tro-declaration/data/tro1.jsonld @@ -3,7 +3,7 @@ "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdfs": "http://www.w3.org/2000/01/rdf-schema#", "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/02-explorations/05-validate-tro-declaration/" + "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/03-trace-explorations/" }], "@graph": [ diff --git a/demo/02-explorations/05-validate-tro-declaration/data/tro2.jsonld b/demo/03-trace-explorations/05-validate-tro-declaration/data/tro2.jsonld similarity index 98% rename from demo/02-explorations/05-validate-tro-declaration/data/tro2.jsonld rename to demo/03-trace-explorations/05-validate-tro-declaration/data/tro2.jsonld index d4b72f7..c8f5498 100644 --- a/demo/02-explorations/05-validate-tro-declaration/data/tro2.jsonld +++ b/demo/03-trace-explorations/05-validate-tro-declaration/data/tro2.jsonld @@ -3,7 +3,7 @@ "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdfs": "http://www.w3.org/2000/01/rdf-schema#", "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/02-explorations/05-validate-tro-declaration/" + "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/03-trace-explorations/" }], "@graph": [ diff --git a/demo/02-explorations/05-validate-tro-declaration/data/tro3.jsonld b/demo/03-trace-explorations/05-validate-tro-declaration/data/tro3.jsonld similarity index 98% rename from demo/02-explorations/05-validate-tro-declaration/data/tro3.jsonld rename to demo/03-trace-explorations/05-validate-tro-declaration/data/tro3.jsonld index 6c975b8..b9c8ada 100644 --- a/demo/02-explorations/05-validate-tro-declaration/data/tro3.jsonld +++ b/demo/03-trace-explorations/05-validate-tro-declaration/data/tro3.jsonld @@ -3,7 +3,7 @@ "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdfs": "http://www.w3.org/2000/01/rdf-schema#", "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/02-explorations/05-validate-tro-declaration/" + "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/03-trace-explorations/" }], "@graph": [ diff --git a/demo/02-explorations/05-validate-tro-declaration/data/tro4.jsonld b/demo/03-trace-explorations/05-validate-tro-declaration/data/tro4.jsonld similarity index 94% rename from demo/02-explorations/05-validate-tro-declaration/data/tro4.jsonld rename to demo/03-trace-explorations/05-validate-tro-declaration/data/tro4.jsonld index ba542f4..7663f09 100644 --- a/demo/02-explorations/05-validate-tro-declaration/data/tro4.jsonld +++ b/demo/03-trace-explorations/05-validate-tro-declaration/data/tro4.jsonld @@ -3,7 +3,7 @@ "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdfs": "http://www.w3.org/2000/01/rdf-schema#", "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/02-explorations/05-validate-tro-declaration/" + "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/03-trace-explorations/" }], "@graph": [ diff --git a/demo/02-explorations/05-validate-tro-declaration/data/tro5.jsonld b/demo/03-trace-explorations/05-validate-tro-declaration/data/tro5.jsonld similarity index 95% rename from demo/02-explorations/05-validate-tro-declaration/data/tro5.jsonld rename to demo/03-trace-explorations/05-validate-tro-declaration/data/tro5.jsonld index f74fd97..1d53ca1 100644 --- a/demo/02-explorations/05-validate-tro-declaration/data/tro5.jsonld +++ b/demo/03-trace-explorations/05-validate-tro-declaration/data/tro5.jsonld @@ -3,7 +3,7 @@ "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdfs": "http://www.w3.org/2000/01/rdf-schema#", "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/02-explorations/05-validate-tro-declaration/" + "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/03-trace-explorations/" }], "@graph": [ diff --git a/demo/02-explorations/05-validate-tro-declaration/products/tro1.gv b/demo/03-trace-explorations/05-validate-tro-declaration/products/tro1.gv similarity index 100% rename from demo/02-explorations/05-validate-tro-declaration/products/tro1.gv rename to demo/03-trace-explorations/05-validate-tro-declaration/products/tro1.gv diff --git a/demo/02-explorations/05-validate-tro-declaration/products/tro1.png b/demo/03-trace-explorations/05-validate-tro-declaration/products/tro1.png similarity index 100% rename from demo/02-explorations/05-validate-tro-declaration/products/tro1.png rename to demo/03-trace-explorations/05-validate-tro-declaration/products/tro1.png diff --git a/demo/02-explorations/05-validate-tro-declaration/products/tro2.gv b/demo/03-trace-explorations/05-validate-tro-declaration/products/tro2.gv similarity index 100% rename from demo/02-explorations/05-validate-tro-declaration/products/tro2.gv rename to demo/03-trace-explorations/05-validate-tro-declaration/products/tro2.gv diff --git a/demo/02-explorations/05-validate-tro-declaration/products/tro2.png b/demo/03-trace-explorations/05-validate-tro-declaration/products/tro2.png similarity index 100% rename from demo/02-explorations/05-validate-tro-declaration/products/tro2.png rename to demo/03-trace-explorations/05-validate-tro-declaration/products/tro2.png diff --git a/demo/02-explorations/05-validate-tro-declaration/products/tro3.gv b/demo/03-trace-explorations/05-validate-tro-declaration/products/tro3.gv similarity index 100% rename from demo/02-explorations/05-validate-tro-declaration/products/tro3.gv rename to demo/03-trace-explorations/05-validate-tro-declaration/products/tro3.gv diff --git a/demo/02-explorations/05-validate-tro-declaration/products/tro3.png b/demo/03-trace-explorations/05-validate-tro-declaration/products/tro3.png similarity index 100% rename from demo/02-explorations/05-validate-tro-declaration/products/tro3.png rename to demo/03-trace-explorations/05-validate-tro-declaration/products/tro3.png diff --git a/demo/02-explorations/05-validate-tro-declaration/products/tro4.gv b/demo/03-trace-explorations/05-validate-tro-declaration/products/tro4.gv similarity index 100% rename from demo/02-explorations/05-validate-tro-declaration/products/tro4.gv rename to demo/03-trace-explorations/05-validate-tro-declaration/products/tro4.gv diff --git a/demo/02-explorations/05-validate-tro-declaration/products/tro4.png b/demo/03-trace-explorations/05-validate-tro-declaration/products/tro4.png similarity index 100% rename from demo/02-explorations/05-validate-tro-declaration/products/tro4.png rename to demo/03-trace-explorations/05-validate-tro-declaration/products/tro4.png diff --git a/demo/02-explorations/05-validate-tro-declaration/products/tro5.gv b/demo/03-trace-explorations/05-validate-tro-declaration/products/tro5.gv similarity index 100% rename from demo/02-explorations/05-validate-tro-declaration/products/tro5.gv rename to demo/03-trace-explorations/05-validate-tro-declaration/products/tro5.gv diff --git a/demo/02-explorations/05-validate-tro-declaration/products/tro5.png b/demo/03-trace-explorations/05-validate-tro-declaration/products/tro5.png similarity index 100% rename from demo/02-explorations/05-validate-tro-declaration/products/tro5.png rename to demo/03-trace-explorations/05-validate-tro-declaration/products/tro5.png diff --git a/demo/02-explorations/05-validate-tro-declaration/run.sh b/demo/03-trace-explorations/05-validate-tro-declaration/run.sh similarity index 100% rename from demo/02-explorations/05-validate-tro-declaration/run.sh rename to demo/03-trace-explorations/05-validate-tro-declaration/run.sh diff --git a/demo/02-explorations/05-validate-tro-declaration/run.txt b/demo/03-trace-explorations/05-validate-tro-declaration/run.txt similarity index 100% rename from demo/02-explorations/05-validate-tro-declaration/run.txt rename to demo/03-trace-explorations/05-validate-tro-declaration/run.txt diff --git a/demo/03-trace-explorations/Makefile b/demo/03-trace-explorations/Makefile new file mode 100644 index 0000000..68e529c --- /dev/null +++ b/demo/03-trace-explorations/Makefile @@ -0,0 +1 @@ +include ${SHELL_NOTEBOOK_DOT_DIR}/Makefile.demo-runner diff --git a/demo/02-explorations/common/certificate/cacert.pem b/demo/03-trace-explorations/common/certificate/cacert.pem similarity index 100% rename from demo/02-explorations/common/certificate/cacert.pem rename to demo/03-trace-explorations/common/certificate/cacert.pem diff --git a/demo/02-explorations/common/certificate/tsa.crt b/demo/03-trace-explorations/common/certificate/tsa.crt similarity index 100% rename from demo/02-explorations/common/certificate/tsa.crt rename to demo/03-trace-explorations/common/certificate/tsa.crt diff --git a/demo/02-explorations/common/tro/file1 b/demo/03-trace-explorations/common/tro/file1 similarity index 100% rename from demo/02-explorations/common/tro/file1 rename to demo/03-trace-explorations/common/tro/file1 diff --git a/demo/02-explorations/common/tro/file2 b/demo/03-trace-explorations/common/tro/file2 similarity index 100% rename from demo/02-explorations/common/tro/file2 rename to demo/03-trace-explorations/common/tro/file2 diff --git a/demo/02-explorations/common/tro/tro.jsonld b/demo/03-trace-explorations/common/tro/tro.jsonld similarity index 98% rename from demo/02-explorations/common/tro/tro.jsonld rename to demo/03-trace-explorations/common/tro/tro.jsonld index fda2e4f..b901b89 100644 --- a/demo/02-explorations/common/tro/tro.jsonld +++ b/demo/03-trace-explorations/common/tro/tro.jsonld @@ -3,7 +3,7 @@ "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdfs": "http://www.w3.org/2000/01/rdf-schema#", "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" + "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/03-trace-explorations/" }], "@graph": [ From cbf3c69c56b14f9afdb1565735fb26318d1ff31c Mon Sep 17 00:00:00 2001 From: Meng Li <34143965+Meng6@users.noreply.github.com> Date: Mon, 9 Oct 2023 20:47:01 +0000 Subject: [PATCH 07/22] Update 03-tro-fingerprint-state demo --- demo/03-trace-explorations/03-tro-fingerprint-state/run.sh | 2 +- demo/03-trace-explorations/03-tro-fingerprint-state/run.txt | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/demo/03-trace-explorations/03-tro-fingerprint-state/run.sh b/demo/03-trace-explorations/03-tro-fingerprint-state/run.sh index 1022328..7dbff58 100644 --- a/demo/03-trace-explorations/03-tro-fingerprint-state/run.sh +++ b/demo/03-trace-explorations/03-tro-fingerprint-state/run.sh @@ -12,7 +12,7 @@ FINGERPRINT_STATE_FILE=products/fingerprint_state.csv bash_cell 'Remove the run folder' << END_CELL if [[ -d "${TRO_DATA_RUN_DIR}" ]] ; then - rm -vf "${TRO_DATA_RUN_DIR}"/* + rm -f "${TRO_DATA_RUN_DIR}"/* rmdir -v "${TRO_DATA_RUN_DIR}" fi diff --git a/demo/03-trace-explorations/03-tro-fingerprint-state/run.txt b/demo/03-trace-explorations/03-tro-fingerprint-state/run.txt index 5b3e06c..b6f8d5b 100644 --- a/demo/03-trace-explorations/03-tro-fingerprint-state/run.txt +++ b/demo/03-trace-explorations/03-tro-fingerprint-state/run.txt @@ -1,13 +1,11 @@ ================================================ bash cell | Remove the run folder ================================================= if [[ -d "runtime" ]] ; then - rm -vf "runtime"/* + rm -f "runtime"/* rmdir -v "runtime" fi ----------------------------------------------------------- cell outputs ----------------------------------------------------------- -removed 'runtime/file1.csv' -removed 'runtime/file3.csv' rmdir: removing directory, 'runtime' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ From b158517dbd9357f495e280069ba90603eca39f98 Mon Sep 17 00:00:00 2001 From: Meng Li <34143965+Meng6@users.noreply.github.com> Date: Mon, 9 Oct 2023 15:55:11 -0500 Subject: [PATCH 08/22] Update README.md: additional output removed for brevity; add a brief description to these demos --- README.md | 353 ++++++++----------------------------- demo/01-trov-vocab/run.sh | 2 +- demo/01-trov-vocab/run.txt | 2 +- 3 files changed, 72 insertions(+), 285 deletions(-) diff --git a/README.md b/README.md index 8748dde..03317d0 100644 --- a/README.md +++ b/README.md @@ -20,120 +20,25 @@ The demonstration and its products are stored in the `demo` directory tree: ``` trace-model$ tree demo demo -├── 01-trov-examples +├── 01-trov-vocab +│ ├── Makefile +│ ├── products +│ │ ├── img.gv +│ │ ├── img.svg +│ │ └── report_subclass.html +│ ├── run.sh +│ ├── run.txt +│ └── templates.geist +├── 02-tro-examples │ ├── 01-two-artifacts-no-trp │ │ ├── Makefile -│ │ ├── products -│ │ │ ├── img.gv -│ │ │ ├── img.svg -│ │ │ └── report_subclass.html -│ │ ├── run.sh -│ │ ├── run.txt -│ │ ├── tro -│ │ │ ├── file1 -│ │ │ ├── file2 -│ │ │ └── tro.jsonld -│ │ └── trs -│ │ ├── private.asc -│ │ ├── public.gpg -│ │ └── trs.jsonld -│ ├── 02-three-artifacts-one-trp -│ │ ├── Makefile -│ │ ├── products -│ │ │ ├── img.gv -│ │ │ ├── img.svg -│ │ │ └── report_subclass.html │ │ ├── run.sh │ │ ├── run.txt │ │ ├── tro │ │ │ ├── file1 -│ │ │ ├── file2 -│ │ │ ├── file3 -│ │ │ └── tro.jsonld -│ │ └── trs -│ │ ├── private.asc -│ │ ├── public.gpg -│ │ └── trs.jsonld -│ ├── 03-skope-lbda-processing -│ │ ├── Makefile -│ │ ├── mappings.json -│ │ ├── products -│ │ │ ├── img.gv -│ │ │ ├── img.svg -│ │ │ └── report_subclass.html -│ │ ├── report_file -│ │ │ ├── arrangement.svg -│ │ │ ├── overall_tro_graph.html -│ │ │ ├── report.html -│ │ │ ├── tro.svg -│ │ │ └── trp.svg -│ │ ├── report_inline -│ │ │ ├── arrangement.svg -│ │ │ ├── overall_tro_graph.html -│ │ │ ├── report.html -│ │ │ ├── tro.svg -│ │ │ └── trp.svg -│ │ ├── run.sh -│ │ ├── run.txt -│ │ ├── templates.geist -│ │ ├── tro -│ │ │ └── tro.jsonld -│ │ └── tro_report -│ ├── Makefile -│ └── common -│ ├── query-tro.sh -│ └── templates.geist -├── 02-explorations -│ ├── 01-gpg-runtime -│ │ ├── 01-generate-key -│ │ │ ├── Makefile -│ │ │ ├── run.sh -│ │ │ └── run.txt -│ │ ├── 02-simple-tro -│ │ │ ├── Makefile -│ │ │ ├── data -│ │ │ │ ├── private.asc -│ │ │ │ └── public.gpg -│ │ │ ├── run.sh -│ │ │ └── run.txt -│ │ └── Makefile -│ ├── 02-gpg-api -│ │ ├── 01-generate-key -│ │ │ ├── Makefile -│ │ │ ├── run.sh -│ │ │ └── run.txt -│ │ ├── 02-simple-tro -│ │ │ ├── Makefile -│ │ │ ├── data -│ │ │ │ ├── private.asc -│ │ │ │ └── public.gpg -│ │ │ ├── run.sh -│ │ │ └── run.txt -│ │ └── Makefile -│ ├── 03-tro-fingerprint-state -│ │ ├── Makefile -│ │ ├── data -│ │ │ ├── file1.csv -│ │ │ └── file2.csv -│ │ ├── products -│ │ │ ├── after.csv -│ │ │ ├── before.csv -│ │ │ └── fingerprint_state.csv -│ │ ├── run.sh -│ │ ├── run.txt -│ │ ├── runtime -│ │ │ ├── file1.csv -│ │ │ └── file3.csv -│ │ └── test.py -│ ├── 04-timestamp -│ │ ├── Makefile -│ │ ├── data -│ │ │ └── signature.asc -│ │ ├── products -│ │ │ ├── digest.yaml -│ │ │ └── file.tsq -│ │ ├── run.sh -│ │ └── run.txt +. +. (additional output removed for brevity) +. │ ├── 05-validate-tro-declaration │ │ ├── Makefile │ │ ├── data @@ -169,63 +74,32 @@ demo └── Makefile ``` +Below gives a brief description of these demonstrations: +- __01-trov-vocab__: query the _Transparent Research Object Vocabulary_ (__TROV__) and visualize the subclass relationship. +- __02-tro-examples__: query three _Transparent Research Objects_ (__TROs__), _01-two-artifacts-no-trp_, _02-three-artifacts-one-trp_, and _03-skope-lbda-processing_. +- __03-trace-explorations__: + - _01-gpg-runtime_ and _02-gpg-api_ demonstrate how a key pair can be generated and used to sign and verify a TRO declaration. + - _03-tro-fingerprint-state_ demonstrates how a fingerprint of a given state can be computed. + - _04-timestamp_ demonstrates how a trusted timestamp can be created and applied to a TRO. + - _05-validate-tro-declaration_ demonstrates how a TRO declaration can be validated through 5 examples. + To establish that the demonstrations can be reproduced, first use the `make clean-demo` command to delete the files produced by the demo: ``` trace-model$ make clean-demo -------- Cleaning example 01-trov-examples/ ---------------- - -------- Cleaning example 01-two-artifacts-no-trp/ ---------------- -removed './run.txt' -removed './products/img.gv' -removed './products/img.svg' -removed './products/report_subclass.html' -rmdir: removing directory, './products' - -------- Cleaning example 02-three-artifacts-one-trp/ ---------------- -removed './run.txt' -removed './products/img.gv' -removed './products/img.svg' -removed './products/report_subclass.html' -rmdir: removing directory, './products' - -------- Cleaning example 03-skope-lbda-processing/ ---------------- +------- Cleaning example 01-trov-vocab/ ---------------- removed './run.txt' removed './products/img.gv' removed './products/img.svg' removed './products/report_subclass.html' rmdir: removing directory, './products' -------- Cleaning example 02-explorations/ ---------------- - -------- Cleaning example 01-gpg-runtime/ ---------------- - -------- Cleaning example 01-generate-key/ ---------------- -removed './run.txt' - -------- Cleaning example 02-simple-tro/ ---------------- -removed './run.txt' - -------- Cleaning example 02-gpg-api/ ---------------- +------- Cleaning example 02-tro-examples/ ---------------- -------- Cleaning example 01-generate-key/ ---------------- -removed './run.txt' - -------- Cleaning example 02-simple-tro/ ---------------- -removed './run.txt' - -------- Cleaning example 03-tro-fingerprint-state/ ---------------- -removed './run.txt' -removed './products/after.csv' -removed './products/before.csv' -removed './products/fingerprint_state.csv' -rmdir: removing directory, './products' - -------- Cleaning example 04-timestamp/ ---------------- +------- Cleaning example 01-two-artifacts-no-trp/ ---------------- removed './run.txt' -removed './products/digest.yaml' -removed './products/file.tsq' -rmdir: removing directory, './products' - +. +. (additional output removed for brevity) +. ------- Cleaning example 05-validate-tro-declaration/ ---------------- removed './run.txt' removed './products/tro1.gv' @@ -250,40 +124,16 @@ Your branch is up to date with 'origin/idcc24'. Changes not staged for commit: (use "git add/rm ..." to update what will be committed) (use "git restore ..." to discard changes in working directory) - deleted: demo/01-trov-examples/01-two-artifacts-no-trp/products/img.gv - deleted: demo/01-trov-examples/01-two-artifacts-no-trp/products/img.svg - deleted: demo/01-trov-examples/01-two-artifacts-no-trp/products/report_subclass.html - deleted: demo/01-trov-examples/01-two-artifacts-no-trp/run.txt - deleted: demo/01-trov-examples/02-three-artifacts-one-trp/products/img.gv - deleted: demo/01-trov-examples/02-three-artifacts-one-trp/products/img.svg - deleted: demo/01-trov-examples/02-three-artifacts-one-trp/products/report_subclass.html - deleted: demo/01-trov-examples/02-three-artifacts-one-trp/run.txt - deleted: demo/01-trov-examples/03-skope-lbda-processing/products/img.gv - deleted: demo/01-trov-examples/03-skope-lbda-processing/products/img.svg - deleted: demo/01-trov-examples/03-skope-lbda-processing/products/report_subclass.html - deleted: demo/01-trov-examples/03-skope-lbda-processing/run.txt - deleted: demo/02-explorations/01-gpg-runtime/01-generate-key/run.txt - deleted: demo/02-explorations/01-gpg-runtime/02-simple-tro/run.txt - deleted: demo/02-explorations/02-gpg-api/01-generate-key/run.txt - deleted: demo/02-explorations/02-gpg-api/02-simple-tro/run.txt - deleted: demo/02-explorations/03-tro-fingerprint-state/products/after.csv - deleted: demo/02-explorations/03-tro-fingerprint-state/products/before.csv - deleted: demo/02-explorations/03-tro-fingerprint-state/products/fingerprint_state.csv - deleted: demo/02-explorations/03-tro-fingerprint-state/run.txt - deleted: demo/02-explorations/04-timestamp/products/digest.yaml - deleted: demo/02-explorations/04-timestamp/products/file.tsq - deleted: demo/02-explorations/04-timestamp/run.txt - deleted: demo/02-explorations/05-validate-tro-declaration/products/tro1.gv - deleted: demo/02-explorations/05-validate-tro-declaration/products/tro1.png - deleted: demo/02-explorations/05-validate-tro-declaration/products/tro2.gv - deleted: demo/02-explorations/05-validate-tro-declaration/products/tro2.png - deleted: demo/02-explorations/05-validate-tro-declaration/products/tro3.gv - deleted: demo/02-explorations/05-validate-tro-declaration/products/tro3.png - deleted: demo/02-explorations/05-validate-tro-declaration/products/tro4.gv - deleted: demo/02-explorations/05-validate-tro-declaration/products/tro4.png - deleted: demo/02-explorations/05-validate-tro-declaration/products/tro5.gv - deleted: demo/02-explorations/05-validate-tro-declaration/products/tro5.png - deleted: demo/02-explorations/05-validate-tro-declaration/run.txt + deleted: demo/01-trov-vocab/products/img.gv + deleted: demo/01-trov-vocab/products/img.svg + deleted: demo/01-trov-vocab/products/report_subclass.html + deleted: demo/01-trov-vocab/run.txt + deleted: demo/02-tro-examples/01-two-artifacts-no-trp/run.txt + . + . (additional output removed for brevity) + . + deleted: demo/03-trace-explorations/05-validate-tro-declaration/products/tro5.png + deleted: demo/03-trace-explorations/05-validate-tro-declaration/run.txt no changes added to commit (use "git add" and/or "git commit -a") ``` @@ -291,47 +141,14 @@ no changes added to commit (use "git add" and/or "git commit -a") Now run the demonstration with the `make run-demo` command: ``` trace-model$ make run-demo ----------- Running example 01-trov-examples/ ------------- - ----------- Running example 01-two-artifacts-no-trp/ ------------- - ----------- Running example 02-three-artifacts-one-trp/ ------------- - ----------- Running example 03-skope-lbda-processing/ ------------- - ----------- Running example 02-explorations/ ------------- - ----------- Running example 01-gpg-runtime/ ------------- - ----------- Running example 01-generate-key/ ------------- -gpg: key 461685ED23B78A04 marked as ultimately trusted -gpg: directory '/mnt/trace-model/.gnupg-runtime/.gnupg/openpgp-revocs.d' created -gpg: revocation certificate stored as '/mnt/trace-model/.gnupg-runtime/.gnupg/openpgp-revocs.d/3BB586DE799A3BC83447D4B0461685ED23B78A04.rev' -gpg: checking the trustdb -gpg: marginals needed: 3 completes needed: 1 trust model: pgp -gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u +---------- Running example 01-trov-vocab/ ------------- ----------- Running example 02-simple-tro/ ------------- - ----------- Running example 02-gpg-api/ ------------- - ----------- Running example 01-generate-key/ ------------- -gpg: checking the trustdb -gpg: marginals needed: 3 completes needed: 1 trust model: pgp -gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u - ----------- Running example 02-simple-tro/ ------------- - ----------- Running example 03-tro-fingerprint-state/ ------------- - ----------- Running example 04-timestamp/ ------------- -Using configuration from /usr/lib/ssl/openssl.cnf - % Total % Received % Xferd Average Speed Time Time Time Current - Dload Upload Total Spent Left Speed -100 5585 0 5494 100 91 12697 210 --:--:-- --:--:-- --:--:-- 12928 -Using configuration from /usr/lib/ssl/openssl.cnf -Warning: certificate from '../common/certificate/tsa.crt' with subject '/O=Free TSA/OU=TSA/description=This certificate digitally signs documents and time stamp requests made using the freetsa.org online services/CN=www.freetsa.org/emailAddress=busilezas@gmail.com/L=Wuerzburg/C=DE/ST=Bayern' is not a CA cert +---------- Running example 02-tro-examples/ ------------- +---------- Running example 01-two-artifacts-no-trp/ ------------- +. +. (additional output removed for brevity) +. ---------- Running example 05-validate-tro-declaration/ ------------- ``` @@ -357,23 +174,23 @@ repro@a6c7a4e443a8:/mnt/trace-model$ Set the working directory to a particular example directory: ``` -repro@a6c7a4e443a8:/mnt/trace-model$ cd demo/01-trov-examples/01-two-artifacts-no-trp/ -repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-examples/01-two-artifacts-no-trp$ +repro@a6c7a4e443a8:/mnt/trace-model$ cd demo/01-trov-vocab/ +repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-vocab$ -repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-examples/01-two-artifacts-no-trp$ pwd -/mnt/trace-model/demo/01-trov-examples/01-two-artifacts-no-trp +repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-vocab$ pwd +/mnt/trace-model/demo/01-trov-vocab ``` Type `make` to run the example: ``` -repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-examples/01-two-artifacts-no-trp$ make +repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-vocab$ make bash run.sh > run.txt ``` Use the `tree` command to list the files associated with the example, including the temporary files in the `tmp` subdirectory: ``` -repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-examples/01-two-artifacts-no-trp$ tree +repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-vocab$ tree . |-- Makefile |-- products @@ -382,34 +199,19 @@ repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-examples/01-two-artifacts-no-tr | `-- report_subclass.html |-- run.sh |-- run.txt -|-- tmp -| |-- import tro declaration.sh -| |-- import tro declaration.txt -| |-- import trov vocabulary.sh -| |-- import trov vocabulary.txt -| |-- query subclass vocab.sh -| |-- query subclass vocab.txt -| |-- query tro attributes.sh -| |-- query tro attributes.txt -| |-- query trs attributes.sh -| |-- query trs attributes.txt -| |-- reload trov vocabulary without inferences.sh -| `-- reload trov vocabulary without inferences.txt -|-- tro -| |-- file1 -| |-- file2 -| `-- tro.jsonld -`-- trs - |-- private.asc - |-- public.gpg - `-- trs.jsonld - -4 directories, 24 files +|-- templates.geist +`-- tmp + |-- query subclass vocab.sh + |-- query subclass vocab.txt + |-- load trov vocabulary without inferences.sh + `-- load trov vocabulary without inferences.txt + +2 directories, 11 files ``` -The `make clean` command deletes the temporary files and the example output file, `run.txt`: +The `make clean` command deletes the temporary files, the example output file, `run.txt`, and the products folder: ``` -repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-examples/01-two-artifacts-no-trp$ make clean +repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-vocab$ make clean if [[ -f ./"run.txt" ]] ; then \ rm -v ./"run.txt" ; \ fi @@ -418,18 +220,10 @@ if [[ -d ./"tmp" ]] ; then \ rm -vf ./"tmp"/* ; \ rmdir -v ./"tmp" ; \ fi -removed './tmp/import tro declaration.sh' -removed './tmp/import tro declaration.txt' -removed './tmp/import trov vocabulary.sh' -removed './tmp/import trov vocabulary.txt' removed './tmp/query subclass vocab.sh' removed './tmp/query subclass vocab.txt' -removed './tmp/query tro attributes.sh' -removed './tmp/query tro attributes.txt' -removed './tmp/query trs attributes.sh' -removed './tmp/query trs attributes.txt' -removed './tmp/reload trov vocabulary without inferences.sh' -removed './tmp/reload trov vocabulary without inferences.txt' +removed './tmp/load trov vocabulary without inferences.sh' +removed './tmp/load trov vocabulary without inferences.txt' rmdir: removing directory, './tmp' if [[ -d ./"products" ]] ; then \ rm -vf ./"products"/* ; \ @@ -440,25 +234,18 @@ removed './products/img.svg' removed './products/report_subclass.html' rmdir: removing directory, './products' -repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-examples/01-two-artifacts-no-trp$ tree +repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-vocab$ tree . |-- Makefile |-- run.sh -|-- tro -| |-- file1 -| |-- file2 -| `-- tro.jsonld -`-- trs - |-- private.asc - |-- public.gpg - `-- trs.jsonld - -2 directories, 8 files +`-- templates.geist + +0 directories, 3 files ``` Confirm that the `run.txt` file and the `products` folder are the version-controlled files associated with this example that has been deleted: ``` -repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-examples/01-two-artifacts-no-trp$ git status . +repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-vocab$ git status . On branch idcc24 Your branch is up to date with 'origin/idcc24'. @@ -473,12 +260,12 @@ Changes not staged for commit: no changes added to commit (use "git add" and/or "git commit -a") ``` -Re-run the and confirm the `run.txt` file was restored: +Re-run this example and confirm the `run.txt` file and the `products` folder were restored: ``` -repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-examples/01-two-artifacts-no-trp$ make +repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-vocab$ make bash run.sh > run.txt -repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-examples/01-two-artifacts-no-trp$ git status . +repro@a6c7a4e443a8:/mnt/trace-model/demo/01-trov-vocab$ git status . On branch idcc24 Your branch is up to date with 'origin/idcc24'. diff --git a/demo/01-trov-vocab/run.sh b/demo/01-trov-vocab/run.sh index 8d2a08a..7d08cf6 100644 --- a/demo/01-trov-vocab/run.sh +++ b/demo/01-trov-vocab/run.sh @@ -5,7 +5,7 @@ GEIST_TEMPLATES=templates.geist # ------------------------------------------------------------------------------ -bash_cell 'reload trov vocabulary without inferences' << END_CELL +bash_cell 'load trov vocabulary without inferences' << END_CELL # Destroy the dataset geist destroy --dataset kb --quiet diff --git a/demo/01-trov-vocab/run.txt b/demo/01-trov-vocab/run.txt index b83d200..41a75f8 100644 --- a/demo/01-trov-vocab/run.txt +++ b/demo/01-trov-vocab/run.txt @@ -1,4 +1,4 @@ -====================================== bash cell | reload trov vocabulary without inferences ======================================= +====================================== bash cell | load trov vocabulary without inferences ======================================= # Destroy the dataset geist destroy --dataset kb --quiet From d7608629df3bc6fe70ba35136fa3fdf929d3c6e9 Mon Sep 17 00:00:00 2001 From: Meng Li <34143965+Meng6@users.noreply.github.com> Date: Sat, 21 Oct 2023 23:53:58 +0000 Subject: [PATCH 09/22] Update the 01-trov-vocab demo: fix a typo --- demo/01-trov-vocab/run.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo/01-trov-vocab/run.txt b/demo/01-trov-vocab/run.txt index 41a75f8..b79656f 100644 --- a/demo/01-trov-vocab/run.txt +++ b/demo/01-trov-vocab/run.txt @@ -1,4 +1,4 @@ -====================================== bash cell | load trov vocabulary without inferences ======================================= +======================================= bash cell | load trov vocabulary without inferences ======================================== # Destroy the dataset geist destroy --dataset kb --quiet From 33a5afa9ad5a2331c9da67e7b06a4db43855af18 Mon Sep 17 00:00:00 2001 From: Meng Li <34143965+Meng6@users.noreply.github.com> Date: Wed, 1 Nov 2023 02:10:17 +0000 Subject: [PATCH 10/22] Deploy GitHub Pages based on GitHub Action --- .github/workflows/idcc24.yml | 44 ++++++++++++++++++++++++++++++++++++ .gitignore | 3 ++- 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/idcc24.yml diff --git a/.github/workflows/idcc24.yml b/.github/workflows/idcc24.yml new file mode 100644 index 0000000..5272d44 --- /dev/null +++ b/.github/workflows/idcc24.yml @@ -0,0 +1,44 @@ +name: IDCC Demo Pages + +on: + push: + branches: + - idcc24 # Set a branch name to trigger deployment + paths: + - demo/01-trov-vocab/products/** + pull_request: + branches: + - idcc24 + paths: + - demo/01-trov-vocab/products/** + +jobs: + deploy: + runs-on: ubuntu-22.04 + permissions: + contents: write + concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + steps: + - uses: actions/checkout@v3 + with: + submodules: true # Fetch Hugo themes (true OR recursive) + fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod + + - name: Setup Hugo + uses: peaceiris/actions-hugo@v2 + with: + hugo-version: '0.110.0' + + - name: Build + run: hugo --minify + + - name: Deploy + uses: peaceiris/actions-gh-pages@v3 + # If you're changing the branch from main, + # also change the `main` in `refs/heads/main` + # below accordingly. + if: github.ref == 'refs/heads/idcc24' + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./public diff --git a/.gitignore b/.gitignore index 411b5d7..241dd7a 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ dist *.pyc *.egg-info .* -__pycache__ \ No newline at end of file +__pycache__ +!.github \ No newline at end of file From 9e457b68077304e9de6dcaf01e20f4246c4a608e Mon Sep 17 00:00:00 2001 From: Meng Li <34143965+Meng6@users.noreply.github.com> Date: Thu, 2 Nov 2023 02:00:57 +0000 Subject: [PATCH 11/22] Update readme and remove github action workflows; update links in README.md --- .github/workflows/idcc24.yml | 44 ------------------------------------ README.md | 4 ++-- 2 files changed, 2 insertions(+), 46 deletions(-) delete mode 100644 .github/workflows/idcc24.yml diff --git a/.github/workflows/idcc24.yml b/.github/workflows/idcc24.yml deleted file mode 100644 index 5272d44..0000000 --- a/.github/workflows/idcc24.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: IDCC Demo Pages - -on: - push: - branches: - - idcc24 # Set a branch name to trigger deployment - paths: - - demo/01-trov-vocab/products/** - pull_request: - branches: - - idcc24 - paths: - - demo/01-trov-vocab/products/** - -jobs: - deploy: - runs-on: ubuntu-22.04 - permissions: - contents: write - concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - steps: - - uses: actions/checkout@v3 - with: - submodules: true # Fetch Hugo themes (true OR recursive) - fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod - - - name: Setup Hugo - uses: peaceiris/actions-hugo@v2 - with: - hugo-version: '0.110.0' - - - name: Build - run: hugo --minify - - - name: Deploy - uses: peaceiris/actions-gh-pages@v3 - # If you're changing the branch from main, - # also change the `main` in `refs/heads/main` - # below accordingly. - if: github.ref == 'refs/heads/idcc24' - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./public diff --git a/README.md b/README.md index 03317d0..81b5860 100644 --- a/README.md +++ b/README.md @@ -75,8 +75,8 @@ demo ``` Below gives a brief description of these demonstrations: -- __01-trov-vocab__: query the _Transparent Research Object Vocabulary_ (__TROV__) and visualize the subclass relationship. -- __02-tro-examples__: query three _Transparent Research Objects_ (__TROs__), _01-two-artifacts-no-trp_, _02-three-artifacts-one-trp_, and _03-skope-lbda-processing_. +- __01-trov-vocab__: query the _Transparent Research Object Vocabulary_ (__TROV__) and visualize the subclass relationship (check [report](https://transparency-certified.github.io/trace-model/demo/01-trov-vocab/products/report_subclass.html)). +- __02-tro-examples__: query three _Transparent Research Objects_ (__TROs__), _01-two-artifacts-no-trp_, _02-three-artifacts-one-trp_, and _03-skope-lbda-processing_ (check [TRO report](https://transparency-certified.github.io/trace-model/demo/02-tro-examples/03-skope-lbda-processing/report_file/report.html)). - __03-trace-explorations__: - _01-gpg-runtime_ and _02-gpg-api_ demonstrate how a key pair can be generated and used to sign and verify a TRO declaration. - _03-tro-fingerprint-state_ demonstrates how a fingerprint of a given state can be computed. From d0f203f59fdd000e1b0343d63b242753314ac5e4 Mon Sep 17 00:00:00 2001 From: Meng Li <34143965+Meng6@users.noreply.github.com> Date: Mon, 13 Nov 2023 22:05:08 +0000 Subject: [PATCH 12/22] Update TRO Report --- README.md | 2 +- .../products/report.html | 114 ++ .../{report_file => products}/trp.svg | 0 .../report_file/arrangement.svg | 145 -- .../report_file/overall_tro_graph.html | 20 - .../report_file/report.html | 56 - .../report_file/tro.svg | 1679 ----------------- .../report_inline/arrangement.svg | 145 -- .../report_inline/overall_tro_graph.html | 20 - .../report_inline/report.html | 56 - .../report_inline/tro.svg | 1679 ----------------- .../report_inline/trp.svg | 58 - .../03-skope-lbda-processing/run.sh | 109 +- .../03-skope-lbda-processing/run.txt | 298 ++- .../03-skope-lbda-processing/templates.geist | 101 +- .../03-skope-lbda-processing/tro/tro.jsonld | 36 +- .../03-skope-lbda-processing/tro_report | 69 - 17 files changed, 390 insertions(+), 4197 deletions(-) create mode 100644 demo/02-tro-examples/03-skope-lbda-processing/products/report.html rename demo/02-tro-examples/03-skope-lbda-processing/{report_file => products}/trp.svg (100%) delete mode 100644 demo/02-tro-examples/03-skope-lbda-processing/report_file/arrangement.svg delete mode 100644 demo/02-tro-examples/03-skope-lbda-processing/report_file/overall_tro_graph.html delete mode 100644 demo/02-tro-examples/03-skope-lbda-processing/report_file/report.html delete mode 100644 demo/02-tro-examples/03-skope-lbda-processing/report_file/tro.svg delete mode 100644 demo/02-tro-examples/03-skope-lbda-processing/report_inline/arrangement.svg delete mode 100644 demo/02-tro-examples/03-skope-lbda-processing/report_inline/overall_tro_graph.html delete mode 100644 demo/02-tro-examples/03-skope-lbda-processing/report_inline/report.html delete mode 100644 demo/02-tro-examples/03-skope-lbda-processing/report_inline/tro.svg delete mode 100644 demo/02-tro-examples/03-skope-lbda-processing/report_inline/trp.svg delete mode 100644 demo/02-tro-examples/03-skope-lbda-processing/tro_report diff --git a/README.md b/README.md index 81b5860..167c803 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ demo Below gives a brief description of these demonstrations: - __01-trov-vocab__: query the _Transparent Research Object Vocabulary_ (__TROV__) and visualize the subclass relationship (check [report](https://transparency-certified.github.io/trace-model/demo/01-trov-vocab/products/report_subclass.html)). -- __02-tro-examples__: query three _Transparent Research Objects_ (__TROs__), _01-two-artifacts-no-trp_, _02-three-artifacts-one-trp_, and _03-skope-lbda-processing_ (check [TRO report](https://transparency-certified.github.io/trace-model/demo/02-tro-examples/03-skope-lbda-processing/report_file/report.html)). +- __02-tro-examples__: query three _Transparent Research Objects_ (__TROs__), _01-two-artifacts-no-trp_, _02-three-artifacts-one-trp_, and _03-skope-lbda-processing_ (check [TRO report](https://transparency-certified.github.io/trace-model/demo/02-tro-examples/03-skope-lbda-processing/products/report.html)). - __03-trace-explorations__: - _01-gpg-runtime_ and _02-gpg-api_ demonstrate how a key pair can be generated and used to sign and verify a TRO declaration. - _03-tro-fingerprint-state_ demonstrates how a fingerprint of a given state can be computed. diff --git a/demo/02-tro-examples/03-skope-lbda-processing/products/report.html b/demo/02-tro-examples/03-skope-lbda-processing/products/report.html new file mode 100644 index 0000000..2e234ec --- /dev/null +++ b/demo/02-tro-examples/03-skope-lbda-processing/products/report.html @@ -0,0 +1,114 @@ + + + + + + + + + TRO Report + + +

TRO Report

+

This Transparent Research Object:

Transparent Research Object Instance +
    +
  • TRO ID: tro
  • +
  • TRO Description: Download LBDA dataset from NOAA website and prepare for use by researchers employing the SKOPE application
  • +
  • Digital artifacts: 6
  • +
  • Artifact artifact arrangements: 4
  • +
  • Trusted Research Performances (TRPs): 3
  • +
+ +

Trusted Research System:

Trusted Research System Instance +
    +
  • TRS ID: trs
  • +
  • TRS Description: TRS that can monitor netowrk accesses or provide Internet isolation
  • +
  • Capabilities: 2 (see below)
  • +
+ + + + + + +
idnamedescription
"trs/capability/1""Capability of Recording Internet Access""TRS can record internet access"
"trs/capability/2""Capability of Providing Internet Isolation""TRS can provide Internet isolation"
+ +

Trusted Research Performances (TRPs) and Arrangements:

+ +

Artifacts by Arrangement:

Web Resource Artifact Arrangement Instance +
    +
  • Arrangement ID: arrangement/1
  • +
  • Arrangement Description: Arrangement describing location of LBDA NetCDF file on NOAA web server
  • +
  • Digital artifacts: + + + + +
    nameidlocation
    "LBDA NetCDF file""composition/1/artifact/1""https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc"
    +
  • +
+ Local File System Artifact Arrangement Instance +
    +
  • Arrangement ID: arrangement/2
  • +
  • Arrangement Description: Arrangement on fileserver managed by TRS after downloading dataset and before running Jupyter notebook
  • +
  • Digital artifacts: + + + + + +
    nameidlocation
    "LBDA NetCDF file""composition/1/artifact/1""data/lbda-v2_kddm_pmdi_2017.nc"
    "Initial Notebook""composition/1/artifact/2""analysis.ipynb"
    +
  • +
+ Local File System Artifact Arrangement Instance +
    +
  • Arrangement ID: arrangement/3
  • +
  • Arrangement Description: Arrangement on fileserver managed by TRS after running Jupyter notebook
  • +
  • Digital artifacts: + + + + + + + + +
    nameidlocation
    "LBDA NetCDF file""composition/1/artifact/1""data/lbda-v2_kddm_pmdi_2017.nc"
    "Final Notebook""composition/1/artifact/3""analysis.ipynb"
    "Final Notebook HTML Rendering""composition/1/artifact/4""output/analysis.html"
    "Graphical Histogram Rendering""composition/1/artifact/5""output/histogram.png"
    "LBDA GeoTIFF file""composition/1/artifact/6""output/lbda-v2_kddm_pmdi_2017.tiff"
    +
  • +
+ Zip Artifact Arrangement Instance +
    +
  • Arrangement ID: arrangement/4
  • +
  • Arrangement Description: Arrangement of final products packaged in a Zip file
  • +
  • Digital artifacts: + + + + + + + +
    nameidlocation
    "Final Notebook""composition/1/artifact/3""analysis.ipynb"
    "Final Notebook HTML Rendering""composition/1/artifact/4""analysis.html"
    "Graphical Histogram Rendering""composition/1/artifact/5""histogram.png"
    "LBDA GeoTIFF file""composition/1/artifact/6""lbda-v2_kddm_pmdi_2017.tiff"
    +
  • +
+ +

Artifacts:

+ + + + + + + + + +
nameidmimeTypedescription
"LBDA NetCDF file""composition/1/artifact/1""application/x-netcdf""NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset"
"Initial Notebook""composition/1/artifact/2""text/plain""Initial state of Jupyter notebook for processing the LBDA dataset"
"Final Notebook""composition/1/artifact/3""text/plain""Final state of Jupyter notebook for processing the LBDA dataset"
"Final Notebook HTML Rendering""composition/1/artifact/4""text/html""HTML rendering of final state of the Jupyter notebook"
"Graphical Histogram Rendering""composition/1/artifact/5""image/png""Graphical rendering of the histogram of dataset values"
"LBDA GeoTIFF file""composition/1/artifact/6""image/tiff""GeoTIFF file containing LBDA data cube ready for staging to SKOPE server"
+ + + diff --git a/demo/02-tro-examples/03-skope-lbda-processing/report_file/trp.svg b/demo/02-tro-examples/03-skope-lbda-processing/products/trp.svg similarity index 100% rename from demo/02-tro-examples/03-skope-lbda-processing/report_file/trp.svg rename to demo/02-tro-examples/03-skope-lbda-processing/products/trp.svg diff --git a/demo/02-tro-examples/03-skope-lbda-processing/report_file/arrangement.svg b/demo/02-tro-examples/03-skope-lbda-processing/report_file/arrangement.svg deleted file mode 100644 index 3188850..0000000 --- a/demo/02-tro-examples/03-skope-lbda-processing/report_file/arrangement.svg +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - -arrangement - - - -arrangement/1 - -arrangement/1 - - - -composition/1/artifact/1 - -composition/1/artifact/1 - - - -arrangement/1->composition/1/artifact/1 - - - - - -arrangement/2 - -arrangement/2 - - - -arrangement/2->composition/1/artifact/1 - - - - - -composition/1/artifact/2 - -composition/1/artifact/2 - - - -arrangement/2->composition/1/artifact/2 - - - - - -arrangement/3 - -arrangement/3 - - - -arrangement/3->composition/1/artifact/1 - - - - - -composition/1/artifact/3 - -composition/1/artifact/3 - - - -arrangement/3->composition/1/artifact/3 - - - - - -composition/1/artifact/4 - -composition/1/artifact/4 - - - -arrangement/3->composition/1/artifact/4 - - - - - -composition/1/artifact/5 - -composition/1/artifact/5 - - - -arrangement/3->composition/1/artifact/5 - - - - - -composition/1/artifact/6 - -composition/1/artifact/6 - - - -arrangement/3->composition/1/artifact/6 - - - - - -arrangement/4 - -arrangement/4 - - - -arrangement/4->composition/1/artifact/3 - - - - - -arrangement/4->composition/1/artifact/4 - - - - - -arrangement/4->composition/1/artifact/5 - - - - - -arrangement/4->composition/1/artifact/6 - - - - - diff --git a/demo/02-tro-examples/03-skope-lbda-processing/report_file/overall_tro_graph.html b/demo/02-tro-examples/03-skope-lbda-processing/report_file/overall_tro_graph.html deleted file mode 100644 index 7ebcd4f..0000000 --- a/demo/02-tro-examples/03-skope-lbda-processing/report_file/overall_tro_graph.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - Overall TRO Graph - - -

Overall TRO Graph

- - diff --git a/demo/02-tro-examples/03-skope-lbda-processing/report_file/report.html b/demo/02-tro-examples/03-skope-lbda-processing/report_file/report.html deleted file mode 100644 index b82475e..0000000 --- a/demo/02-tro-examples/03-skope-lbda-processing/report_file/report.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - TRO Report - - -

TRO Report

-

This report shows the TRO of downloading LBDA dataset from NOAA website and preparing for use by researchers employing the SKOPE application. -

1. The TRO was assembled by what TRS?

- - - - -
trotrs
<tro><trs>
- -

2. What capabilities does the TRS have?

- - - - - -
trscapability_idcapability_type
<trs><trs/capability/1><trov:CanRecordInternetAccess>
<trs><trs/capability/2><trov:CanProvideInternetIsolation>
- -

3. What TRPs does the TRO have? What arrangements are accessed and contributed to per TRP accordingly?

- -

4. What artifacts are included in each arrangement?

- -

5. What are the type, comment, mimeType, and sha256 of each artifact? Which composition does it belong to?

- - - - - - - - - -
artifacttypecommentmimeTypesha256composition
<composition/1/artifact/1><trov:DataArtifact>"NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset""application/x-netcdf""b02edb8d27cf9ac19087938dd3d306895e208bd3a9f0458e63292ea2695a1f78"<composition/1>
<composition/1/artifact/2><trov:ComputationalNotebookArtifact>"Initial state of Jupyter notebook for processing the LBDA dataset""text/plain""8fcf663f1c40cbf846d0e5a136f0797fa560545f5d8c1391a5b13406f3814ad6"<composition/1>
<composition/1/artifact/3><trov:ComputationalNotebookArtifact>"Final state of Jupyter notebook for processing the LBDA dataset""text/plain""8cf4f26b27e83a967bd7ddd97a24e6d4b7a9a7a14fff7ffeb47e2fa9085bccaf"<composition/1>
<composition/1/artifact/4><trov:HTMLArtifact>"HTML rendering of final state of the Jupyter notebook""text/html""870c9297ae7439c283697761c90028312cc0312f13182afb0a0125eb29e5f7f0"<composition/1>
<composition/1/artifact/5><trov:ImageArtifact>"Graphical rendering of the histogram of dataset values""image/png""cfc6e4d5e76754d4802d42a2d6ff79a901c7f0e5daccb256cab542bb7953b2bf"<composition/1>
<composition/1/artifact/6><trov:DataArtifact>"GeoTIFF file containing LBDA data cube ready for staging to SKOPE server""image/tiff""e035f3af957c4f761c1d502cc28f91676fbf2bbdf5f7045a7151a6d3ff04789d"<composition/1>
- -

6. Overall graph

- Zoom in the graph - - - - diff --git a/demo/02-tro-examples/03-skope-lbda-processing/report_file/tro.svg b/demo/02-tro-examples/03-skope-lbda-processing/report_file/tro.svg deleted file mode 100644 index 8b4f0ad..0000000 --- a/demo/02-tro-examples/03-skope-lbda-processing/report_file/tro.svg +++ /dev/null @@ -1,1679 +0,0 @@ - - - - - - - - - -<arrangement/1> - -<arrangement/1> - - - -<trov:WebResourceArtifactArrangement> - -<trov:WebResourceArtifactArrangement> - - - -<arrangement/1>-><trov:WebResourceArtifactArrangement> - - -rdf:type - - - -"Arrangement decscribing location of LBDA NetCDF file on NOAA web server" - -"Arrangement decscribing location of LBDA NetCDF file on NOAA web server" - - - -<arrangement/1>->"Arrangement decscribing location of LBDA NetCDF file on NOAA web server" - - -rdfs:comment - - - -<arrangement/1/locus/1> - -<arrangement/1/locus/1> - - - -<arrangement/1>-><arrangement/1/locus/1> - - -trov:hasLocus - - - -<trov:ArtifactLocus> - -<trov:ArtifactLocus> - - - -<arrangement/1/locus/1>-><trov:ArtifactLocus> - - -rdf:type - - - -<composition/1/artifact/1> - -<composition/1/artifact/1> - - - -<arrangement/1/locus/1>-><composition/1/artifact/1> - - -trov:hasArtifact - - - -"https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc" - -"https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc" - - - -<arrangement/1/locus/1>->"https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc" - - -trov:hasLocation - - - -<trov:DataArtifact> - -<trov:DataArtifact> - - - -<composition/1/artifact/1>-><trov:DataArtifact> - - -rdf:type - - - -"NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset" - -"NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset" - - - -<composition/1/artifact/1>->"NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset" - - -rdfs:comment - - - -"application/x-netcdf" - -"application/x-netcdf" - - - -<composition/1/artifact/1>->"application/x-netcdf" - - -trov:mimeType - - - -"b02edb8d27cf9ac19087938dd3d306895e208bd3a9f0458e63292ea2695a1f78" - -"b02edb8d27cf9ac19087938dd3d306895e208bd3a9f0458e63292ea2695a1f78" - - - -<composition/1/artifact/1>->"b02edb8d27cf9ac19087938dd3d306895e208bd3a9f0458e63292ea2695a1f78" - - -trov:sha256 - - - -<arrangement/2> - -<arrangement/2> - - - -<trov:LocalFilesystemArtifactArrangement> - -<trov:LocalFilesystemArtifactArrangement> - - - -<arrangement/2>-><trov:LocalFilesystemArtifactArrangement> - - -rdf:type - - - -"Arrangement on fileserver managed by TRS after downloading dataset and before running Jupyter notebook" - -"Arrangement on fileserver managed by TRS after downloading dataset and before running Jupyter notebook" - - - -<arrangement/2>->"Arrangement on fileserver managed by TRS after downloading dataset and before running Jupyter notebook" - - -rdfs:comment - - - -<arrangement/2/locus/1> - -<arrangement/2/locus/1> - - - -<arrangement/2>-><arrangement/2/locus/1> - - -trov:hasLocus - - - -<arrangement/2/locus/2> - -<arrangement/2/locus/2> - - - -<arrangement/2>-><arrangement/2/locus/2> - - -trov:hasLocus - - - -<arrangement/2/locus/1>-><trov:ArtifactLocus> - - -rdf:type - - - -<arrangement/2/locus/1>-><composition/1/artifact/1> - - -trov:hasArtifact - - - -"data/lbda-v2_kddm_pmdi_2017.nc" - -"data/lbda-v2_kddm_pmdi_2017.nc" - - - -<arrangement/2/locus/1>->"data/lbda-v2_kddm_pmdi_2017.nc" - - -trov:hasLocation - - - -<arrangement/2/locus/2>-><trov:ArtifactLocus> - - -rdf:type - - - -<composition/1/artifact/2> - -<composition/1/artifact/2> - - - -<arrangement/2/locus/2>-><composition/1/artifact/2> - - -trov:hasArtifact - - - -"analysis.ipynb" - -"analysis.ipynb" - - - -<arrangement/2/locus/2>->"analysis.ipynb" - - -trov:hasLocation - - - -<trov:ComputationalNotebookArtifact> - -<trov:ComputationalNotebookArtifact> - - - -<composition/1/artifact/2>-><trov:ComputationalNotebookArtifact> - - -rdf:type - - - -"Initial state of Jupyter notebook for processing the LBDA dataset" - -"Initial state of Jupyter notebook for processing the LBDA dataset" - - - -<composition/1/artifact/2>->"Initial state of Jupyter notebook for processing the LBDA dataset" - - -rdfs:comment - - - -"text/plain" - -"text/plain" - - - -<composition/1/artifact/2>->"text/plain" - - -trov:mimeType - - - -"8fcf663f1c40cbf846d0e5a136f0797fa560545f5d8c1391a5b13406f3814ad6" - -"8fcf663f1c40cbf846d0e5a136f0797fa560545f5d8c1391a5b13406f3814ad6" - - - -<composition/1/artifact/2>->"8fcf663f1c40cbf846d0e5a136f0797fa560545f5d8c1391a5b13406f3814ad6" - - -trov:sha256 - - - -<arrangement/3> - -<arrangement/3> - - - -<arrangement/3>-><trov:LocalFilesystemArtifactArrangement> - - -rdf:type - - - -"Arrangement on fileserver managed by TRS after running Jupyter notebook" - -"Arrangement on fileserver managed by TRS after running Jupyter notebook" - - - -<arrangement/3>->"Arrangement on fileserver managed by TRS after running Jupyter notebook" - - -rdfs:comment - - - -<arrangement/3/locus/1> - -<arrangement/3/locus/1> - - - -<arrangement/3>-><arrangement/3/locus/1> - - -trov:hasLocus - - - -<arrangement/3/locus/2> - -<arrangement/3/locus/2> - - - -<arrangement/3>-><arrangement/3/locus/2> - - -trov:hasLocus - - - -<arrangement/3/locus/3> - -<arrangement/3/locus/3> - - - -<arrangement/3>-><arrangement/3/locus/3> - - -trov:hasLocus - - - -<arrangement/3/locus/4> - -<arrangement/3/locus/4> - - - -<arrangement/3>-><arrangement/3/locus/4> - - -trov:hasLocus - - - -<arrangement/3/locus/5> - -<arrangement/3/locus/5> - - - -<arrangement/3>-><arrangement/3/locus/5> - - -trov:hasLocus - - - -<arrangement/3/locus/1>-><trov:ArtifactLocus> - - -rdf:type - - - -<arrangement/3/locus/1>-><composition/1/artifact/1> - - -trov:hasArtifact - - - -<arrangement/3/locus/1>->"data/lbda-v2_kddm_pmdi_2017.nc" - - -trov:hasLocation - - - -<arrangement/3/locus/2>-><trov:ArtifactLocus> - - -rdf:type - - - -<arrangement/3/locus/2>->"analysis.ipynb" - - -trov:hasLocation - - - -<composition/1/artifact/3> - -<composition/1/artifact/3> - - - -<arrangement/3/locus/2>-><composition/1/artifact/3> - - -trov:hasArtifact - - - -<arrangement/3/locus/3>-><trov:ArtifactLocus> - - -rdf:type - - - -<composition/1/artifact/4> - -<composition/1/artifact/4> - - - -<arrangement/3/locus/3>-><composition/1/artifact/4> - - -trov:hasArtifact - - - -"output/analysis.html" - -"output/analysis.html" - - - -<arrangement/3/locus/3>->"output/analysis.html" - - -trov:hasLocation - - - -<arrangement/3/locus/4>-><trov:ArtifactLocus> - - -rdf:type - - - -<composition/1/artifact/5> - -<composition/1/artifact/5> - - - -<arrangement/3/locus/4>-><composition/1/artifact/5> - - -trov:hasArtifact - - - -"output/histogram.png" - -"output/histogram.png" - - - -<arrangement/3/locus/4>->"output/histogram.png" - - -trov:hasLocation - - - -<arrangement/3/locus/5>-><trov:ArtifactLocus> - - -rdf:type - - - -<composition/1/artifact/6> - -<composition/1/artifact/6> - - - -<arrangement/3/locus/5>-><composition/1/artifact/6> - - -trov:hasArtifact - - - -"lbda-v2_kddm_pmdi_2017.tiff" - -"lbda-v2_kddm_pmdi_2017.tiff" - - - -<arrangement/3/locus/5>->"lbda-v2_kddm_pmdi_2017.tiff" - - -trov:hasLocation - - - -"output/lbda-v2_kddm_pmdi_2017.tiff" - -"output/lbda-v2_kddm_pmdi_2017.tiff" - - - -<arrangement/3/locus/5>->"output/lbda-v2_kddm_pmdi_2017.tiff" - - -trov:hasLocation - - - -<composition/1/artifact/3>-><trov:ComputationalNotebookArtifact> - - -rdf:type - - - -<composition/1/artifact/3>->"text/plain" - - -trov:mimeType - - - -"Final state of Jupyter notebook for processing the LBDA dataset" - -"Final state of Jupyter notebook for processing the LBDA dataset" - - - -<composition/1/artifact/3>->"Final state of Jupyter notebook for processing the LBDA dataset" - - -rdfs:comment - - - -"8cf4f26b27e83a967bd7ddd97a24e6d4b7a9a7a14fff7ffeb47e2fa9085bccaf" - -"8cf4f26b27e83a967bd7ddd97a24e6d4b7a9a7a14fff7ffeb47e2fa9085bccaf" - - - -<composition/1/artifact/3>->"8cf4f26b27e83a967bd7ddd97a24e6d4b7a9a7a14fff7ffeb47e2fa9085bccaf" - - -trov:sha256 - - - -<trov:HTMLArtifact> - -<trov:HTMLArtifact> - - - -<composition/1/artifact/4>-><trov:HTMLArtifact> - - -rdf:type - - - -"HTML rendering of final state of the Jupyter notebook" - -"HTML rendering of final state of the Jupyter notebook" - - - -<composition/1/artifact/4>->"HTML rendering of final state of the Jupyter notebook" - - -rdfs:comment - - - -"text/html" - -"text/html" - - - -<composition/1/artifact/4>->"text/html" - - -trov:mimeType - - - -"870c9297ae7439c283697761c90028312cc0312f13182afb0a0125eb29e5f7f0" - -"870c9297ae7439c283697761c90028312cc0312f13182afb0a0125eb29e5f7f0" - - - -<composition/1/artifact/4>->"870c9297ae7439c283697761c90028312cc0312f13182afb0a0125eb29e5f7f0" - - -trov:sha256 - - - -<trov:ImageArtifact> - -<trov:ImageArtifact> - - - -<composition/1/artifact/5>-><trov:ImageArtifact> - - -rdf:type - - - -"Graphical rendering of the histogram of dataset values" - -"Graphical rendering of the histogram of dataset values" - - - -<composition/1/artifact/5>->"Graphical rendering of the histogram of dataset values" - - -rdfs:comment - - - -"image/png" - -"image/png" - - - -<composition/1/artifact/5>->"image/png" - - -trov:mimeType - - - -"cfc6e4d5e76754d4802d42a2d6ff79a901c7f0e5daccb256cab542bb7953b2bf" - -"cfc6e4d5e76754d4802d42a2d6ff79a901c7f0e5daccb256cab542bb7953b2bf" - - - -<composition/1/artifact/5>->"cfc6e4d5e76754d4802d42a2d6ff79a901c7f0e5daccb256cab542bb7953b2bf" - - -trov:sha256 - - - -<composition/1/artifact/6>-><trov:DataArtifact> - - -rdf:type - - - -"GeoTIFF file containing LBDA data cube ready for staging to SKOPE server" - -"GeoTIFF file containing LBDA data cube ready for staging to SKOPE server" - - - -<composition/1/artifact/6>->"GeoTIFF file containing LBDA data cube ready for staging to SKOPE server" - - -rdfs:comment - - - -"image/tiff" - -"image/tiff" - - - -<composition/1/artifact/6>->"image/tiff" - - -trov:mimeType - - - -"e035f3af957c4f761c1d502cc28f91676fbf2bbdf5f7045a7151a6d3ff04789d" - -"e035f3af957c4f761c1d502cc28f91676fbf2bbdf5f7045a7151a6d3ff04789d" - - - -<composition/1/artifact/6>->"e035f3af957c4f761c1d502cc28f91676fbf2bbdf5f7045a7151a6d3ff04789d" - - -trov:sha256 - - - -<arrangement/4> - -<arrangement/4> - - - -<arrangement/4>-><arrangement/3/locus/5> - - -trov:hasLocus - - - -<trov:ZipArtifactArrangement> - -<trov:ZipArtifactArrangement> - - - -<arrangement/4>-><trov:ZipArtifactArrangement> - - -rdf:type - - - -"Arrangement of final products packaged in a Zip file" - -"Arrangement of final products packaged in a Zip file" - - - -<arrangement/4>->"Arrangement of final products packaged in a Zip file" - - -rdfs:comment - - - -<arrangement/4/locus/1> - -<arrangement/4/locus/1> - - - -<arrangement/4>-><arrangement/4/locus/1> - - -trov:hasLocus - - - -<arrangement/4/locus/2> - -<arrangement/4/locus/2> - - - -<arrangement/4>-><arrangement/4/locus/2> - - -trov:hasLocus - - - -<arrangement/4/locus/3> - -<arrangement/4/locus/3> - - - -<arrangement/4>-><arrangement/4/locus/3> - - -trov:hasLocus - - - -<arrangement/4/locus/1>-><trov:ArtifactLocus> - - -rdf:type - - - -<arrangement/4/locus/1>->"analysis.ipynb" - - -trov:hasLocation - - - -<arrangement/4/locus/1>-><composition/1/artifact/3> - - -trov:hasArtifact - - - -<arrangement/4/locus/2>-><trov:ArtifactLocus> - - -rdf:type - - - -<arrangement/4/locus/2>-><composition/1/artifact/4> - - -trov:hasArtifact - - - -"analysis.html" - -"analysis.html" - - - -<arrangement/4/locus/2>->"analysis.html" - - -trov:hasLocation - - - -<arrangement/4/locus/3>-><trov:ArtifactLocus> - - -rdf:type - - - -<arrangement/4/locus/3>-><composition/1/artifact/5> - - -trov:hasArtifact - - - -"histogram.png" - -"histogram.png" - - - -<arrangement/4/locus/3>->"histogram.png" - - -trov:hasLocation - - - -<composition/1> - -<composition/1> - - - -<composition/1>-><composition/1/artifact/1> - - -trov:hasArtifact - - - -<composition/1>-><composition/1/artifact/2> - - -trov:hasArtifact - - - -<composition/1>-><composition/1/artifact/3> - - -trov:hasArtifact - - - -<composition/1>-><composition/1/artifact/4> - - -trov:hasArtifact - - - -<composition/1>-><composition/1/artifact/5> - - -trov:hasArtifact - - - -<composition/1>-><composition/1/artifact/6> - - -trov:hasArtifact - - - -<trov:ArtifactComposition> - -<trov:ArtifactComposition> - - - -<composition/1>-><trov:ArtifactComposition> - - -rdf:type - - - -<fingerprint> - -<fingerprint> - - - -<composition/1>-><fingerprint> - - -trov:hasFingerprint - - - -<trov:CompositionFingerprint> - -<trov:CompositionFingerprint> - - - -<fingerprint>-><trov:CompositionFingerprint> - - -rdf:type - - - -"b2b65040893f35d112979c564121c7425f4aad10838aadcb232be5db715ec2b2" - -"b2b65040893f35d112979c564121c7425f4aad10838aadcb232be5db715ec2b2" - - - -<fingerprint>->"b2b65040893f35d112979c564121c7425f4aad10838aadcb232be5db715ec2b2" - - -trov:sha256 - - - -<tro> - -<tro> - - - -<tro>-><arrangement/1> - - -trov:hasArrangement - - - -<tro>-><arrangement/2> - - -trov:hasArrangement - - - -<tro>-><arrangement/3> - - -trov:hasArrangement - - - -<tro>-><arrangement/4> - - -trov:hasArrangement - - - -<tro>-><composition/1> - - -trov:hasComposition - - - -<trov:TransparentResearchObject> - -<trov:TransparentResearchObject> - - - -<tro>-><trov:TransparentResearchObject> - - -rdf:type - - - -"Download LBDA dataset from NOAA website and prepare for use by researchers employing the SKOPE application" - -"Download LBDA dataset from NOAA website and prepare for use by researchers employing the SKOPE application" - - - -<tro>->"Download LBDA dataset from NOAA website and prepare for use by researchers employing the SKOPE application" - - -rdfs:comment - - - -<tro/attribute/1> - -<tro/attribute/1> - - - -<tro>-><tro/attribute/1> - - -trov:hasAttribute - - - -<trp/1> - -<trp/1> - - - -<tro>-><trp/1> - - -trov:hasPerformance - - - -<trp/2> - -<trp/2> - - - -<tro>-><trp/2> - - -trov:hasPerformance - - - -<trp/3> - -<trp/3> - - - -<tro>-><trp/3> - - -trov:hasPerformance - - - -<trs> - -<trs> - - - -<tro>-><trs> - - -trov:wasAssembledBy - - - -<tsa> - -<tsa> - - - -<tro>-><tsa> - - -trov:wasTimestampedBy - - - -<trov:IncludesAllInputData> - -<trov:IncludesAllInputData> - - - -<tro/attribute/1>-><trov:IncludesAllInputData> - - -rdf:type - - - -<trp/1/attribute/1> - -<trp/1/attribute/1> - - - -<tro/attribute/1>-><trp/1/attribute/1> - - -trov:warrantedBy - - - -<trp/2/attribute/1> - -<trp/2/attribute/1> - - - -<tro/attribute/1>-><trp/2/attribute/1> - - -trov:warrantedBy - - - -<trp/3/attribute/1> - -<trp/3/attribute/1> - - - -<tro/attribute/1>-><trp/3/attribute/1> - - -trov:warrantedBy - - - -<trp/1>-><arrangement/1> - - -trov:accessedArrangement - - - -<trp/1>-><arrangement/2> - - -trov:contributedToArrangement - - - -<trp/1>-><trs> - - -trov:wasConductedBy - - - -<trp/1>-><trp/1/attribute/1> - - -trov:hadPerformanceAttribute - - - -<trov:TrustedResearchPerformance> - -<trov:TrustedResearchPerformance> - - - -<trp/1>-><trov:TrustedResearchPerformance> - - -rdf:type - - - -"Process that downloaded the LBDA NetCDF file from NOAA server to local filesystem" - -"Process that downloaded the LBDA NetCDF file from NOAA server to local filesystem" - - - -<trp/1>->"Process that downloaded the LBDA NetCDF file from NOAA server to local filesystem" - - -rdfs:comment - - - -"2023-05-08T01:40:00Z" - -"2023-05-08T01:40:00Z" - - - -<trp/1>->"2023-05-08T01:40:00Z" - - -trov:endedAtTime - - - -"2023-05-08T01:30:00Z" - -"2023-05-08T01:30:00Z" - - - -<trp/1>->"2023-05-08T01:30:00Z" - - -trov:startedAtTime - - - -<trp/2>-><arrangement/2> - - -trov:accessedArrangement - - - -<trp/2>-><arrangement/3> - - -trov:contributedToArrangement - - - -<trp/2>-><trs> - - -trov:wasConductedBy - - - -<trp/2>-><trp/2/attribute/1> - - -trov:hadPerformanceAttribute - - - -<trp/2>-><trov:TrustedResearchPerformance> - - -rdf:type - - - -"Process that ran Jupyter notebook" - -"Process that ran Jupyter notebook" - - - -<trp/2>->"Process that ran Jupyter notebook" - - -rdfs:comment - - - -"2023-05-08T01:50:00Z" - -"2023-05-08T01:50:00Z" - - - -<trp/2>->"2023-05-08T01:50:00Z" - - -trov:endedAtTime - - - -"2023-05-08T01:41:00Z" - -"2023-05-08T01:41:00Z" - - - -<trp/2>->"2023-05-08T01:41:00Z" - - -trov:startedAtTime - - - -<trp/3>-><arrangement/3> - - -trov:accessedArrangement - - - -<trp/3>-><arrangement/4> - - -trov:contributedToArrangement - - - -<trp/3>-><trs> - - -trov:wasConductedBy - - - -<trp/3>-><trp/3/attribute/1> - - -trov:hadPerformanceAttribute - - - -<trp/3>-><trov:TrustedResearchPerformance> - - -rdf:type - - - -"Process that packaged products of the Jupyter notebook execution in a Zip file" - -"Process that packaged products of the Jupyter notebook execution in a Zip file" - - - -<trp/3>->"Process that packaged products of the Jupyter notebook execution in a Zip file" - - -rdfs:comment - - - -"2023-05-08T02:00:00Z" - -"2023-05-08T02:00:00Z" - - - -<trp/3>->"2023-05-08T02:00:00Z" - - -trov:endedAtTime - - - -"2023-05-08T01:51:00Z" - -"2023-05-08T01:51:00Z" - - - -<trp/3>->"2023-05-08T01:51:00Z" - - -trov:startedAtTime - - - -<trs/capability/1> - -<trs/capability/1> - - - -<trs>-><trs/capability/1> - - -trov:hasCapability - - - -<trs/capability/2> - -<trs/capability/2> - - - -<trs>-><trs/capability/2> - - -trov:hasCapability - - - -<trov:TrustedResearchSystem> - -<trov:TrustedResearchSystem> - - - -<trs>-><trov:TrustedResearchSystem> - - -rdf:type - - - -"TRS that can monitor netowrk accesses or provide Internet isolation" - -"TRS that can monitor netowrk accesses or provide Internet isolation" - - - -<trs>->"TRS that can monitor netowrk accesses or provide Internet isolation" - - -rdfs:comment - - - -"-----BEGIN PGP PUBLIC KEY BLOCK----- -mI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f -PFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6 -TbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0 -HXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb -HbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK -CRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS -xrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N -IsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg== -=vuaX ------END PGP PUBLIC KEY BLOCK----- -" - -"-----BEGIN PGP PUBLIC KEY BLOCK----- -mI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f -PFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6 -TbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0 -HXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb -HbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK -CRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS -xrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N -IsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg== -=vuaX ------END PGP PUBLIC KEY BLOCK----- -" - - - -<trs>->"-----BEGIN PGP PUBLIC KEY BLOCK----- -mI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f -PFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6 -TbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0 -HXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb -HbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK -CRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS -xrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N -IsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg== -=vuaX ------END PGP PUBLIC KEY BLOCK----- -" - - -trov:publicKey - - - -<tsa>->"-----BEGIN PGP PUBLIC KEY BLOCK----- -mI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f -PFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6 -TbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0 -HXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb -HbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK -CRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS -xrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N -IsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg== -=vuaX ------END PGP PUBLIC KEY BLOCK----- -" - - -trov:publicKey - - - -<trov:TimeStampingAuthority> - -<trov:TimeStampingAuthority> - - - -<tsa>-><trov:TimeStampingAuthority> - - -rdf:type - - - -<trp/1/attribute/1>-><trs/capability/1> - - -trov:warrantedBy - - - -<trov:InternetAccessRecording> - -<trov:InternetAccessRecording> - - - -<trp/1/attribute/1>-><trov:InternetAccessRecording> - - -rdf:type - - - -<trp/2/attribute/1>-><trs/capability/2> - - -trov:warrantedBy - - - -<trov:InternetIsolation> - -<trov:InternetIsolation> - - - -<trp/2/attribute/1>-><trov:InternetIsolation> - - -rdf:type - - - -<trp/3/attribute/1>-><trs/capability/2> - - -trov:warrantedBy - - - -<trp/3/attribute/1>-><trov:InternetIsolation> - - -rdf:type - - - -<trov:CanRecordInternetAccess> - -<trov:CanRecordInternetAccess> - - - -<trs/capability/1>-><trov:CanRecordInternetAccess> - - -rdf:type - - - -<trov:CanProvideInternetIsolation> - -<trov:CanProvideInternetIsolation> - - - -<trs/capability/2>-><trov:CanProvideInternetIsolation> - - -rdf:type - - - diff --git a/demo/02-tro-examples/03-skope-lbda-processing/report_inline/arrangement.svg b/demo/02-tro-examples/03-skope-lbda-processing/report_inline/arrangement.svg deleted file mode 100644 index 3188850..0000000 --- a/demo/02-tro-examples/03-skope-lbda-processing/report_inline/arrangement.svg +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - -arrangement - - - -arrangement/1 - -arrangement/1 - - - -composition/1/artifact/1 - -composition/1/artifact/1 - - - -arrangement/1->composition/1/artifact/1 - - - - - -arrangement/2 - -arrangement/2 - - - -arrangement/2->composition/1/artifact/1 - - - - - -composition/1/artifact/2 - -composition/1/artifact/2 - - - -arrangement/2->composition/1/artifact/2 - - - - - -arrangement/3 - -arrangement/3 - - - -arrangement/3->composition/1/artifact/1 - - - - - -composition/1/artifact/3 - -composition/1/artifact/3 - - - -arrangement/3->composition/1/artifact/3 - - - - - -composition/1/artifact/4 - -composition/1/artifact/4 - - - -arrangement/3->composition/1/artifact/4 - - - - - -composition/1/artifact/5 - -composition/1/artifact/5 - - - -arrangement/3->composition/1/artifact/5 - - - - - -composition/1/artifact/6 - -composition/1/artifact/6 - - - -arrangement/3->composition/1/artifact/6 - - - - - -arrangement/4 - -arrangement/4 - - - -arrangement/4->composition/1/artifact/3 - - - - - -arrangement/4->composition/1/artifact/4 - - - - - -arrangement/4->composition/1/artifact/5 - - - - - -arrangement/4->composition/1/artifact/6 - - - - - diff --git a/demo/02-tro-examples/03-skope-lbda-processing/report_inline/overall_tro_graph.html b/demo/02-tro-examples/03-skope-lbda-processing/report_inline/overall_tro_graph.html deleted file mode 100644 index ab6347d..0000000 --- a/demo/02-tro-examples/03-skope-lbda-processing/report_inline/overall_tro_graph.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - Overall TRO Graph - - -

Overall TRO Graph

- - diff --git a/demo/02-tro-examples/03-skope-lbda-processing/report_inline/report.html b/demo/02-tro-examples/03-skope-lbda-processing/report_inline/report.html deleted file mode 100644 index b82475e..0000000 --- a/demo/02-tro-examples/03-skope-lbda-processing/report_inline/report.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - TRO Report - - -

TRO Report

-

This report shows the TRO of downloading LBDA dataset from NOAA website and preparing for use by researchers employing the SKOPE application. -

1. The TRO was assembled by what TRS?

- - - - -
trotrs
<tro><trs>
- -

2. What capabilities does the TRS have?

- - - - - -
trscapability_idcapability_type
<trs><trs/capability/1><trov:CanRecordInternetAccess>
<trs><trs/capability/2><trov:CanProvideInternetIsolation>
- -

3. What TRPs does the TRO have? What arrangements are accessed and contributed to per TRP accordingly?

- -

4. What artifacts are included in each arrangement?

- -

5. What are the type, comment, mimeType, and sha256 of each artifact? Which composition does it belong to?

- - - - - - - - - -
artifacttypecommentmimeTypesha256composition
<composition/1/artifact/1><trov:DataArtifact>"NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset""application/x-netcdf""b02edb8d27cf9ac19087938dd3d306895e208bd3a9f0458e63292ea2695a1f78"<composition/1>
<composition/1/artifact/2><trov:ComputationalNotebookArtifact>"Initial state of Jupyter notebook for processing the LBDA dataset""text/plain""8fcf663f1c40cbf846d0e5a136f0797fa560545f5d8c1391a5b13406f3814ad6"<composition/1>
<composition/1/artifact/3><trov:ComputationalNotebookArtifact>"Final state of Jupyter notebook for processing the LBDA dataset""text/plain""8cf4f26b27e83a967bd7ddd97a24e6d4b7a9a7a14fff7ffeb47e2fa9085bccaf"<composition/1>
<composition/1/artifact/4><trov:HTMLArtifact>"HTML rendering of final state of the Jupyter notebook""text/html""870c9297ae7439c283697761c90028312cc0312f13182afb0a0125eb29e5f7f0"<composition/1>
<composition/1/artifact/5><trov:ImageArtifact>"Graphical rendering of the histogram of dataset values""image/png""cfc6e4d5e76754d4802d42a2d6ff79a901c7f0e5daccb256cab542bb7953b2bf"<composition/1>
<composition/1/artifact/6><trov:DataArtifact>"GeoTIFF file containing LBDA data cube ready for staging to SKOPE server""image/tiff""e035f3af957c4f761c1d502cc28f91676fbf2bbdf5f7045a7151a6d3ff04789d"<composition/1>
- -

6. Overall graph

- Zoom in the graph - - - - diff --git a/demo/02-tro-examples/03-skope-lbda-processing/report_inline/tro.svg b/demo/02-tro-examples/03-skope-lbda-processing/report_inline/tro.svg deleted file mode 100644 index 8b4f0ad..0000000 --- a/demo/02-tro-examples/03-skope-lbda-processing/report_inline/tro.svg +++ /dev/null @@ -1,1679 +0,0 @@ - - - - - - - - - -<arrangement/1> - -<arrangement/1> - - - -<trov:WebResourceArtifactArrangement> - -<trov:WebResourceArtifactArrangement> - - - -<arrangement/1>-><trov:WebResourceArtifactArrangement> - - -rdf:type - - - -"Arrangement decscribing location of LBDA NetCDF file on NOAA web server" - -"Arrangement decscribing location of LBDA NetCDF file on NOAA web server" - - - -<arrangement/1>->"Arrangement decscribing location of LBDA NetCDF file on NOAA web server" - - -rdfs:comment - - - -<arrangement/1/locus/1> - -<arrangement/1/locus/1> - - - -<arrangement/1>-><arrangement/1/locus/1> - - -trov:hasLocus - - - -<trov:ArtifactLocus> - -<trov:ArtifactLocus> - - - -<arrangement/1/locus/1>-><trov:ArtifactLocus> - - -rdf:type - - - -<composition/1/artifact/1> - -<composition/1/artifact/1> - - - -<arrangement/1/locus/1>-><composition/1/artifact/1> - - -trov:hasArtifact - - - -"https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc" - -"https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc" - - - -<arrangement/1/locus/1>->"https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc" - - -trov:hasLocation - - - -<trov:DataArtifact> - -<trov:DataArtifact> - - - -<composition/1/artifact/1>-><trov:DataArtifact> - - -rdf:type - - - -"NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset" - -"NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset" - - - -<composition/1/artifact/1>->"NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset" - - -rdfs:comment - - - -"application/x-netcdf" - -"application/x-netcdf" - - - -<composition/1/artifact/1>->"application/x-netcdf" - - -trov:mimeType - - - -"b02edb8d27cf9ac19087938dd3d306895e208bd3a9f0458e63292ea2695a1f78" - -"b02edb8d27cf9ac19087938dd3d306895e208bd3a9f0458e63292ea2695a1f78" - - - -<composition/1/artifact/1>->"b02edb8d27cf9ac19087938dd3d306895e208bd3a9f0458e63292ea2695a1f78" - - -trov:sha256 - - - -<arrangement/2> - -<arrangement/2> - - - -<trov:LocalFilesystemArtifactArrangement> - -<trov:LocalFilesystemArtifactArrangement> - - - -<arrangement/2>-><trov:LocalFilesystemArtifactArrangement> - - -rdf:type - - - -"Arrangement on fileserver managed by TRS after downloading dataset and before running Jupyter notebook" - -"Arrangement on fileserver managed by TRS after downloading dataset and before running Jupyter notebook" - - - -<arrangement/2>->"Arrangement on fileserver managed by TRS after downloading dataset and before running Jupyter notebook" - - -rdfs:comment - - - -<arrangement/2/locus/1> - -<arrangement/2/locus/1> - - - -<arrangement/2>-><arrangement/2/locus/1> - - -trov:hasLocus - - - -<arrangement/2/locus/2> - -<arrangement/2/locus/2> - - - -<arrangement/2>-><arrangement/2/locus/2> - - -trov:hasLocus - - - -<arrangement/2/locus/1>-><trov:ArtifactLocus> - - -rdf:type - - - -<arrangement/2/locus/1>-><composition/1/artifact/1> - - -trov:hasArtifact - - - -"data/lbda-v2_kddm_pmdi_2017.nc" - -"data/lbda-v2_kddm_pmdi_2017.nc" - - - -<arrangement/2/locus/1>->"data/lbda-v2_kddm_pmdi_2017.nc" - - -trov:hasLocation - - - -<arrangement/2/locus/2>-><trov:ArtifactLocus> - - -rdf:type - - - -<composition/1/artifact/2> - -<composition/1/artifact/2> - - - -<arrangement/2/locus/2>-><composition/1/artifact/2> - - -trov:hasArtifact - - - -"analysis.ipynb" - -"analysis.ipynb" - - - -<arrangement/2/locus/2>->"analysis.ipynb" - - -trov:hasLocation - - - -<trov:ComputationalNotebookArtifact> - -<trov:ComputationalNotebookArtifact> - - - -<composition/1/artifact/2>-><trov:ComputationalNotebookArtifact> - - -rdf:type - - - -"Initial state of Jupyter notebook for processing the LBDA dataset" - -"Initial state of Jupyter notebook for processing the LBDA dataset" - - - -<composition/1/artifact/2>->"Initial state of Jupyter notebook for processing the LBDA dataset" - - -rdfs:comment - - - -"text/plain" - -"text/plain" - - - -<composition/1/artifact/2>->"text/plain" - - -trov:mimeType - - - -"8fcf663f1c40cbf846d0e5a136f0797fa560545f5d8c1391a5b13406f3814ad6" - -"8fcf663f1c40cbf846d0e5a136f0797fa560545f5d8c1391a5b13406f3814ad6" - - - -<composition/1/artifact/2>->"8fcf663f1c40cbf846d0e5a136f0797fa560545f5d8c1391a5b13406f3814ad6" - - -trov:sha256 - - - -<arrangement/3> - -<arrangement/3> - - - -<arrangement/3>-><trov:LocalFilesystemArtifactArrangement> - - -rdf:type - - - -"Arrangement on fileserver managed by TRS after running Jupyter notebook" - -"Arrangement on fileserver managed by TRS after running Jupyter notebook" - - - -<arrangement/3>->"Arrangement on fileserver managed by TRS after running Jupyter notebook" - - -rdfs:comment - - - -<arrangement/3/locus/1> - -<arrangement/3/locus/1> - - - -<arrangement/3>-><arrangement/3/locus/1> - - -trov:hasLocus - - - -<arrangement/3/locus/2> - -<arrangement/3/locus/2> - - - -<arrangement/3>-><arrangement/3/locus/2> - - -trov:hasLocus - - - -<arrangement/3/locus/3> - -<arrangement/3/locus/3> - - - -<arrangement/3>-><arrangement/3/locus/3> - - -trov:hasLocus - - - -<arrangement/3/locus/4> - -<arrangement/3/locus/4> - - - -<arrangement/3>-><arrangement/3/locus/4> - - -trov:hasLocus - - - -<arrangement/3/locus/5> - -<arrangement/3/locus/5> - - - -<arrangement/3>-><arrangement/3/locus/5> - - -trov:hasLocus - - - -<arrangement/3/locus/1>-><trov:ArtifactLocus> - - -rdf:type - - - -<arrangement/3/locus/1>-><composition/1/artifact/1> - - -trov:hasArtifact - - - -<arrangement/3/locus/1>->"data/lbda-v2_kddm_pmdi_2017.nc" - - -trov:hasLocation - - - -<arrangement/3/locus/2>-><trov:ArtifactLocus> - - -rdf:type - - - -<arrangement/3/locus/2>->"analysis.ipynb" - - -trov:hasLocation - - - -<composition/1/artifact/3> - -<composition/1/artifact/3> - - - -<arrangement/3/locus/2>-><composition/1/artifact/3> - - -trov:hasArtifact - - - -<arrangement/3/locus/3>-><trov:ArtifactLocus> - - -rdf:type - - - -<composition/1/artifact/4> - -<composition/1/artifact/4> - - - -<arrangement/3/locus/3>-><composition/1/artifact/4> - - -trov:hasArtifact - - - -"output/analysis.html" - -"output/analysis.html" - - - -<arrangement/3/locus/3>->"output/analysis.html" - - -trov:hasLocation - - - -<arrangement/3/locus/4>-><trov:ArtifactLocus> - - -rdf:type - - - -<composition/1/artifact/5> - -<composition/1/artifact/5> - - - -<arrangement/3/locus/4>-><composition/1/artifact/5> - - -trov:hasArtifact - - - -"output/histogram.png" - -"output/histogram.png" - - - -<arrangement/3/locus/4>->"output/histogram.png" - - -trov:hasLocation - - - -<arrangement/3/locus/5>-><trov:ArtifactLocus> - - -rdf:type - - - -<composition/1/artifact/6> - -<composition/1/artifact/6> - - - -<arrangement/3/locus/5>-><composition/1/artifact/6> - - -trov:hasArtifact - - - -"lbda-v2_kddm_pmdi_2017.tiff" - -"lbda-v2_kddm_pmdi_2017.tiff" - - - -<arrangement/3/locus/5>->"lbda-v2_kddm_pmdi_2017.tiff" - - -trov:hasLocation - - - -"output/lbda-v2_kddm_pmdi_2017.tiff" - -"output/lbda-v2_kddm_pmdi_2017.tiff" - - - -<arrangement/3/locus/5>->"output/lbda-v2_kddm_pmdi_2017.tiff" - - -trov:hasLocation - - - -<composition/1/artifact/3>-><trov:ComputationalNotebookArtifact> - - -rdf:type - - - -<composition/1/artifact/3>->"text/plain" - - -trov:mimeType - - - -"Final state of Jupyter notebook for processing the LBDA dataset" - -"Final state of Jupyter notebook for processing the LBDA dataset" - - - -<composition/1/artifact/3>->"Final state of Jupyter notebook for processing the LBDA dataset" - - -rdfs:comment - - - -"8cf4f26b27e83a967bd7ddd97a24e6d4b7a9a7a14fff7ffeb47e2fa9085bccaf" - -"8cf4f26b27e83a967bd7ddd97a24e6d4b7a9a7a14fff7ffeb47e2fa9085bccaf" - - - -<composition/1/artifact/3>->"8cf4f26b27e83a967bd7ddd97a24e6d4b7a9a7a14fff7ffeb47e2fa9085bccaf" - - -trov:sha256 - - - -<trov:HTMLArtifact> - -<trov:HTMLArtifact> - - - -<composition/1/artifact/4>-><trov:HTMLArtifact> - - -rdf:type - - - -"HTML rendering of final state of the Jupyter notebook" - -"HTML rendering of final state of the Jupyter notebook" - - - -<composition/1/artifact/4>->"HTML rendering of final state of the Jupyter notebook" - - -rdfs:comment - - - -"text/html" - -"text/html" - - - -<composition/1/artifact/4>->"text/html" - - -trov:mimeType - - - -"870c9297ae7439c283697761c90028312cc0312f13182afb0a0125eb29e5f7f0" - -"870c9297ae7439c283697761c90028312cc0312f13182afb0a0125eb29e5f7f0" - - - -<composition/1/artifact/4>->"870c9297ae7439c283697761c90028312cc0312f13182afb0a0125eb29e5f7f0" - - -trov:sha256 - - - -<trov:ImageArtifact> - -<trov:ImageArtifact> - - - -<composition/1/artifact/5>-><trov:ImageArtifact> - - -rdf:type - - - -"Graphical rendering of the histogram of dataset values" - -"Graphical rendering of the histogram of dataset values" - - - -<composition/1/artifact/5>->"Graphical rendering of the histogram of dataset values" - - -rdfs:comment - - - -"image/png" - -"image/png" - - - -<composition/1/artifact/5>->"image/png" - - -trov:mimeType - - - -"cfc6e4d5e76754d4802d42a2d6ff79a901c7f0e5daccb256cab542bb7953b2bf" - -"cfc6e4d5e76754d4802d42a2d6ff79a901c7f0e5daccb256cab542bb7953b2bf" - - - -<composition/1/artifact/5>->"cfc6e4d5e76754d4802d42a2d6ff79a901c7f0e5daccb256cab542bb7953b2bf" - - -trov:sha256 - - - -<composition/1/artifact/6>-><trov:DataArtifact> - - -rdf:type - - - -"GeoTIFF file containing LBDA data cube ready for staging to SKOPE server" - -"GeoTIFF file containing LBDA data cube ready for staging to SKOPE server" - - - -<composition/1/artifact/6>->"GeoTIFF file containing LBDA data cube ready for staging to SKOPE server" - - -rdfs:comment - - - -"image/tiff" - -"image/tiff" - - - -<composition/1/artifact/6>->"image/tiff" - - -trov:mimeType - - - -"e035f3af957c4f761c1d502cc28f91676fbf2bbdf5f7045a7151a6d3ff04789d" - -"e035f3af957c4f761c1d502cc28f91676fbf2bbdf5f7045a7151a6d3ff04789d" - - - -<composition/1/artifact/6>->"e035f3af957c4f761c1d502cc28f91676fbf2bbdf5f7045a7151a6d3ff04789d" - - -trov:sha256 - - - -<arrangement/4> - -<arrangement/4> - - - -<arrangement/4>-><arrangement/3/locus/5> - - -trov:hasLocus - - - -<trov:ZipArtifactArrangement> - -<trov:ZipArtifactArrangement> - - - -<arrangement/4>-><trov:ZipArtifactArrangement> - - -rdf:type - - - -"Arrangement of final products packaged in a Zip file" - -"Arrangement of final products packaged in a Zip file" - - - -<arrangement/4>->"Arrangement of final products packaged in a Zip file" - - -rdfs:comment - - - -<arrangement/4/locus/1> - -<arrangement/4/locus/1> - - - -<arrangement/4>-><arrangement/4/locus/1> - - -trov:hasLocus - - - -<arrangement/4/locus/2> - -<arrangement/4/locus/2> - - - -<arrangement/4>-><arrangement/4/locus/2> - - -trov:hasLocus - - - -<arrangement/4/locus/3> - -<arrangement/4/locus/3> - - - -<arrangement/4>-><arrangement/4/locus/3> - - -trov:hasLocus - - - -<arrangement/4/locus/1>-><trov:ArtifactLocus> - - -rdf:type - - - -<arrangement/4/locus/1>->"analysis.ipynb" - - -trov:hasLocation - - - -<arrangement/4/locus/1>-><composition/1/artifact/3> - - -trov:hasArtifact - - - -<arrangement/4/locus/2>-><trov:ArtifactLocus> - - -rdf:type - - - -<arrangement/4/locus/2>-><composition/1/artifact/4> - - -trov:hasArtifact - - - -"analysis.html" - -"analysis.html" - - - -<arrangement/4/locus/2>->"analysis.html" - - -trov:hasLocation - - - -<arrangement/4/locus/3>-><trov:ArtifactLocus> - - -rdf:type - - - -<arrangement/4/locus/3>-><composition/1/artifact/5> - - -trov:hasArtifact - - - -"histogram.png" - -"histogram.png" - - - -<arrangement/4/locus/3>->"histogram.png" - - -trov:hasLocation - - - -<composition/1> - -<composition/1> - - - -<composition/1>-><composition/1/artifact/1> - - -trov:hasArtifact - - - -<composition/1>-><composition/1/artifact/2> - - -trov:hasArtifact - - - -<composition/1>-><composition/1/artifact/3> - - -trov:hasArtifact - - - -<composition/1>-><composition/1/artifact/4> - - -trov:hasArtifact - - - -<composition/1>-><composition/1/artifact/5> - - -trov:hasArtifact - - - -<composition/1>-><composition/1/artifact/6> - - -trov:hasArtifact - - - -<trov:ArtifactComposition> - -<trov:ArtifactComposition> - - - -<composition/1>-><trov:ArtifactComposition> - - -rdf:type - - - -<fingerprint> - -<fingerprint> - - - -<composition/1>-><fingerprint> - - -trov:hasFingerprint - - - -<trov:CompositionFingerprint> - -<trov:CompositionFingerprint> - - - -<fingerprint>-><trov:CompositionFingerprint> - - -rdf:type - - - -"b2b65040893f35d112979c564121c7425f4aad10838aadcb232be5db715ec2b2" - -"b2b65040893f35d112979c564121c7425f4aad10838aadcb232be5db715ec2b2" - - - -<fingerprint>->"b2b65040893f35d112979c564121c7425f4aad10838aadcb232be5db715ec2b2" - - -trov:sha256 - - - -<tro> - -<tro> - - - -<tro>-><arrangement/1> - - -trov:hasArrangement - - - -<tro>-><arrangement/2> - - -trov:hasArrangement - - - -<tro>-><arrangement/3> - - -trov:hasArrangement - - - -<tro>-><arrangement/4> - - -trov:hasArrangement - - - -<tro>-><composition/1> - - -trov:hasComposition - - - -<trov:TransparentResearchObject> - -<trov:TransparentResearchObject> - - - -<tro>-><trov:TransparentResearchObject> - - -rdf:type - - - -"Download LBDA dataset from NOAA website and prepare for use by researchers employing the SKOPE application" - -"Download LBDA dataset from NOAA website and prepare for use by researchers employing the SKOPE application" - - - -<tro>->"Download LBDA dataset from NOAA website and prepare for use by researchers employing the SKOPE application" - - -rdfs:comment - - - -<tro/attribute/1> - -<tro/attribute/1> - - - -<tro>-><tro/attribute/1> - - -trov:hasAttribute - - - -<trp/1> - -<trp/1> - - - -<tro>-><trp/1> - - -trov:hasPerformance - - - -<trp/2> - -<trp/2> - - - -<tro>-><trp/2> - - -trov:hasPerformance - - - -<trp/3> - -<trp/3> - - - -<tro>-><trp/3> - - -trov:hasPerformance - - - -<trs> - -<trs> - - - -<tro>-><trs> - - -trov:wasAssembledBy - - - -<tsa> - -<tsa> - - - -<tro>-><tsa> - - -trov:wasTimestampedBy - - - -<trov:IncludesAllInputData> - -<trov:IncludesAllInputData> - - - -<tro/attribute/1>-><trov:IncludesAllInputData> - - -rdf:type - - - -<trp/1/attribute/1> - -<trp/1/attribute/1> - - - -<tro/attribute/1>-><trp/1/attribute/1> - - -trov:warrantedBy - - - -<trp/2/attribute/1> - -<trp/2/attribute/1> - - - -<tro/attribute/1>-><trp/2/attribute/1> - - -trov:warrantedBy - - - -<trp/3/attribute/1> - -<trp/3/attribute/1> - - - -<tro/attribute/1>-><trp/3/attribute/1> - - -trov:warrantedBy - - - -<trp/1>-><arrangement/1> - - -trov:accessedArrangement - - - -<trp/1>-><arrangement/2> - - -trov:contributedToArrangement - - - -<trp/1>-><trs> - - -trov:wasConductedBy - - - -<trp/1>-><trp/1/attribute/1> - - -trov:hadPerformanceAttribute - - - -<trov:TrustedResearchPerformance> - -<trov:TrustedResearchPerformance> - - - -<trp/1>-><trov:TrustedResearchPerformance> - - -rdf:type - - - -"Process that downloaded the LBDA NetCDF file from NOAA server to local filesystem" - -"Process that downloaded the LBDA NetCDF file from NOAA server to local filesystem" - - - -<trp/1>->"Process that downloaded the LBDA NetCDF file from NOAA server to local filesystem" - - -rdfs:comment - - - -"2023-05-08T01:40:00Z" - -"2023-05-08T01:40:00Z" - - - -<trp/1>->"2023-05-08T01:40:00Z" - - -trov:endedAtTime - - - -"2023-05-08T01:30:00Z" - -"2023-05-08T01:30:00Z" - - - -<trp/1>->"2023-05-08T01:30:00Z" - - -trov:startedAtTime - - - -<trp/2>-><arrangement/2> - - -trov:accessedArrangement - - - -<trp/2>-><arrangement/3> - - -trov:contributedToArrangement - - - -<trp/2>-><trs> - - -trov:wasConductedBy - - - -<trp/2>-><trp/2/attribute/1> - - -trov:hadPerformanceAttribute - - - -<trp/2>-><trov:TrustedResearchPerformance> - - -rdf:type - - - -"Process that ran Jupyter notebook" - -"Process that ran Jupyter notebook" - - - -<trp/2>->"Process that ran Jupyter notebook" - - -rdfs:comment - - - -"2023-05-08T01:50:00Z" - -"2023-05-08T01:50:00Z" - - - -<trp/2>->"2023-05-08T01:50:00Z" - - -trov:endedAtTime - - - -"2023-05-08T01:41:00Z" - -"2023-05-08T01:41:00Z" - - - -<trp/2>->"2023-05-08T01:41:00Z" - - -trov:startedAtTime - - - -<trp/3>-><arrangement/3> - - -trov:accessedArrangement - - - -<trp/3>-><arrangement/4> - - -trov:contributedToArrangement - - - -<trp/3>-><trs> - - -trov:wasConductedBy - - - -<trp/3>-><trp/3/attribute/1> - - -trov:hadPerformanceAttribute - - - -<trp/3>-><trov:TrustedResearchPerformance> - - -rdf:type - - - -"Process that packaged products of the Jupyter notebook execution in a Zip file" - -"Process that packaged products of the Jupyter notebook execution in a Zip file" - - - -<trp/3>->"Process that packaged products of the Jupyter notebook execution in a Zip file" - - -rdfs:comment - - - -"2023-05-08T02:00:00Z" - -"2023-05-08T02:00:00Z" - - - -<trp/3>->"2023-05-08T02:00:00Z" - - -trov:endedAtTime - - - -"2023-05-08T01:51:00Z" - -"2023-05-08T01:51:00Z" - - - -<trp/3>->"2023-05-08T01:51:00Z" - - -trov:startedAtTime - - - -<trs/capability/1> - -<trs/capability/1> - - - -<trs>-><trs/capability/1> - - -trov:hasCapability - - - -<trs/capability/2> - -<trs/capability/2> - - - -<trs>-><trs/capability/2> - - -trov:hasCapability - - - -<trov:TrustedResearchSystem> - -<trov:TrustedResearchSystem> - - - -<trs>-><trov:TrustedResearchSystem> - - -rdf:type - - - -"TRS that can monitor netowrk accesses or provide Internet isolation" - -"TRS that can monitor netowrk accesses or provide Internet isolation" - - - -<trs>->"TRS that can monitor netowrk accesses or provide Internet isolation" - - -rdfs:comment - - - -"-----BEGIN PGP PUBLIC KEY BLOCK----- -mI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f -PFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6 -TbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0 -HXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb -HbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK -CRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS -xrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N -IsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg== -=vuaX ------END PGP PUBLIC KEY BLOCK----- -" - -"-----BEGIN PGP PUBLIC KEY BLOCK----- -mI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f -PFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6 -TbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0 -HXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb -HbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK -CRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS -xrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N -IsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg== -=vuaX ------END PGP PUBLIC KEY BLOCK----- -" - - - -<trs>->"-----BEGIN PGP PUBLIC KEY BLOCK----- -mI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f -PFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6 -TbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0 -HXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb -HbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK -CRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS -xrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N -IsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg== -=vuaX ------END PGP PUBLIC KEY BLOCK----- -" - - -trov:publicKey - - - -<tsa>->"-----BEGIN PGP PUBLIC KEY BLOCK----- -mI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f -PFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6 -TbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0 -HXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb -HbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK -CRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS -xrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N -IsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg== -=vuaX ------END PGP PUBLIC KEY BLOCK----- -" - - -trov:publicKey - - - -<trov:TimeStampingAuthority> - -<trov:TimeStampingAuthority> - - - -<tsa>-><trov:TimeStampingAuthority> - - -rdf:type - - - -<trp/1/attribute/1>-><trs/capability/1> - - -trov:warrantedBy - - - -<trov:InternetAccessRecording> - -<trov:InternetAccessRecording> - - - -<trp/1/attribute/1>-><trov:InternetAccessRecording> - - -rdf:type - - - -<trp/2/attribute/1>-><trs/capability/2> - - -trov:warrantedBy - - - -<trov:InternetIsolation> - -<trov:InternetIsolation> - - - -<trp/2/attribute/1>-><trov:InternetIsolation> - - -rdf:type - - - -<trp/3/attribute/1>-><trs/capability/2> - - -trov:warrantedBy - - - -<trp/3/attribute/1>-><trov:InternetIsolation> - - -rdf:type - - - -<trov:CanRecordInternetAccess> - -<trov:CanRecordInternetAccess> - - - -<trs/capability/1>-><trov:CanRecordInternetAccess> - - -rdf:type - - - -<trov:CanProvideInternetIsolation> - -<trov:CanProvideInternetIsolation> - - - -<trs/capability/2>-><trov:CanProvideInternetIsolation> - - -rdf:type - - - diff --git a/demo/02-tro-examples/03-skope-lbda-processing/report_inline/trp.svg b/demo/02-tro-examples/03-skope-lbda-processing/report_inline/trp.svg deleted file mode 100644 index 149853f..0000000 --- a/demo/02-tro-examples/03-skope-lbda-processing/report_inline/trp.svg +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - -trp - - - -arrangement/1 - -arrangement/1 - - - -arrangement/2 - -arrangement/2 - - - -arrangement/1->arrangement/2 - - -<trp/1> - - - -arrangement/3 - -arrangement/3 - - - -arrangement/2->arrangement/3 - - -<trp/2> - - - -arrangement/4 - -arrangement/4 - - - -arrangement/3->arrangement/4 - - -<trp/3> - - - diff --git a/demo/02-tro-examples/03-skope-lbda-processing/run.sh b/demo/02-tro-examples/03-skope-lbda-processing/run.sh index 522fb7e..5604e9f 100644 --- a/demo/02-tro-examples/03-skope-lbda-processing/run.sh +++ b/demo/02-tro-examples/03-skope-lbda-processing/run.sh @@ -4,41 +4,46 @@ source ../common/query-tro.sh # ------------------------------------------------------------------------------ -bash_cell tro_report_inline << END_CELL +bash_cell tro_report << END_CELL -geist report --outputroot report_inline << END_TEMPLATE +geist report --outputroot products << END_TEMPLATE {%- use "templates.geist" %} {%- create %} tro/tro.jsonld {% endcreate %} -{%- html "overall_tro_graph.html" %} -{%- head "Overall TRO Graph" %} - - -

Overall TRO Graph

- {%- graph dataset="kb", rankdir="LR", mappings="mappings.json" as tro_graph %} - {% img src="tro.svg" %} {{ tro_graph }} {% endimg %} - - -{% endhtml %} - {%- html "report.html" %} {%- head "TRO Report" %}

TRO Report

-

This report shows the TRO of downloading LBDA dataset from NOAA website and preparing for use by researchers employing the SKOPE application. -

1. The TRO was assembled by what TRS?

- {%- table mappings="mappings.json" %} - {% query_tro_trs_str %} - {% endtable %} - -

2. What capabilities does the TRS have?

- {%- table mappings="mappings.json" %} - {% query_trs_capability_str %} - {% endtable %} - -

3. What TRPs does the TRO have? What arrangements are accessed and contributed to per TRP accordingly?

+

This Transparent Research Object:

+ {%- map isfilepath=False, mappings="mappings.json" as query_tro_shorten %} {% query_tro_str %} {% endmap %} + {%- set query_tro = query_tro_shorten | json2df %} + {% for _, row in query_tro.iterrows() %} + {{ row["tro_name"][1:-1] }} +
    +
  • TRO ID: {{ row["tro_id"][1:-1] }}
  • +
  • TRO Description: {{ row["tro_descr"][1:-1] }}
  • +
  • Digital artifacts: {{ row["num_of_artifacts"][1:-1] }}
  • +
  • Artifact artifact arrangements: {{ row["num_of_arrs"][1:-1] }}
  • +
  • Trusted Research Performances (TRPs): {{ row["num_of_trps"][1:-1] }}
  • +
+ {% endfor %} + +

Trusted Research System:

+ {%- map isfilepath=False, mappings="mappings.json" as query_trs_shorten %} {% query_trs_str %} {% endmap %} + {%- set query_trs = query_trs_shorten | json2df %} + {% for _, row in query_trs.iterrows() %} + {{ row["trs_name"][1:-1] }} +
    +
  • TRS ID: {{ row["trs_id"][1:-1] }}
  • +
  • TRS Description: {{ row["trs_descr"][1:-1] }}
  • +
  • Capabilities: {{ row["num_of_capabilities"][1:-1] }} (see below)
  • +
+ {% endfor %} + {%- table mappings="mappings.json" %}{% query_trs_capability_str %}{% endtable %} + +

Trusted Research Performances (TRPs) and Arrangements:

{% img src="trp.svg" %} {%- gv_graph "trp", "LR" %} nodesep=0.6 @@ -51,27 +56,31 @@ geist report --outputroot report_inline << END_TEMPLATE {% gv_end %} {% endimg %} -

4. What artifacts are included in each arrangement?

- {% img src="arrangement.svg" %} - {%- gv_graph "arrangement", "LR" %} - nodesep=0.6 - node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] - {%- map isfilepath=False, mappings="mappings.json" as query_arrangement_shorten %} {% query_arrangement_str %} {% endmap %} - {%- set query_arrangement = query_arrangement_shorten | json2df %} - {% for _, row in query_arrangement.iterrows() %} - {% gv_edge row["arrangement"], row["artifact"] %} - {% endfor %} - {% gv_end %} - {% endimg %} - -

5. What are the type, comment, mimeType, and sha256 of each artifact? Which composition does it belong to?

- {%- table mappings="mappings.json" %} - {% query_artifact_str %} - {% endtable %} - -

6. Overall graph

- Zoom in the graph - +

Artifacts by Arrangement:

+ {%- query isfilepath=False as query_arrangement_str %} + SELECT DISTINCT ?arrangement (STR(?arrangement) AS ?id) ?name ?descr + WHERE { + ?tro rdf:type trov:TransparentResearchObject . + ?tro trov:hasArrangement ?arrangement . + ?arrangement rdfs:label ?name . + ?arrangement rdfs:comment ?descr . + } + ORDER BY ?arrangement + {% endquery %} + {%- set query_arrangement = query_arrangement_str | json2df %} + {%- map isfilepath=False, mappings="mappings.json" as query_arrangement_shorten_str %} {{ query_arrangement_str }} {% endmap %} + {%- set query_arrangement_shorten = query_arrangement_shorten_str | json2df %} + {% for idx, row in query_arrangement_shorten.iterrows() %} + {{ row["name"][1:-1] }} +
    +
  • Arrangement ID: {{ row["id"][1:-1] }}
  • +
  • Arrangement Description: {{ row["descr"][1:-1] }}
  • +
  • Digital artifacts: {%- table mappings="mappings.json" %}{% query_artifacts_by_arrangement_str query_arrangement.loc[idx, "arrangement"] %}{% endtable %}
  • +
+ {% endfor %} + +

Artifacts:

+ {%- table mappings="mappings.json" %}{% query_artifact_str %}{% endtable %} {% endhtml %} @@ -83,11 +92,3 @@ END_TEMPLATE END_CELL # ------------------------------------------------------------------------------ - -bash_cell tro_report_file << END_CELL - -geist report --file tro_report --outputroot report_file - -END_CELL - -# ------------------------------------------------------------------------------ diff --git a/demo/02-tro-examples/03-skope-lbda-processing/run.txt b/demo/02-tro-examples/03-skope-lbda-processing/run.txt index 163fe31..66b1059 100644 --- a/demo/02-tro-examples/03-skope-lbda-processing/run.txt +++ b/demo/02-tro-examples/03-skope-lbda-processing/run.txt @@ -246,41 +246,46 @@ geist destroy --dataset kb ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -================================================== bash cell | tro_report_inline =================================================== +====================================================== bash cell | tro_report ====================================================== -geist report --outputroot report_inline << END_TEMPLATE +geist report --outputroot products << END_TEMPLATE {%- use "templates.geist" %} {%- create %} tro/tro.jsonld {% endcreate %} -{%- html "overall_tro_graph.html" %} -{%- head "Overall TRO Graph" %} - - -

Overall TRO Graph

- {%- graph dataset="kb", rankdir="LR", mappings="mappings.json" as tro_graph %} - {% img src="tro.svg" %} {{ tro_graph }} {% endimg %} - - -{% endhtml %} - {%- html "report.html" %} {%- head "TRO Report" %}

TRO Report

-

This report shows the TRO of downloading LBDA dataset from NOAA website and preparing for use by researchers employing the SKOPE application. -

1. The TRO was assembled by what TRS?

- {%- table mappings="mappings.json" %} - {% query_tro_trs_str %} - {% endtable %} - -

2. What capabilities does the TRS have?

- {%- table mappings="mappings.json" %} - {% query_trs_capability_str %} - {% endtable %} - -

3. What TRPs does the TRO have? What arrangements are accessed and contributed to per TRP accordingly?

+

This Transparent Research Object:

+ {%- map isfilepath=False, mappings="mappings.json" as query_tro_shorten %} {% query_tro_str %} {% endmap %} + {%- set query_tro = query_tro_shorten | json2df %} + {% for _, row in query_tro.iterrows() %} + {{ row["tro_name"][1:-1] }} +
    +
  • TRO ID: {{ row["tro_id"][1:-1] }}
  • +
  • TRO Description: {{ row["tro_descr"][1:-1] }}
  • +
  • Digital artifacts: {{ row["num_of_artifacts"][1:-1] }}
  • +
  • Artifact artifact arrangements: {{ row["num_of_arrs"][1:-1] }}
  • +
  • Trusted Research Performances (TRPs): {{ row["num_of_trps"][1:-1] }}
  • +
+ {% endfor %} + +

Trusted Research System:

+ {%- map isfilepath=False, mappings="mappings.json" as query_trs_shorten %} {% query_trs_str %} {% endmap %} + {%- set query_trs = query_trs_shorten | json2df %} + {% for _, row in query_trs.iterrows() %} + {{ row["trs_name"][1:-1] }} +
    +
  • TRS ID: {{ row["trs_id"][1:-1] }}
  • +
  • TRS Description: {{ row["trs_descr"][1:-1] }}
  • +
  • Capabilities: {{ row["num_of_capabilities"][1:-1] }} (see below)
  • +
+ {% endfor %} + {%- table mappings="mappings.json" %}{% query_trs_capability_str %}{% endtable %} + +

Trusted Research Performances (TRPs) and Arrangements:

{% img src="trp.svg" %} {%- gv_graph "trp", "LR" %} nodesep=0.6 @@ -293,27 +298,31 @@ geist report --outputroot report_inline << END_TEMPLATE {% gv_end %} {% endimg %} -

4. What artifacts are included in each arrangement?

- {% img src="arrangement.svg" %} - {%- gv_graph "arrangement", "LR" %} - nodesep=0.6 - node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] - {%- map isfilepath=False, mappings="mappings.json" as query_arrangement_shorten %} {% query_arrangement_str %} {% endmap %} - {%- set query_arrangement = query_arrangement_shorten | json2df %} - {% for _, row in query_arrangement.iterrows() %} - {% gv_edge row["arrangement"], row["artifact"] %} - {% endfor %} - {% gv_end %} - {% endimg %} - -

5. What are the type, comment, mimeType, and sha256 of each artifact? Which composition does it belong to?

- {%- table mappings="mappings.json" %} - {% query_artifact_str %} - {% endtable %} - -

6. Overall graph

- Zoom in the graph - +

Artifacts by Arrangement:

+ {%- query isfilepath=False as query_arrangement_str %} + SELECT DISTINCT ?arrangement (STR(?arrangement) AS ?id) ?name ?descr + WHERE { + ?tro rdf:type trov:TransparentResearchObject . + ?tro trov:hasArrangement ?arrangement . + ?arrangement rdfs:label ?name . + ?arrangement rdfs:comment ?descr . + } + ORDER BY ?arrangement + {% endquery %} + {%- set query_arrangement = query_arrangement_str | json2df %} + {%- map isfilepath=False, mappings="mappings.json" as query_arrangement_shorten_str %} {{ query_arrangement_str }} {% endmap %} + {%- set query_arrangement_shorten = query_arrangement_shorten_str | json2df %} + {% for idx, row in query_arrangement_shorten.iterrows() %} + {{ row["name"][1:-1] }} +
    +
  • Arrangement ID: {{ row["id"][1:-1] }}
  • +
  • Arrangement Description: {{ row["descr"][1:-1] }}
  • +
  • Digital artifacts: {%- table mappings="mappings.json" %}{% query_artifacts_by_arrangement_str query_arrangement.loc[idx, "arrangement"] %}{% endtable %}
  • +
+ {% endfor %} + +

Artifacts:

+ {%- table mappings="mappings.json" %}{% query_artifact_str %}{% endtable %} {% endhtml %} @@ -324,26 +333,6 @@ END_TEMPLATE ----------------------------------------------------------- cell outputs ----------------------------------------------------------- - - - - - - - - Overall TRO Graph - - -

Overall TRO Graph

- - - @@ -361,127 +350,100 @@ END_TEMPLATE

TRO Report

-

This report shows the TRO of downloading LBDA dataset from NOAA website and preparing for use by researchers employing the SKOPE application. -

1. The TRO was assembled by what TRS?

- - +

This Transparent Research Object:

Transparent Research Object Instance +
    +
  • TRO ID: tro
  • +
  • TRO Description: Download LBDA dataset from NOAA website and prepare for use by researchers employing the SKOPE application
  • +
  • Digital artifacts: 6
  • +
  • Artifact artifact arrangements: 4
  • +
  • Trusted Research Performances (TRPs): 3
  • +
+ +

Trusted Research System:

Trusted Research System Instance +
    +
  • TRS ID: trs
  • +
  • TRS Description: TRS that can monitor netowrk accesses or provide Internet isolation
  • +
  • Capabilities: 2 (see below)
  • +
- -
trotrs
<tro><trs>
- -

2. What capabilities does the TRS have?

- + - - + +
trscapability_idcapability_type
idnamedescription
<trs><trs/capability/1><trov:CanRecordInternetAccess>
<trs><trs/capability/2><trov:CanProvideInternetIsolation>
"trs/capability/1""Capability of Recording Internet Access""TRS can record internet access"
"trs/capability/2""Capability of Providing Internet Isolation""TRS can provide Internet isolation"
-

3. What TRPs does the TRO have? What arrangements are accessed and contributed to per TRP accordingly?

+

Trusted Research Performances (TRPs) and Arrangements:

-

4. What artifacts are included in each arrangement?

- -

5. What are the type, comment, mimeType, and sha256 of each artifact? Which composition does it belong to?

+

Artifacts by Arrangement:

Web Resource Artifact Arrangement Instance +
    +
  • Arrangement ID: arrangement/1
  • +
  • Arrangement Description: Arrangement describing location of LBDA NetCDF file on NOAA web server
  • +
  • Digital artifacts: - + - - - - - - +
    artifacttypecommentmimeTypesha256composition
    nameidlocation
    <composition/1/artifact/1><trov:DataArtifact>"NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset""application/x-netcdf""b02edb8d27cf9ac19087938dd3d306895e208bd3a9f0458e63292ea2695a1f78"<composition/1>
    <composition/1/artifact/2><trov:ComputationalNotebookArtifact>"Initial state of Jupyter notebook for processing the LBDA dataset""text/plain""8fcf663f1c40cbf846d0e5a136f0797fa560545f5d8c1391a5b13406f3814ad6"<composition/1>
    <composition/1/artifact/3><trov:ComputationalNotebookArtifact>"Final state of Jupyter notebook for processing the LBDA dataset""text/plain""8cf4f26b27e83a967bd7ddd97a24e6d4b7a9a7a14fff7ffeb47e2fa9085bccaf"<composition/1>
    <composition/1/artifact/4><trov:HTMLArtifact>"HTML rendering of final state of the Jupyter notebook""text/html""870c9297ae7439c283697761c90028312cc0312f13182afb0a0125eb29e5f7f0"<composition/1>
    <composition/1/artifact/5><trov:ImageArtifact>"Graphical rendering of the histogram of dataset values""image/png""cfc6e4d5e76754d4802d42a2d6ff79a901c7f0e5daccb256cab542bb7953b2bf"<composition/1>
    <composition/1/artifact/6><trov:DataArtifact>"GeoTIFF file containing LBDA data cube ready for staging to SKOPE server""image/tiff""e035f3af957c4f761c1d502cc28f91676fbf2bbdf5f7045a7151a6d3ff04789d"<composition/1>
    "LBDA NetCDF file""composition/1/artifact/1""https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc"
    - -

    6. Overall graph

    - Zoom in the graph - - - - - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -=================================================== bash cell | tro_report_file ==================================================== - -geist report --file tro_report --outputroot report_file - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- - - - - - - - - - Overall TRO Graph - - -

    Overall TRO Graph

    - - - - - - - - - - - TRO Report - - -

    TRO Report

    -

    This report shows the TRO of downloading LBDA dataset from NOAA website and preparing for use by researchers employing the SKOPE application. -

    1. The TRO was assembled by what TRS?

    +
  • +
+ Local File System Artifact Arrangement Instance +
    +
  • Arrangement ID: arrangement/2
  • +
  • Arrangement Description: Arrangement on fileserver managed by TRS after downloading dataset and before running Jupyter notebook
  • +
  • Digital artifacts: - + - + +
    trotrs
    nameidlocation
    <tro><trs>
    "LBDA NetCDF file""composition/1/artifact/1""data/lbda-v2_kddm_pmdi_2017.nc"
    "Initial Notebook""composition/1/artifact/2""analysis.ipynb"
    - -

    2. What capabilities does the TRS have?

    +
  • +
+ Local File System Artifact Arrangement Instance +
    +
  • Arrangement ID: arrangement/3
  • +
  • Arrangement Description: Arrangement on fileserver managed by TRS after running Jupyter notebook
  • +
  • Digital artifacts: - + - - + + + + +
    trscapability_idcapability_type
    nameidlocation
    <trs><trs/capability/1><trov:CanRecordInternetAccess>
    <trs><trs/capability/2><trov:CanProvideInternetIsolation>
    "LBDA NetCDF file""composition/1/artifact/1""data/lbda-v2_kddm_pmdi_2017.nc"
    "Final Notebook""composition/1/artifact/3""analysis.ipynb"
    "Final Notebook HTML Rendering""composition/1/artifact/4""output/analysis.html"
    "Graphical Histogram Rendering""composition/1/artifact/5""output/histogram.png"
    "LBDA GeoTIFF file""composition/1/artifact/6""output/lbda-v2_kddm_pmdi_2017.tiff"
    - -

    3. What TRPs does the TRO have? What arrangements are accessed and contributed to per TRP accordingly?

    - -

    4. What artifacts are included in each arrangement?

    - -

    5. What are the type, comment, mimeType, and sha256 of each artifact? Which composition does it belong to?

    +
  • +
+ Zip Artifact Arrangement Instance +
    +
  • Arrangement ID: arrangement/4
  • +
  • Arrangement Description: Arrangement of final products packaged in a Zip file
  • +
  • Digital artifacts: - + - - - - - - + + + + +
    artifacttypecommentmimeTypesha256composition
    nameidlocation
    <composition/1/artifact/1><trov:DataArtifact>"NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset""application/x-netcdf""b02edb8d27cf9ac19087938dd3d306895e208bd3a9f0458e63292ea2695a1f78"<composition/1>
    <composition/1/artifact/2><trov:ComputationalNotebookArtifact>"Initial state of Jupyter notebook for processing the LBDA dataset""text/plain""8fcf663f1c40cbf846d0e5a136f0797fa560545f5d8c1391a5b13406f3814ad6"<composition/1>
    <composition/1/artifact/3><trov:ComputationalNotebookArtifact>"Final state of Jupyter notebook for processing the LBDA dataset""text/plain""8cf4f26b27e83a967bd7ddd97a24e6d4b7a9a7a14fff7ffeb47e2fa9085bccaf"<composition/1>
    <composition/1/artifact/4><trov:HTMLArtifact>"HTML rendering of final state of the Jupyter notebook""text/html""870c9297ae7439c283697761c90028312cc0312f13182afb0a0125eb29e5f7f0"<composition/1>
    <composition/1/artifact/5><trov:ImageArtifact>"Graphical rendering of the histogram of dataset values""image/png""cfc6e4d5e76754d4802d42a2d6ff79a901c7f0e5daccb256cab542bb7953b2bf"<composition/1>
    <composition/1/artifact/6><trov:DataArtifact>"GeoTIFF file containing LBDA data cube ready for staging to SKOPE server""image/tiff""e035f3af957c4f761c1d502cc28f91676fbf2bbdf5f7045a7151a6d3ff04789d"<composition/1>
    "Final Notebook""composition/1/artifact/3""analysis.ipynb"
    "Final Notebook HTML Rendering""composition/1/artifact/4""analysis.html"
    "Graphical Histogram Rendering""composition/1/artifact/5""histogram.png"
    "LBDA GeoTIFF file""composition/1/artifact/6""lbda-v2_kddm_pmdi_2017.tiff"
    +
  • +
+ +

Artifacts:

+ + + + + + + + +
nameidmimeTypedescription
"LBDA NetCDF file""composition/1/artifact/1""application/x-netcdf""NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset"
"Initial Notebook""composition/1/artifact/2""text/plain""Initial state of Jupyter notebook for processing the LBDA dataset"
"Final Notebook""composition/1/artifact/3""text/plain""Final state of Jupyter notebook for processing the LBDA dataset"
"Final Notebook HTML Rendering""composition/1/artifact/4""text/html""HTML rendering of final state of the Jupyter notebook"
"Graphical Histogram Rendering""composition/1/artifact/5""image/png""Graphical rendering of the histogram of dataset values"
"LBDA GeoTIFF file""composition/1/artifact/6""image/tiff""GeoTIFF file containing LBDA data cube ready for staging to SKOPE server"
-

6. Overall graph

- Zoom in the graph - - diff --git a/demo/02-tro-examples/03-skope-lbda-processing/templates.geist b/demo/02-tro-examples/03-skope-lbda-processing/templates.geist index 9e6dc63..7b2b454 100644 --- a/demo/02-tro-examples/03-skope-lbda-processing/templates.geist +++ b/demo/02-tro-examples/03-skope-lbda-processing/templates.geist @@ -30,28 +30,73 @@ {{ tail }} -> {{ head }} [label="{{ label }}"] {% endtemplate %} -{% template query_tro_trs_str %} - {%- query isfilepath=False as query_tro_trs_str%} - SELECT DISTINCT ?tro ?trs +{% template query_tro_str %} + {%- query isfilepath=False as query_tro_str %} + SELECT ?tro_name (STR(?tro) AS ?tro_id) ?tro_descr (COUNT(DISTINCT ?artifact) AS ?num_of_artifacts) (COUNT(DISTINCT ?arrangement) AS ?num_of_arrs) (COUNT(DISTINCT ?trp) AS ?num_of_trps) WHERE { - ?tro rdf:type trov:TransparentResearchObject . - ?tro trov:wasAssembledBy ?trs . - ?trs rdf:type trov:TrustedResearchSystem . + ?tro rdf:type trov:TransparentResearchObject . + ?tro rdfs:label ?tro_name . + ?tro rdfs:comment ?tro_descr . + ?tro trov:hasComposition/trov:hasArtifact ?artifact . + ?tro trov:hasArrangement ?arrangement . + ?tro trov:hasPerformance ?trp . + } GROUP BY ?tro + {% endquery %} + {{ query_tro_str }} +{% endtemplate %} + +{% template query_artifacts_by_arrangement_str arrangement %} + {%- query isfilepath=False as query_artifacts_by_arrangement_str %} + SELECT DISTINCT ?name (STR(?artifact) AS ?id) ?location + WHERE { + {{ arrangement }} trov:hasLocus ?locus . + ?locus rdfs:label ?name . + ?locus trov:hasArtifact ?artifact . + ?locus trov:hasLocation ?location . + } + ORDER BY ?artifact + {% endquery %} + {{ query_artifacts_by_arrangement_str }} +{% endtemplate %} + +{% template query_artifact_str %} + {%- query isfilepath=False as query_artifact_str %} + SELECT DISTINCT ?name (STR(?artifact) AS ?id) ?mimeType ?description + WHERE { + ?tro rdf:type trov:TransparentResearchObject . + ?tro trov:hasComposition/trov:hasArtifact ?artifact . + ?artifact rdfs:label ?name . + ?artifact trov:mimeType ?mimeType . + ?artifact rdfs:comment ?description . } - ORDER BY ?tro ?trs + ORDER BY ?artifact {% endquery %} - {{ query_tro_trs_str }} + {{ query_artifact_str }} +{% endtemplate %} + +{% template query_trs_str %} + {%- query isfilepath=False as query_trs_str %} + SELECT ?trs_name (STR(?trs) AS ?trs_id) ?trs_descr (COUNT(DISTINCT ?capability) AS ?num_of_capabilities) + WHERE { + ?trs rdf:type trov:TrustedResearchSystem . + ?trs trov:hasCapability ?capability . + ?trs rdfs:label ?trs_name . + ?trs rdfs:comment ?trs_descr + } GROUP BY ?trs + {% endquery %} + {{ query_trs_str }} {% endtemplate %} {% template query_trs_capability_str %} {%- query isfilepath=False as query_trs_capability_str %} - SELECT DISTINCT ?trs ?capability_id ?capability_type + SELECT DISTINCT (STR(?capability) AS ?id) ?name ?description WHERE { - ?trs rdf:type trov:TrustedResearchSystem . - ?trs trov:hasCapability ?capability_id . - ?capability_id rdf:type ?capability_type . + ?trs rdf:type trov:TrustedResearchSystem . + ?trs trov:hasCapability ?capability . + ?capability rdfs:label ?name . + ?capability rdfs:comment ?description . } - ORDER BY ?trs ?capability_id ?capability_type + ORDER BY ?trs ?capability {% endquery %} {{ query_trs_capability_str }} {% endtemplate %} @@ -68,33 +113,3 @@ {% endquery %} {{ query_trp_str }} {% endtemplate %} - -{% template query_arrangement_str %} - {%- query isfilepath=False as query_arrangement_str %} - SELECT DISTINCT ?arrangement ?artifact - WHERE { - ?tro rdf:type trov:TransparentResearchObject . - ?tro trov:hasArrangement ?arrangement . - ?arrangement trov:hasLocus ?locus . - ?locus trov:hasArtifact ?artifact . - } - ORDER BY ?arrangement ?artifact - {% endquery %} - {{ query_arrangement_str }} -{% endtemplate %} - -{% template query_artifact_str %} - {%- query isfilepath=False as query_artifact_str %} - SELECT DISTINCT ?artifact ?type ?comment ?mimeType ?sha256 ?composition - WHERE { - ?composition rdf:type trov:ArtifactComposition . - ?composition trov:hasArtifact ?artifact . - ?artifact rdf:type ?type . - ?artifact rdfs:comment ?comment . - ?artifact trov:mimeType ?mimeType . - ?artifact trov:sha256 ?sha256 . - } - ORDER BY ?artifact - {% endquery %} - {{ query_artifact_str }} -{% endtemplate %} \ No newline at end of file diff --git a/demo/02-tro-examples/03-skope-lbda-processing/tro/tro.jsonld b/demo/02-tro-examples/03-skope-lbda-processing/tro/tro.jsonld index a89a2e8..8baf0c5 100644 --- a/demo/02-tro-examples/03-skope-lbda-processing/tro/tro.jsonld +++ b/demo/02-tro-examples/03-skope-lbda-processing/tro/tro.jsonld @@ -10,21 +10,27 @@ { "@id": "tro", "@type": "trov:TransparentResearchObject", + "rdfs:label": "Transparent Research Object Instance", "rdfs:comment": "Download LBDA dataset from NOAA website and prepare for use by researchers employing the SKOPE application", "trov:wasAssembledBy": { "@id": "trs", "@type": "trov:TrustedResearchSystem", + "rdfs:label": "Trusted Research System Instance", "rdfs:comment": "TRS that can monitor netowrk accesses or provide Internet isolation", "trov:publicKey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n", "trov:hasCapability": [ { "@id": "trs/capability/1", - "@type": "trov:CanRecordInternetAccess" + "@type": "trov:CanRecordInternetAccess", + "rdfs:label": "Capability of Recording Internet Access", + "rdfs:comment": "TRS can record internet access" }, { "@id": "trs/capability/2", - "@type": "trov:CanProvideInternetIsolation" + "@type": "trov:CanProvideInternetIsolation", + "rdfs:label": "Capability of Providing Internet Isolation", + "rdfs:comment": "TRS can provide Internet isolation" } ] }, @@ -62,6 +68,7 @@ { "@id": "composition/1/artifact/1", "@type": "trov:DataArtifact", + "rdfs:label": "LBDA NetCDF file", "rdfs:comment": "NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset", "trov:mimeType": "application/x-netcdf", "trov:sha256": "b02edb8d27cf9ac19087938dd3d306895e208bd3a9f0458e63292ea2695a1f78" @@ -69,6 +76,7 @@ { "@id": "composition/1/artifact/2", "@type": "trov:ComputationalNotebookArtifact", + "rdfs:label": "Initial Notebook", "rdfs:comment": "Initial state of Jupyter notebook for processing the LBDA dataset", "trov:mimeType": "text/plain", "trov:sha256": "8fcf663f1c40cbf846d0e5a136f0797fa560545f5d8c1391a5b13406f3814ad6" @@ -76,6 +84,7 @@ { "@id": "composition/1/artifact/3", "@type": "trov:ComputationalNotebookArtifact", + "rdfs:label": "Final Notebook", "rdfs:comment": "Final state of Jupyter notebook for processing the LBDA dataset", "trov:mimeType": "text/plain", "trov:sha256": "8cf4f26b27e83a967bd7ddd97a24e6d4b7a9a7a14fff7ffeb47e2fa9085bccaf" @@ -83,6 +92,7 @@ { "@id": "composition/1/artifact/4", "@type": "trov:HTMLArtifact", + "rdfs:label": "Final Notebook HTML Rendering", "rdfs:comment": "HTML rendering of final state of the Jupyter notebook", "trov:mimeType": "text/html", "trov:sha256": "870c9297ae7439c283697761c90028312cc0312f13182afb0a0125eb29e5f7f0" @@ -90,6 +100,7 @@ { "@id": "composition/1/artifact/5", "@type": "trov:ImageArtifact", + "rdfs:label": "Graphical Histogram Rendering", "rdfs:comment": "Graphical rendering of the histogram of dataset values", "trov:mimeType": "image/png", "trov:sha256": "cfc6e4d5e76754d4802d42a2d6ff79a901c7f0e5daccb256cab542bb7953b2bf" @@ -97,6 +108,7 @@ { "@id": "composition/1/artifact/6", "@type": "trov:DataArtifact", + "rdfs:label": "LBDA GeoTIFF file", "rdfs:comment": "GeoTIFF file containing LBDA data cube ready for staging to SKOPE server", "trov:mimeType": "image/tiff", "trov:sha256": "e035f3af957c4f761c1d502cc28f91676fbf2bbdf5f7045a7151a6d3ff04789d" @@ -108,11 +120,13 @@ { "@id": "arrangement/1", "@type": "trov:WebResourceArtifactArrangement", - "rdfs:comment": "Arrangement decscribing location of LBDA NetCDF file on NOAA web server", + "rdfs:label": "Web Resource Artifact Arrangement Instance", + "rdfs:comment": "Arrangement describing location of LBDA NetCDF file on NOAA web server", "trov:hasLocus": [ { "@id": "arrangement/1/locus/1", "@type": "trov:ArtifactLocus", + "rdfs:label": "LBDA NetCDF file", "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, "trov:hasLocation": "https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc" } @@ -121,17 +135,20 @@ { "@id": "arrangement/2", "@type": "trov:LocalFilesystemArtifactArrangement", + "rdfs:label": "Local File System Artifact Arrangement Instance", "rdfs:comment": "Arrangement on fileserver managed by TRS after downloading dataset and before running Jupyter notebook", "trov:hasLocus": [ { "@id": "arrangement/2/locus/1", "@type": "trov:ArtifactLocus", + "rdfs:label": "LBDA NetCDF file", "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, "trov:hasLocation": "data/lbda-v2_kddm_pmdi_2017.nc" }, { "@id": "arrangement/2/locus/2", "@type": "trov:ArtifactLocus", + "rdfs:label": "Initial Notebook", "trov:hasArtifact": { "@id": "composition/1/artifact/2" }, "trov:hasLocation": "analysis.ipynb" } @@ -140,35 +157,41 @@ { "@id": "arrangement/3", "@type": "trov:LocalFilesystemArtifactArrangement", + "rdfs:label": "Local File System Artifact Arrangement Instance", "rdfs:comment": "Arrangement on fileserver managed by TRS after running Jupyter notebook", "trov:hasLocus": [ { "@id": "arrangement/3/locus/1", "@type": "trov:ArtifactLocus", + "rdfs:label": "LBDA NetCDF file", "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, "trov:hasLocation": "data/lbda-v2_kddm_pmdi_2017.nc" }, { "@id": "arrangement/3/locus/2", "@type": "trov:ArtifactLocus", + "rdfs:label": "Final Notebook", "trov:hasArtifact": { "@id": "composition/1/artifact/3" }, "trov:hasLocation": "analysis.ipynb" }, { "@id": "arrangement/3/locus/3", "@type": "trov:ArtifactLocus", + "rdfs:label": "Final Notebook HTML Rendering", "trov:hasArtifact": { "@id": "composition/1/artifact/4" }, "trov:hasLocation": "output/analysis.html" }, { "@id": "arrangement/3/locus/4", "@type": "trov:ArtifactLocus", + "rdfs:label": "Graphical Histogram Rendering", "trov:hasArtifact": { "@id": "composition/1/artifact/5" }, "trov:hasLocation": "output/histogram.png" }, { "@id": "arrangement/3/locus/5", "@type": "trov:ArtifactLocus", + "rdfs:label": "LBDA GeoTIFF file", "trov:hasArtifact": { "@id": "composition/1/artifact/6" }, "trov:hasLocation": "output/lbda-v2_kddm_pmdi_2017.tiff" } @@ -177,29 +200,34 @@ { "@id": "arrangement/4", "@type": "trov:ZipArtifactArrangement", + "rdfs:label": "Zip Artifact Arrangement Instance", "rdfs:comment": "Arrangement of final products packaged in a Zip file", "trov:hasLocus": [ { "@id": "arrangement/4/locus/1", "@type": "trov:ArtifactLocus", + "rdfs:label": "Final Notebook", "trov:hasArtifact": { "@id": "composition/1/artifact/3" }, "trov:hasLocation": "analysis.ipynb" }, { "@id": "arrangement/4/locus/2", "@type": "trov:ArtifactLocus", + "rdfs:label": "Final Notebook HTML Rendering", "trov:hasArtifact": { "@id": "composition/1/artifact/4" }, "trov:hasLocation": "analysis.html" }, { "@id": "arrangement/4/locus/3", "@type": "trov:ArtifactLocus", + "rdfs:label": "Graphical Histogram Rendering", "trov:hasArtifact": { "@id": "composition/1/artifact/5" }, "trov:hasLocation": "histogram.png" }, { - "@id": "arrangement/3/locus/5", + "@id": "arrangement/4/locus/5", "@type": "trov:ArtifactLocus", + "rdfs:label": "LBDA GeoTIFF file", "trov:hasArtifact": { "@id": "composition/1/artifact/6" }, "trov:hasLocation": "lbda-v2_kddm_pmdi_2017.tiff" } diff --git a/demo/02-tro-examples/03-skope-lbda-processing/tro_report b/demo/02-tro-examples/03-skope-lbda-processing/tro_report deleted file mode 100644 index 71233d6..0000000 --- a/demo/02-tro-examples/03-skope-lbda-processing/tro_report +++ /dev/null @@ -1,69 +0,0 @@ -{%- use "templates.geist" %} -{%- create %} tro/tro.jsonld {% endcreate %} - -{%- html "overall_tro_graph.html" %} -{%- head "Overall TRO Graph" %} - - -

Overall TRO Graph

- {%- graph dataset="kb", rankdir="LR", mappings="mappings.json" as tro_graph %} - {% img src="tro.svg" %} {{ tro_graph }} {% endimg %} - - -{% endhtml %} - -{%- html "report.html" %} -{%- head "TRO Report" %} - - -

TRO Report

-

This report shows the TRO of downloading LBDA dataset from NOAA website and preparing for use by researchers employing the SKOPE application. -

1. The TRO was assembled by what TRS?

- {%- table mappings="mappings.json" %} - {% query_tro_trs_str %} - {% endtable %} - -

2. What capabilities does the TRS have?

- {%- table mappings="mappings.json" %} - {% query_trs_capability_str %} - {% endtable %} - -

3. What TRPs does the TRO have? What arrangements are accessed and contributed to per TRP accordingly?

- {% img src="trp.svg" %} - {%- gv_graph "trp", "LR" %} - nodesep=0.6 - node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] - {%- map isfilepath=False, mappings="mappings.json" as query_trp_shorten %} {% query_trp_str %} {% endmap %} - {%- set query_trp = query_trp_shorten | json2df %} - {% for _, row in query_trp.iterrows() %} - {% gv_labeled_edge row["in"], row["out"], row["trp"] %} - {% endfor %} - {% gv_end %} - {% endimg %} - -

4. What artifacts are included in each arrangement?

- {% img src="arrangement.svg" %} - {%- gv_graph "arrangement", "LR" %} - nodesep=0.6 - node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] - {%- map isfilepath=False, mappings="mappings.json" as query_arrangement_shorten %} {% query_arrangement_str %} {% endmap %} - {%- set query_arrangement = query_arrangement_shorten | json2df %} - {% for _, row in query_arrangement.iterrows() %} - {% gv_edge row["arrangement"], row["artifact"] %} - {% endfor %} - {% gv_end %} - {% endimg %} - -

5. What are the type, comment, mimeType, and sha256 of each artifact? Which composition does it belong to?

- {%- table mappings="mappings.json" %} - {% query_artifact_str %} - {% endtable %} - -

6. Overall graph

- Zoom in the graph - - - -{% endhtml %} - -{%- destroy %} \ No newline at end of file From 67910b97aab0cd44f0cf092775c882c02d3ae6bc Mon Sep 17 00:00:00 2001 From: Meng Li <34143965+Meng6@users.noreply.github.com> Date: Mon, 20 Nov 2023 22:49:31 +0000 Subject: [PATCH 13/22] Update demos based on geist v0.0.2 --- demo/01-trov-vocab/products/img.gv | 26 ++--- .../products/report_subclass.html | 52 +++++----- demo/01-trov-vocab/run.txt | 52 +++++----- .../01-two-artifacts-no-trp/run.txt | 18 ++-- .../02-three-artifacts-one-trp/run.txt | 18 ++-- .../products/report.html | 40 ++++---- .../03-skope-lbda-processing/run.sh | 36 +++---- .../03-skope-lbda-processing/run.txt | 94 +++++++++---------- 8 files changed, 168 insertions(+), 168 deletions(-) diff --git a/demo/01-trov-vocab/products/img.gv b/demo/01-trov-vocab/products/img.gv index 109eea1..395770a 100644 --- a/demo/01-trov-vocab/products/img.gv +++ b/demo/01-trov-vocab/products/img.gv @@ -5,18 +5,18 @@ label="Subclass Vocab Graph" node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] - "ArtifactComposition" -> "ArtifactCollection" - "ArtifactLocus" -> "ArtifactCollection" - "TROAttribute" -> "TREAttribute" - "TRSAttribute" -> "TREAttribute" - "IncludesAllInputData" -> "TROAttribute" - "TRSCapability" -> "TRSAttribute" - "CanProvideInternetIsolation" -> "TRSCapability" - "TRSPolicy" -> "TRSCapability" - "EnforcesInternetIsolation" -> "TRSPolicy" - "TimeStampingAuthority" -> "TrustedResearchElement" - "TransparentResearchObject" -> "TrustedResearchElement" - "TrustedResearchPerformance" -> "TrustedResearchElement" - "TrustedResearchSystem" -> "TrustedResearchElement" + ArtifactComposition -> ArtifactCollection + ArtifactLocus -> ArtifactCollection + TROAttribute -> TREAttribute + TRSAttribute -> TREAttribute + IncludesAllInputData -> TROAttribute + TRSCapability -> TRSAttribute + CanProvideInternetIsolation -> TRSCapability + TRSPolicy -> TRSCapability + EnforcesInternetIsolation -> TRSPolicy + TimeStampingAuthority -> TrustedResearchElement + TransparentResearchObject -> TrustedResearchElement + TrustedResearchPerformance -> TrustedResearchElement + TrustedResearchSystem -> TrustedResearchElement } \ No newline at end of file diff --git a/demo/01-trov-vocab/products/report_subclass.html b/demo/01-trov-vocab/products/report_subclass.html index 170136f..f1b2d9c 100644 --- a/demo/01-trov-vocab/products/report_subclass.html +++ b/demo/01-trov-vocab/products/report_subclass.html @@ -25,38 +25,38 @@

2. GV

label="Subclass Vocab Graph" node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] - "ArtifactComposition" -> "ArtifactCollection" - "ArtifactLocus" -> "ArtifactCollection" - "TROAttribute" -> "TREAttribute" - "TRSAttribute" -> "TREAttribute" - "IncludesAllInputData" -> "TROAttribute" - "TRSCapability" -> "TRSAttribute" - "CanProvideInternetIsolation" -> "TRSCapability" - "TRSPolicy" -> "TRSCapability" - "EnforcesInternetIsolation" -> "TRSPolicy" - "TimeStampingAuthority" -> "TrustedResearchElement" - "TransparentResearchObject" -> "TrustedResearchElement" - "TrustedResearchPerformance" -> "TrustedResearchElement" - "TrustedResearchSystem" -> "TrustedResearchElement" + ArtifactComposition -> ArtifactCollection + ArtifactLocus -> ArtifactCollection + TROAttribute -> TREAttribute + TRSAttribute -> TREAttribute + IncludesAllInputData -> TROAttribute + TRSCapability -> TRSAttribute + CanProvideInternetIsolation -> TRSCapability + TRSPolicy -> TRSCapability + EnforcesInternetIsolation -> TRSPolicy + TimeStampingAuthority -> TrustedResearchElement + TransparentResearchObject -> TrustedResearchElement + TrustedResearchPerformance -> TrustedResearchElement + TrustedResearchSystem -> TrustedResearchElement }

3. Table

- - - - - - - - - - - - - + + + + + + + + + + + + +
ParentLabelChildLabel
"ArtifactCollection""ArtifactComposition"
"ArtifactCollection""ArtifactLocus"
"TREAttribute""TROAttribute"
"TREAttribute""TRSAttribute"
"TROAttribute""IncludesAllInputData"
"TRSAttribute""TRSCapability"
"TRSCapability""CanProvideInternetIsolation"
"TRSCapability""TRSPolicy"
"TRSPolicy""EnforcesInternetIsolation"
"TrustedResearchElement""TimeStampingAuthority"
"TrustedResearchElement""TransparentResearchObject"
"TrustedResearchElement""TrustedResearchPerformance"
"TrustedResearchElement""TrustedResearchSystem"
ArtifactCollectionArtifactComposition
ArtifactCollectionArtifactLocus
TREAttributeTROAttribute
TREAttributeTRSAttribute
TROAttributeIncludesAllInputData
TRSAttributeTRSCapability
TRSCapabilityCanProvideInternetIsolation
TRSCapabilityTRSPolicy
TRSPolicyEnforcesInternetIsolation
TrustedResearchElementTimeStampingAuthority
TrustedResearchElementTransparentResearchObject
TrustedResearchElementTrustedResearchPerformance
TrustedResearchElementTrustedResearchSystem
diff --git a/demo/01-trov-vocab/run.txt b/demo/01-trov-vocab/run.txt index b79656f..c26d727 100644 --- a/demo/01-trov-vocab/run.txt +++ b/demo/01-trov-vocab/run.txt @@ -104,38 +104,38 @@ END_TEMPLATE label="Subclass Vocab Graph" node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] - "ArtifactComposition" -> "ArtifactCollection" - "ArtifactLocus" -> "ArtifactCollection" - "TROAttribute" -> "TREAttribute" - "TRSAttribute" -> "TREAttribute" - "IncludesAllInputData" -> "TROAttribute" - "TRSCapability" -> "TRSAttribute" - "CanProvideInternetIsolation" -> "TRSCapability" - "TRSPolicy" -> "TRSCapability" - "EnforcesInternetIsolation" -> "TRSPolicy" - "TimeStampingAuthority" -> "TrustedResearchElement" - "TransparentResearchObject" -> "TrustedResearchElement" - "TrustedResearchPerformance" -> "TrustedResearchElement" - "TrustedResearchSystem" -> "TrustedResearchElement" + ArtifactComposition -> ArtifactCollection + ArtifactLocus -> ArtifactCollection + TROAttribute -> TREAttribute + TRSAttribute -> TREAttribute + IncludesAllInputData -> TROAttribute + TRSCapability -> TRSAttribute + CanProvideInternetIsolation -> TRSCapability + TRSPolicy -> TRSCapability + EnforcesInternetIsolation -> TRSPolicy + TimeStampingAuthority -> TrustedResearchElement + TransparentResearchObject -> TrustedResearchElement + TrustedResearchPerformance -> TrustedResearchElement + TrustedResearchSystem -> TrustedResearchElement }

3. Table

- - - - - - - - - - - - - + + + + + + + + + + + + +
ParentLabelChildLabel
"ArtifactCollection""ArtifactComposition"
"ArtifactCollection""ArtifactLocus"
"TREAttribute""TROAttribute"
"TREAttribute""TRSAttribute"
"TROAttribute""IncludesAllInputData"
"TRSAttribute""TRSCapability"
"TRSCapability""CanProvideInternetIsolation"
"TRSCapability""TRSPolicy"
"TRSPolicy""EnforcesInternetIsolation"
"TrustedResearchElement""TimeStampingAuthority"
"TrustedResearchElement""TransparentResearchObject"
"TrustedResearchElement""TrustedResearchPerformance"
"TrustedResearchElement""TrustedResearchSystem"
ArtifactCollectionArtifactComposition
ArtifactCollectionArtifactLocus
TREAttributeTROAttribute
TREAttributeTRSAttribute
TROAttributeIncludesAllInputData
TRSAttributeTRSCapability
TRSCapabilityCanProvideInternetIsolation
TRSCapabilityTRSPolicy
TRSPolicyEnforcesInternetIsolation
TrustedResearchElementTimeStampingAuthority
TrustedResearchElementTransparentResearchObject
TrustedResearchElementTrustedResearchPerformance
TrustedResearchElementTrustedResearchSystem
diff --git a/demo/02-tro-examples/01-two-artifacts-no-trp/run.txt b/demo/02-tro-examples/01-two-artifacts-no-trp/run.txt index fc7ab3a..58075ab 100644 --- a/demo/02-tro-examples/01-two-artifacts-no-trp/run.txt +++ b/demo/02-tro-examples/01-two-artifacts-no-trp/run.txt @@ -209,9 +209,9 @@ geist query --dataset kb << __END_QUERY__ __END_QUERY__ ----------------------------------------------------------- cell outputs ----------------------------------------------------------- -| | attribute | attributeLabel | attributeComment | -|---:|:-----------------------------------------------------------|:-----------------------|:------------------------------------------------------------------------| -| 0 | | "IncludesAllInputData" | "TRO composition includes all input data employed in creating the TRO." | +| | attribute | attributeLabel | attributeComment | +|---:|:-----------------------------------------------------------|:---------------------|:----------------------------------------------------------------------| +| 0 | | IncludesAllInputData | TRO composition includes all input data employed in creating the TRO. | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -237,12 +237,12 @@ __END_QUERY__ geist destroy --dataset kb ----------------------------------------------------------- cell outputs ----------------------------------------------------------- -| | attribute | attributeLabel | attributeComment | -|---:|:------------------------------------------------------------------|:------------------------------|:----------------------------------------------------------------| -| 0 | | "CanProvideInternetIsolation" | "The capability to prevent Internet access during a TRP." | -| 1 | | "EnforcesInternetIsolation" | "The policy of always preventing Internet access during a TRP." | -| 2 | | "TRSCapability" | "A capability of a TRS." | -| 3 | | "TRSPolicy" | "A policy always enforced by a particular TRS." | +| | attribute | attributeLabel | attributeComment | +|---:|:------------------------------------------------------------------|:----------------------------|:--------------------------------------------------------------| +| 0 | | CanProvideInternetIsolation | The capability to prevent Internet access during a TRP. | +| 1 | | EnforcesInternetIsolation | The policy of always preventing Internet access during a TRP. | +| 2 | | TRSCapability | A capability of a TRS. | +| 3 | | TRSPolicy | A policy always enforced by a particular TRS. | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/demo/02-tro-examples/02-three-artifacts-one-trp/run.txt b/demo/02-tro-examples/02-three-artifacts-one-trp/run.txt index fc7ab3a..58075ab 100644 --- a/demo/02-tro-examples/02-three-artifacts-one-trp/run.txt +++ b/demo/02-tro-examples/02-three-artifacts-one-trp/run.txt @@ -209,9 +209,9 @@ geist query --dataset kb << __END_QUERY__ __END_QUERY__ ----------------------------------------------------------- cell outputs ----------------------------------------------------------- -| | attribute | attributeLabel | attributeComment | -|---:|:-----------------------------------------------------------|:-----------------------|:------------------------------------------------------------------------| -| 0 | | "IncludesAllInputData" | "TRO composition includes all input data employed in creating the TRO." | +| | attribute | attributeLabel | attributeComment | +|---:|:-----------------------------------------------------------|:---------------------|:----------------------------------------------------------------------| +| 0 | | IncludesAllInputData | TRO composition includes all input data employed in creating the TRO. | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -237,12 +237,12 @@ __END_QUERY__ geist destroy --dataset kb ----------------------------------------------------------- cell outputs ----------------------------------------------------------- -| | attribute | attributeLabel | attributeComment | -|---:|:------------------------------------------------------------------|:------------------------------|:----------------------------------------------------------------| -| 0 | | "CanProvideInternetIsolation" | "The capability to prevent Internet access during a TRP." | -| 1 | | "EnforcesInternetIsolation" | "The policy of always preventing Internet access during a TRP." | -| 2 | | "TRSCapability" | "A capability of a TRS." | -| 3 | | "TRSPolicy" | "A policy always enforced by a particular TRS." | +| | attribute | attributeLabel | attributeComment | +|---:|:------------------------------------------------------------------|:----------------------------|:--------------------------------------------------------------| +| 0 | | CanProvideInternetIsolation | The capability to prevent Internet access during a TRP. | +| 1 | | EnforcesInternetIsolation | The policy of always preventing Internet access during a TRP. | +| 2 | | TRSCapability | A capability of a TRS. | +| 3 | | TRSPolicy | A policy always enforced by a particular TRS. | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/demo/02-tro-examples/03-skope-lbda-processing/products/report.html b/demo/02-tro-examples/03-skope-lbda-processing/products/report.html index 2e234ec..e4cf620 100644 --- a/demo/02-tro-examples/03-skope-lbda-processing/products/report.html +++ b/demo/02-tro-examples/03-skope-lbda-processing/products/report.html @@ -35,8 +35,8 @@

Trusted Research System:

Trusted Research System Inst - - + +
idnamedescription
"trs/capability/1""Capability of Recording Internet Access""TRS can record internet access"
"trs/capability/2""Capability of Providing Internet Isolation""TRS can provide Internet isolation"
trs/capability/1Capability of Recording Internet AccessTRS can record internet access
trs/capability/2Capability of Providing Internet IsolationTRS can provide Internet isolation

Trusted Research Performances (TRPs) and Arrangements:

@@ -49,7 +49,7 @@

Artifacts by Arrangement:

Web Resource Artifact Arran - +
nameidlocation
"LBDA NetCDF file""composition/1/artifact/1""https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc"
LBDA NetCDF filecomposition/1/artifact/1https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc
@@ -61,8 +61,8 @@

Artifacts by Arrangement:

Web Resource Artifact Arran - - + +
nameidlocation
"LBDA NetCDF file""composition/1/artifact/1""data/lbda-v2_kddm_pmdi_2017.nc"
"Initial Notebook""composition/1/artifact/2""analysis.ipynb"
LBDA NetCDF filecomposition/1/artifact/1data/lbda-v2_kddm_pmdi_2017.nc
Initial Notebookcomposition/1/artifact/2analysis.ipynb
@@ -74,11 +74,11 @@

Artifacts by Arrangement:

Web Resource Artifact Arran - - - - - + + + + +
nameidlocation
"LBDA NetCDF file""composition/1/artifact/1""data/lbda-v2_kddm_pmdi_2017.nc"
"Final Notebook""composition/1/artifact/3""analysis.ipynb"
"Final Notebook HTML Rendering""composition/1/artifact/4""output/analysis.html"
"Graphical Histogram Rendering""composition/1/artifact/5""output/histogram.png"
"LBDA GeoTIFF file""composition/1/artifact/6""output/lbda-v2_kddm_pmdi_2017.tiff"
LBDA NetCDF filecomposition/1/artifact/1data/lbda-v2_kddm_pmdi_2017.nc
Final Notebookcomposition/1/artifact/3analysis.ipynb
Final Notebook HTML Renderingcomposition/1/artifact/4output/analysis.html
Graphical Histogram Renderingcomposition/1/artifact/5output/histogram.png
LBDA GeoTIFF filecomposition/1/artifact/6output/lbda-v2_kddm_pmdi_2017.tiff
@@ -90,10 +90,10 @@

Artifacts by Arrangement:

Web Resource Artifact Arran - - - - + + + +
nameidlocation
"Final Notebook""composition/1/artifact/3""analysis.ipynb"
"Final Notebook HTML Rendering""composition/1/artifact/4""analysis.html"
"Graphical Histogram Rendering""composition/1/artifact/5""histogram.png"
"LBDA GeoTIFF file""composition/1/artifact/6""lbda-v2_kddm_pmdi_2017.tiff"
Final Notebookcomposition/1/artifact/3analysis.ipynb
Final Notebook HTML Renderingcomposition/1/artifact/4analysis.html
Graphical Histogram Renderingcomposition/1/artifact/5histogram.png
LBDA GeoTIFF filecomposition/1/artifact/6lbda-v2_kddm_pmdi_2017.tiff
@@ -102,12 +102,12 @@

Artifacts:

- - - - - - + + + + + +
nameidmimeTypedescription
"LBDA NetCDF file""composition/1/artifact/1""application/x-netcdf""NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset"
"Initial Notebook""composition/1/artifact/2""text/plain""Initial state of Jupyter notebook for processing the LBDA dataset"
"Final Notebook""composition/1/artifact/3""text/plain""Final state of Jupyter notebook for processing the LBDA dataset"
"Final Notebook HTML Rendering""composition/1/artifact/4""text/html""HTML rendering of final state of the Jupyter notebook"
"Graphical Histogram Rendering""composition/1/artifact/5""image/png""Graphical rendering of the histogram of dataset values"
"LBDA GeoTIFF file""composition/1/artifact/6""image/tiff""GeoTIFF file containing LBDA data cube ready for staging to SKOPE server"
LBDA NetCDF filecomposition/1/artifact/1application/x-netcdfNetCDF file containing the Living Blended Drought Atlas (LBDA) dataset
Initial Notebookcomposition/1/artifact/2text/plainInitial state of Jupyter notebook for processing the LBDA dataset
Final Notebookcomposition/1/artifact/3text/plainFinal state of Jupyter notebook for processing the LBDA dataset
Final Notebook HTML Renderingcomposition/1/artifact/4text/htmlHTML rendering of final state of the Jupyter notebook
Graphical Histogram Renderingcomposition/1/artifact/5image/pngGraphical rendering of the histogram of dataset values
LBDA GeoTIFF filecomposition/1/artifact/6image/tiffGeoTIFF file containing LBDA data cube ready for staging to SKOPE server
diff --git a/demo/02-tro-examples/03-skope-lbda-processing/run.sh b/demo/02-tro-examples/03-skope-lbda-processing/run.sh index 5604e9f..e26eb33 100644 --- a/demo/02-tro-examples/03-skope-lbda-processing/run.sh +++ b/demo/02-tro-examples/03-skope-lbda-processing/run.sh @@ -20,13 +20,13 @@ geist report --outputroot products << END_TEMPLATE {%- map isfilepath=False, mappings="mappings.json" as query_tro_shorten %} {% query_tro_str %} {% endmap %} {%- set query_tro = query_tro_shorten | json2df %} {% for _, row in query_tro.iterrows() %} - {{ row["tro_name"][1:-1] }} + {{ row["tro_name"] }}
    -
  • TRO ID: {{ row["tro_id"][1:-1] }}
  • -
  • TRO Description: {{ row["tro_descr"][1:-1] }}
  • -
  • Digital artifacts: {{ row["num_of_artifacts"][1:-1] }}
  • -
  • Artifact artifact arrangements: {{ row["num_of_arrs"][1:-1] }}
  • -
  • Trusted Research Performances (TRPs): {{ row["num_of_trps"][1:-1] }}
  • +
  • TRO ID: {{ row["tro_id"] }}
  • +
  • TRO Description: {{ row["tro_descr"] }}
  • +
  • Digital artifacts: {{ row["num_of_artifacts"] }}
  • +
  • Artifact artifact arrangements: {{ row["num_of_arrs"] }}
  • +
  • Trusted Research Performances (TRPs): {{ row["num_of_trps"] }}
{% endfor %} @@ -34,11 +34,11 @@ geist report --outputroot products << END_TEMPLATE {%- map isfilepath=False, mappings="mappings.json" as query_trs_shorten %} {% query_trs_str %} {% endmap %} {%- set query_trs = query_trs_shorten | json2df %} {% for _, row in query_trs.iterrows() %} - {{ row["trs_name"][1:-1] }} + {{ row["trs_name"] }}
    -
  • TRS ID: {{ row["trs_id"][1:-1] }}
  • -
  • TRS Description: {{ row["trs_descr"][1:-1] }}
  • -
  • Capabilities: {{ row["num_of_capabilities"][1:-1] }} (see below)
  • +
  • TRS ID: {{ row["trs_id"] }}
  • +
  • TRS Description: {{ row["trs_descr"] }}
  • +
  • Capabilities: {{ row["num_of_capabilities"] }} (see below)
{% endfor %} {%- table mappings="mappings.json" %}{% query_trs_capability_str %}{% endtable %} @@ -67,15 +67,15 @@ geist report --outputroot products << END_TEMPLATE } ORDER BY ?arrangement {% endquery %} - {%- set query_arrangement = query_arrangement_str | json2df %} - {%- map isfilepath=False, mappings="mappings.json" as query_arrangement_shorten_str %} {{ query_arrangement_str }} {% endmap %} - {%- set query_arrangement_shorten = query_arrangement_shorten_str | json2df %} - {% for idx, row in query_arrangement_shorten.iterrows() %} - {{ row["name"][1:-1] }} + + {%- map isfilepath=False, mappings="mappings.json", on="id" as query_arrangement_shorten %} {{ query_arrangement_str }} {% endmap %} + {%- set query_arrangement = query_arrangement_shorten | json2df %} + {% for idx, row in query_arrangement.iterrows() %} + {{ row["name"] }}
    -
  • Arrangement ID: {{ row["id"][1:-1] }}
  • -
  • Arrangement Description: {{ row["descr"][1:-1] }}
  • -
  • Digital artifacts: {%- table mappings="mappings.json" %}{% query_artifacts_by_arrangement_str query_arrangement.loc[idx, "arrangement"] %}{% endtable %}
  • +
  • Arrangement ID: {{ row["id"] }}
  • +
  • Arrangement Description: {{ row["descr"] }}
  • +
  • Digital artifacts: {%- table mappings="mappings.json" %}{% query_artifacts_by_arrangement_str row["arrangement"] %}{% endtable %}
{% endfor %} diff --git a/demo/02-tro-examples/03-skope-lbda-processing/run.txt b/demo/02-tro-examples/03-skope-lbda-processing/run.txt index 66b1059..98808de 100644 --- a/demo/02-tro-examples/03-skope-lbda-processing/run.txt +++ b/demo/02-tro-examples/03-skope-lbda-processing/run.txt @@ -209,9 +209,9 @@ geist query --dataset kb << __END_QUERY__ __END_QUERY__ ----------------------------------------------------------- cell outputs ----------------------------------------------------------- -| | attribute | attributeLabel | attributeComment | -|---:|:-----------------------------------------------------------|:-----------------------|:------------------------------------------------------------------------| -| 0 | | "IncludesAllInputData" | "TRO composition includes all input data employed in creating the TRO." | +| | attribute | attributeLabel | attributeComment | +|---:|:-----------------------------------------------------------|:---------------------|:----------------------------------------------------------------------| +| 0 | | IncludesAllInputData | TRO composition includes all input data employed in creating the TRO. | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -237,12 +237,12 @@ __END_QUERY__ geist destroy --dataset kb ----------------------------------------------------------- cell outputs ----------------------------------------------------------- -| | attribute | attributeLabel | attributeComment | -|---:|:------------------------------------------------------------------|:------------------------------|:----------------------------------------------------------------| -| 0 | | "CanProvideInternetIsolation" | "The capability to prevent Internet access during a TRP." | -| 1 | | "EnforcesInternetIsolation" | "The policy of always preventing Internet access during a TRP." | -| 2 | | "TRSCapability" | "A capability of a TRS." | -| 3 | | "TRSPolicy" | "A policy always enforced by a particular TRS." | +| | attribute | attributeLabel | attributeComment | +|---:|:------------------------------------------------------------------|:----------------------------|:--------------------------------------------------------------| +| 0 | | CanProvideInternetIsolation | The capability to prevent Internet access during a TRP. | +| 1 | | EnforcesInternetIsolation | The policy of always preventing Internet access during a TRP. | +| 2 | | TRSCapability | A capability of a TRS. | +| 3 | | TRSPolicy | A policy always enforced by a particular TRS. | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -262,13 +262,13 @@ geist report --outputroot products << END_TEMPLATE {%- map isfilepath=False, mappings="mappings.json" as query_tro_shorten %} {% query_tro_str %} {% endmap %} {%- set query_tro = query_tro_shorten | json2df %} {% for _, row in query_tro.iterrows() %} - {{ row["tro_name"][1:-1] }} + {{ row["tro_name"] }}
    -
  • TRO ID: {{ row["tro_id"][1:-1] }}
  • -
  • TRO Description: {{ row["tro_descr"][1:-1] }}
  • -
  • Digital artifacts: {{ row["num_of_artifacts"][1:-1] }}
  • -
  • Artifact artifact arrangements: {{ row["num_of_arrs"][1:-1] }}
  • -
  • Trusted Research Performances (TRPs): {{ row["num_of_trps"][1:-1] }}
  • +
  • TRO ID: {{ row["tro_id"] }}
  • +
  • TRO Description: {{ row["tro_descr"] }}
  • +
  • Digital artifacts: {{ row["num_of_artifacts"] }}
  • +
  • Artifact artifact arrangements: {{ row["num_of_arrs"] }}
  • +
  • Trusted Research Performances (TRPs): {{ row["num_of_trps"] }}
{% endfor %} @@ -276,11 +276,11 @@ geist report --outputroot products << END_TEMPLATE {%- map isfilepath=False, mappings="mappings.json" as query_trs_shorten %} {% query_trs_str %} {% endmap %} {%- set query_trs = query_trs_shorten | json2df %} {% for _, row in query_trs.iterrows() %} - {{ row["trs_name"][1:-1] }} + {{ row["trs_name"] }}
    -
  • TRS ID: {{ row["trs_id"][1:-1] }}
  • -
  • TRS Description: {{ row["trs_descr"][1:-1] }}
  • -
  • Capabilities: {{ row["num_of_capabilities"][1:-1] }} (see below)
  • +
  • TRS ID: {{ row["trs_id"] }}
  • +
  • TRS Description: {{ row["trs_descr"] }}
  • +
  • Capabilities: {{ row["num_of_capabilities"] }} (see below)
{% endfor %} {%- table mappings="mappings.json" %}{% query_trs_capability_str %}{% endtable %} @@ -309,15 +309,15 @@ geist report --outputroot products << END_TEMPLATE } ORDER BY ?arrangement {% endquery %} - {%- set query_arrangement = query_arrangement_str | json2df %} - {%- map isfilepath=False, mappings="mappings.json" as query_arrangement_shorten_str %} {{ query_arrangement_str }} {% endmap %} - {%- set query_arrangement_shorten = query_arrangement_shorten_str | json2df %} - {% for idx, row in query_arrangement_shorten.iterrows() %} - {{ row["name"][1:-1] }} + + {%- map isfilepath=False, mappings="mappings.json", on="id" as query_arrangement_shorten %} {{ query_arrangement_str }} {% endmap %} + {%- set query_arrangement = query_arrangement_shorten | json2df %} + {% for idx, row in query_arrangement.iterrows() %} + {{ row["name"] }}
    -
  • Arrangement ID: {{ row["id"][1:-1] }}
  • -
  • Arrangement Description: {{ row["descr"][1:-1] }}
  • -
  • Digital artifacts: {%- table mappings="mappings.json" %}{% query_artifacts_by_arrangement_str query_arrangement.loc[idx, "arrangement"] %}{% endtable %}
  • +
  • Arrangement ID: {{ row["id"] }}
  • +
  • Arrangement Description: {{ row["descr"] }}
  • +
  • Digital artifacts: {%- table mappings="mappings.json" %}{% query_artifacts_by_arrangement_str row["arrangement"] %}{% endtable %}
{% endfor %} @@ -369,8 +369,8 @@ END_TEMPLATE - - + +
idnamedescription
"trs/capability/1""Capability of Recording Internet Access""TRS can record internet access"
"trs/capability/2""Capability of Providing Internet Isolation""TRS can provide Internet isolation"
trs/capability/1Capability of Recording Internet AccessTRS can record internet access
trs/capability/2Capability of Providing Internet IsolationTRS can provide Internet isolation

Trusted Research Performances (TRPs) and Arrangements:

@@ -383,7 +383,7 @@ END_TEMPLATE - +
nameidlocation
"LBDA NetCDF file""composition/1/artifact/1""https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc"
LBDA NetCDF filecomposition/1/artifact/1https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc
@@ -395,8 +395,8 @@ END_TEMPLATE - - + +
nameidlocation
"LBDA NetCDF file""composition/1/artifact/1""data/lbda-v2_kddm_pmdi_2017.nc"
"Initial Notebook""composition/1/artifact/2""analysis.ipynb"
LBDA NetCDF filecomposition/1/artifact/1data/lbda-v2_kddm_pmdi_2017.nc
Initial Notebookcomposition/1/artifact/2analysis.ipynb
@@ -408,11 +408,11 @@ END_TEMPLATE - - - - - + + + + +
nameidlocation
"LBDA NetCDF file""composition/1/artifact/1""data/lbda-v2_kddm_pmdi_2017.nc"
"Final Notebook""composition/1/artifact/3""analysis.ipynb"
"Final Notebook HTML Rendering""composition/1/artifact/4""output/analysis.html"
"Graphical Histogram Rendering""composition/1/artifact/5""output/histogram.png"
"LBDA GeoTIFF file""composition/1/artifact/6""output/lbda-v2_kddm_pmdi_2017.tiff"
LBDA NetCDF filecomposition/1/artifact/1data/lbda-v2_kddm_pmdi_2017.nc
Final Notebookcomposition/1/artifact/3analysis.ipynb
Final Notebook HTML Renderingcomposition/1/artifact/4output/analysis.html
Graphical Histogram Renderingcomposition/1/artifact/5output/histogram.png
LBDA GeoTIFF filecomposition/1/artifact/6output/lbda-v2_kddm_pmdi_2017.tiff
@@ -424,10 +424,10 @@ END_TEMPLATE - - - - + + + +
nameidlocation
"Final Notebook""composition/1/artifact/3""analysis.ipynb"
"Final Notebook HTML Rendering""composition/1/artifact/4""analysis.html"
"Graphical Histogram Rendering""composition/1/artifact/5""histogram.png"
"LBDA GeoTIFF file""composition/1/artifact/6""lbda-v2_kddm_pmdi_2017.tiff"
Final Notebookcomposition/1/artifact/3analysis.ipynb
Final Notebook HTML Renderingcomposition/1/artifact/4analysis.html
Graphical Histogram Renderingcomposition/1/artifact/5histogram.png
LBDA GeoTIFF filecomposition/1/artifact/6lbda-v2_kddm_pmdi_2017.tiff
@@ -436,12 +436,12 @@ END_TEMPLATE - - - - - - + + + + + +
nameidmimeTypedescription
"LBDA NetCDF file""composition/1/artifact/1""application/x-netcdf""NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset"
"Initial Notebook""composition/1/artifact/2""text/plain""Initial state of Jupyter notebook for processing the LBDA dataset"
"Final Notebook""composition/1/artifact/3""text/plain""Final state of Jupyter notebook for processing the LBDA dataset"
"Final Notebook HTML Rendering""composition/1/artifact/4""text/html""HTML rendering of final state of the Jupyter notebook"
"Graphical Histogram Rendering""composition/1/artifact/5""image/png""Graphical rendering of the histogram of dataset values"
"LBDA GeoTIFF file""composition/1/artifact/6""image/tiff""GeoTIFF file containing LBDA data cube ready for staging to SKOPE server"
LBDA NetCDF filecomposition/1/artifact/1application/x-netcdfNetCDF file containing the Living Blended Drought Atlas (LBDA) dataset
Initial Notebookcomposition/1/artifact/2text/plainInitial state of Jupyter notebook for processing the LBDA dataset
Final Notebookcomposition/1/artifact/3text/plainFinal state of Jupyter notebook for processing the LBDA dataset
Final Notebook HTML Renderingcomposition/1/artifact/4text/htmlHTML rendering of final state of the Jupyter notebook
Graphical Histogram Renderingcomposition/1/artifact/5image/pngGraphical rendering of the histogram of dataset values
LBDA GeoTIFF filecomposition/1/artifact/6image/tiffGeoTIFF file containing LBDA data cube ready for staging to SKOPE server
From 9186fd7943f68e966c509c2f70ff58808d13e273 Mon Sep 17 00:00:00 2001 From: Meng Li <34143965+Meng6@users.noreply.github.com> Date: Mon, 20 Nov 2023 22:52:06 +0000 Subject: [PATCH 14/22] Update tro report: order; add logo --- .../products/logo.png | Bin 0 -> 41090 bytes .../products/report.html | 237 ++++++++++++++---- .../03-skope-lbda-processing/run.sh | 6 +- .../03-skope-lbda-processing/run.txt | 30 +-- 4 files changed, 204 insertions(+), 69 deletions(-) create mode 100644 demo/02-tro-examples/03-skope-lbda-processing/products/logo.png diff --git a/demo/02-tro-examples/03-skope-lbda-processing/products/logo.png b/demo/02-tro-examples/03-skope-lbda-processing/products/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1e445751c073bae5b620f43aa37476a0f747ec01 GIT binary patch literal 41090 zcmc#)<69=q-@UWz&faXd*|uGqZQHeZGdJCBwr$&XZME6<-S7MS70-*Ac{4NDT%*sK zbIwGoC`qFr5+DKq02Emn3AO*q;r~nUkpJa&dikXQKrld7LR7;$=b{_VpJ@11Sm1l7 zU-xdgSLKgnhxPQ%{t+(6wP1)v{*nj`Ik6KmcQF*8FXvDRfqtFKwLydL^`~#|=H_dDip=Urg8lvxoTqL7`Qg7PFoC`9!&FIiO}ZbD{)79?ds zX@R9&$ezp|Q>uzDi$AO<>I5;1pKHXhp1RNfrg$<>(M0a?(QY-d_Ll?_Mo9| z*IgUGiP4%e`uc|gDZ@l=&4#`Lkv+b$A-{}%)8KT9DZoSj9yQ6(zVV?8UzlII+Hy<0 zJb7wqLeOGh+DC$jDl{r2PsGDWEHkYeLQBT5DP&vNfe;ggCY1)T5u}aFo=v%1Xho0- zt2?rdE5K%s(=L`tXhx6~1kS^}%#MFyfhff>zke5(iU=;#BZu^Ce)O)a_>8OGd-^ux zSU6=_;#~E4=|y`xO#7ro8hTp9*S~xG8}Co*`}G|O&)Ir6u8GMS9=XVnwiqh;NSQVz z&BTKGl5Xb4hrYN?{Yb%Akc8xC!WuvO14#r%DOnhhXc*nu17*XDq`_f#xTU4g7${8+ zZ>9iX!=u^qPJ1j|#+oF*5pQrujO`iiOx*OWgm zxc7>oYS3G#n%wzV6;FW>ZJ^0wds3sg8)d4&8NpAz1$hxX91zfM0_V#1cXyEn z@>4E8@(^%D#|fuyt!5Mr1f)}PYgq9C;SxQM!jh|BUJvS6%3a0`weH{eOm@A-cIT>O z6q1>;&xwg7Y&q{-Aw#Tx%R!KO2V9M4=|24yaUeDq2LdLHfm@EJ)~R}Nx;Qr<<#`xX zSB$?leMss?Qk z^*cN}?uKI~V;(ED2HoM~*tB^bJ^UFZu{l?vrpf&fkkKj4c3T4myUwd(**mQNIcu(@bezxi<1ky>5JL;vT;nfqCS&m&sg!_S zL2!hYm3+2~Sac}l*#M+mF{^ngn;cai^jzr$Q?zMZ0Udmwh=DpKFxLI)?OZSPb45j* zY4}#;uLvc(!s1tu25$WN3GGR$g#}D+x1mvD+&@=5$&J}wXW{G*?*9g-{KIP$F7G+u zF)rstLytu39|8?G!y^S#eetzA-S z$z_B_MbmNz0-`eq@h{yxeNse9G9qJ^zg{4dW60QwF+WA|t&-0<5=-d1K?@alaamjh z=7`}zeFRsh_e-3Se0;AEc5StJt?PTj+)?nDA!Vr}?WHs!XU?I+t0#OL8@HY4e6+^XD-$#o_G$HI>^T3_QjItEW zKPP)IutZPd*g~EB3ky>o&t?gcXfJGpdjf_40F0SRAB`*@`cE~WC?t9uhi#FXnjF=F zjfIq8ZfY3|^8)s9IV1JXv01gJlXzvou8Ef<=ixnad*Y3>IELB~#7SHPzJ)AqtxS#v zGVsj_dN~LaG?d6Sz_{6QbUu@@votMakd%3%^GSCDm!vjq=g}0P(uXG|6HNp!N%tKV zp3Z7!qWh6vQ!Pi|3cyhS!3$nG=fP0W=czqy738bcn z0K`H7uyWopVh&LV!#YV=K?Uf;7z2b;M~fviQ^JCmP2&L3zLa=He!bl{cz1V|usbUgI<6Z*h3Rij1DGV12F-EPwY8`h!m%)9*X7aG|rUEFX76=eP=<4`*&U3il7g#jZ&@ysSd@u0G>IQmQ4Ge^^Q?nca zdB>M;x5dtBNv1_dXqSi;E+I~rbUX}0CC?B%F>$CKl!KO-szj;P)JRww!%`;Q++~`L zCi}1G|8|33oLDKf2qNb|zO|o%X0(qn9TS`wD);f@tt0pG1N6H?NPLa6S3+x#X5D5P zS*fy`Ktq$erf9m)h{od5crg6VLgK2&1VBNotE(y1tL@+@7l+%Si+u(@jXffX zEbH4&1#K`TEoLaX2xYo(dT6eW!dpSF+iA3jH`jm}=w)!{>1t=XGp7@6AMA)IHxv&a ztm2BjVy9p=Guv|}7Or(zRpsRS8IWHf*0pd=98V#U1OoX_ayIFiZMR4Z_po{$>H^e& zAx7;3Z;$)Y#=&HJP@?bo6CIJD5L7}_>*SQ5KQ>57l2WxaAY@FwRcjgOC3`+vbo@7q z`FBUF!lBy+su4)_7fn7%Bd~xvc819YZ^OF}UAdo9vEg})^dW=T07_qD1!!hG@-7jb zcr^x>Fse`hY50_I( z8tS$C#C3+ijGUez;a&`jh^a zvH}hn{`jV)8tnf!g(Y|uMZ-4nH?#org|mz&WqOmDc~*H!%8YISe#)MJ>(<+Ljfx`i zU!HOWfVKNZ!|lj;@lk`?!J0k!ZPFeP04$8;i6{X%box{pIJfi0qy4z#!NTx|*sh|> z&x(jzMm==>jHNSUHW2;Z@Mrp}stVgbut?+N{@&e8jcS28_uY9r<^kQLbX8aNT)=(F zt%-bXX&@>iimYItsf4!?0|%5pE=RalZ{>XO^!FBXKRPOcePS!$e}Pim#jtL7rhR)O zCpPsy{S3)%u6FI_^Xx{#v?&@0a2M-N>&9CFtD9BngZ zJ>HN{m34V%=?by4flyV#mp-#C( z62DyLfLR!20tLx$@{AdR$&t9}*HqjD0I$#CdFL*dnY= zrL)*3^m^!SBxuVO|Ao$wOqMJyOSb--%?E7<--rt})TsPkTJUa+qW6I}Cv`0liSoq# zTl=MulS8NHghWdxTpgpT-SYZ+^kllXZMF<4;Gf+365RpFUnDJA<9_Ye&+7mYdr!PP zpb3Ra^%Aq5&f6VkrWK0{4Gp`T1!E-|02diD3Rr{+zDhtz=>7X~As-}(ZP%P-si;jw z5vu&YLuGJ7d>!H$WxbIDeTykBqQ~acs^tS1BVe*9EM`C%n775FJW3 zbx%7MK|t8q`>K=<%IvWRnH*{OiSxU3Lg3saYD$@UL!yV~#)B03vCC~Xrm!Tw2<$2X znY_tMQ(4v%v|74ev|gNfcX!RQ*r)<;A?*ylpIpEb@t$q@0UE0+%1C{dEqF6Po2?dB z2WGP_kIgForZo%=2MT<6TMhEuZrR&K2@iOHK!|rfU;EAHrrOUeu9IcD+fTwCOuejO z5x!K5BC5P*6%*Dqv~Q0dPycp(?*DRUr;f{Z+)AQn$P2avOYn?787Qck{?{iHNf7={ zyEG`z=wYgmw~|>_pMwSOpTFkv+BLUQW|&Qd)8+Br!C`=r;{%_-(SplWhZJeXB4W5k zu9zr1`a*)NGQS_XoNNh4R@81}Kp>XMHoq6I-H&D;-StZ5!^0R6FJS~|O5(7{OWI(W zzXp-<_Z)?j(_*gcwM?teb^|FdUm>5Pgd~B~`kKVu!fdLC=Iqh3pl wJT+NG=v( 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
    w%5e0?ZVtQ zYQ#}#)D=^`J9mMEreNCC-1Td+7G4Aq^>O%evvE;K2i_ zRW&?SlL;saiA1Qdpz6)dNG4{zfk@wA-;UkhlQ#3z^1lE58epOTAnm#}6Ysu>mdpB& zHq&CU%AgBP&+(W3Z|J~b>~dovclsN5A)Yg5!u`Lj zzxf_M${5$J9)JBRS*8(EXE}hLW1PQyIu-FehlOwRC(Sqw3t8{f}<6%$nHo;%nk@g`l-Hp^RV& z;R%tNvrtjN_*o|6>Ml4SFEa_<;t27)|-VwIMK zKsjZSap5IJ%P!|x4o4!r)q8D!{V>$gEn~u`Pl6MOWxVNnW7V|Qjjxv7ce`cobb_dF zA!t2ca3S$2vGL|v&fD72`}RlPnp*7joU-*xx(TMdO(20tGJc%CYPNbxxoSc&q9vYV z&Hm=r(8(S)5azsY+GIkZNTlId!hj&9;u0pCl5%-r4h4vR>vljO%FbkI3DwsFC>pV` z;YM;H?HD1IN^CLFWu=PzT-~&Zx{?Bf=wPoc+}Yzf(lE4ZFK{@L0q*3C%Qc<=?dp}{ zyqv;C7b)_yfZ%8UJ^0RlU%0^dloB8aPT~g}dfxdYxTjXo(?Kx0?)MG1nuLv_Tp^n| zU8>i~3$xUdCQ36+6v2Swc!|_w?Ff8X%Q%O^{dT6e7YGr>6o5dj0V)-eNpO36QlqL= zQo#^QgdtF`mu6Yy7Ne|qoHExUvzR0%gCs)_A#~Lrx9!~@v$l~aPg#tMAYb2O zpB{qzBeACCX|d&|wUdAIbATzpVoVW`NWbR^<~dhqZ^YpyD86npO)T#GxJF$*PU!80 zKm-g0c}k-mBO&Bmh+6aZ*_{WEkr-#+vMt*vrvJF2ZcEd@z3h7T zJ#@;>G}ZJCFhFSH)CmvWX_{ODMf3$kpl{%UNKGXp44Ab@g--bTl5otYfrh5AD z3rCL-Jb(p{Kj?0yT_E>i}iZL)zG?PeBhKcidjLQ}SCgRxkrDoPNzx5=D#^|7TWG+p7 zKLF5XldP=7a@EqD1s5TN2n64=BjNXp3zAO>Bo2uMC0%?D3=cY8^-V+7d)>8rq0gU~ z8-o(HHZ*|bWv6U26A+7mRH~jcQ(aza|Gb)QZ%aBw3z6R_E8BG0#pcT{Qk54;H0o3) z2|4Tj#Pb0cFrP+)2z5osW0qk;efFM@w>due7og-o%T(W_Sk(R;sjR z<7E@dHIquU(R-hL?S@ZFvF;sIzdxXlrg_bm1PE0BI6NanAC)$^Q-mkd%-^mpGJKFlU31?-wBDh zyis?6>FZ-$ZpI(vT%JT@0_zWP;poWw03gw-1i?EI>2xBsn$l^+2A$Mmks8!8y*goC znUI-~;ef}H*pMID*nxV~I4M(ilsm`IN?3BF(2X w#u8~hr7@OB^C^w7M4C@&j3xeG00030|E^asUx-%~$N&HU07*qoM6N<$f+2x3-2eap literal 0 HcmV?d00001 diff --git a/demo/02-tro-examples/03-skope-lbda-processing/products/report.html b/demo/02-tro-examples/03-skope-lbda-processing/products/report.html index e4cf620..316840c 100644 --- a/demo/02-tro-examples/03-skope-lbda-processing/products/report.html +++ b/demo/02-tro-examples/03-skope-lbda-processing/products/report.html @@ -5,110 +5,245 @@ - TRO Report -

    TRO Report

    -

    This Transparent Research Object:

    Transparent Research Object Instance +

    TRO Report

    + + + +

    This Transparent Research Object:

    + DOI: https://doi.org/...

    + Transparent Research Object Instance +

    TRO ID: tro
      -
    • TRO ID: tro
    • +
    • Author: TRO_AUTHOR_NAME
    • +
    • Created datetime: 2024-01-11 10:00:00
    • TRO Description: Download LBDA dataset from NOAA website and prepare for use by researchers employing the SKOPE application
    • Digital artifacts: 6
    • Artifact artifact arrangements: 4
    • Trusted Research Performances (TRPs): 3
    -

    Trusted Research System:

    Trusted Research System Instance + + + +
    + Trusted Research System Instance (this is the instance name) +

    TRS ID: trs
      -
    • TRS ID: trs
    • +
    • Name: TRS_NAME
    • +
    • Owner: TRS_OWNER_NAME
    • TRS Description: TRS that can monitor netowrk accesses or provide Internet isolation
    • Capabilities: 2 (see below)
    - + - - + +
    idnamedescription
    idnamedescription
    trs/capability/1Capability of Recording Internet AccessTRS can record internet access
    trs/capability/2Capability of Providing Internet IsolationTRS can provide Internet isolation
    trs/capability/1Capability of Recording Internet AccessTRS can record internet access
    trs/capability/2Capability of Providing Internet IsolationTRS can provide Internet isolation
    +
    -

    Trusted Research Performances (TRPs) and Arrangements:

    - -

    Artifacts by Arrangement:

    Web Resource Artifact Arrangement Instance + +
    + + +

    Descriptions of these TRPs:


    + + + + + + +
    trpsdescription
    trp/1Download a dataset from NOAA web server
    trp/2Run Jupyter notebook with the downloaded dataset
    trp/3Zip all related files
    +
    + + +
    + + + + + + + + + +
    nameidmimeTypedescription
    LBDA NetCDF filecomposition/1/artifact/1application/x-netcdfNetCDF file containing the Living Blended Drought Atlas (LBDA) dataset
    Initial Notebookcomposition/1/artifact/2text/plainInitial state of Jupyter notebook for processing the LBDA dataset
    Final Notebookcomposition/1/artifact/3text/plainFinal state of Jupyter notebook for processing the LBDA dataset
    Final Notebook HTML Renderingcomposition/1/artifact/4text/htmlHTML rendering of final state of the Jupyter notebook
    Graphical Histogram Renderingcomposition/1/artifact/5image/pngGraphical rendering of the histogram of dataset values
    LBDA GeoTIFF filecomposition/1/artifact/6image/tiffGeoTIFF file containing LBDA data cube ready for staging to SKOPE server
    +
    + + +
    + + Web Resource Artifact Arrangement Instance +

    Arrangement ID: arrangement/1
      -
    • Arrangement ID: arrangement/1
    • Arrangement Description: Arrangement describing location of LBDA NetCDF file on NOAA web server
    • Digital artifacts: - + - +
      nameidlocation
      nameidlocation
      LBDA NetCDF filecomposition/1/artifact/1https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc
      LBDA NetCDF filecomposition/1/artifact/1https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc
    Local File System Artifact Arrangement Instance +

    Arrangement ID: arrangement/2
      -
    • Arrangement ID: arrangement/2
    • Arrangement Description: Arrangement on fileserver managed by TRS after downloading dataset and before running Jupyter notebook
    • Digital artifacts: - + - - + +
      nameidlocation
      nameidlocation
      LBDA NetCDF filecomposition/1/artifact/1data/lbda-v2_kddm_pmdi_2017.nc
      Initial Notebookcomposition/1/artifact/2analysis.ipynb
      LBDA NetCDF filecomposition/1/artifact/1data/lbda-v2_kddm_pmdi_2017.nc
      Initial Notebookcomposition/1/artifact/2analysis.ipynb
    Local File System Artifact Arrangement Instance +

    Arrangement ID: arrangement/3
      -
    • Arrangement ID: arrangement/3
    • Arrangement Description: Arrangement on fileserver managed by TRS after running Jupyter notebook
    • Digital artifacts: - + - - - - - + + + + +
      nameidlocation
      nameidlocation
      LBDA NetCDF filecomposition/1/artifact/1data/lbda-v2_kddm_pmdi_2017.nc
      Final Notebookcomposition/1/artifact/3analysis.ipynb
      Final Notebook HTML Renderingcomposition/1/artifact/4output/analysis.html
      Graphical Histogram Renderingcomposition/1/artifact/5output/histogram.png
      LBDA GeoTIFF filecomposition/1/artifact/6output/lbda-v2_kddm_pmdi_2017.tiff
      LBDA NetCDF filecomposition/1/artifact/1data/lbda-v2_kddm_pmdi_2017.nc
      Final Notebookcomposition/1/artifact/3analysis.ipynb
      Final Notebook HTML Renderingcomposition/1/artifact/4output/analysis.html
      Graphical Histogram Renderingcomposition/1/artifact/5output/histogram.png
      LBDA GeoTIFF filecomposition/1/artifact/6output/lbda-v2_kddm_pmdi_2017.tiff
    Zip Artifact Arrangement Instance +

    Arrangement ID: arrangement/4
      -
    • Arrangement ID: arrangement/4
    • Arrangement Description: Arrangement of final products packaged in a Zip file
    • Digital artifacts: - + - - - - + + + +
      nameidlocation
      nameidlocation
      Final Notebookcomposition/1/artifact/3analysis.ipynb
      Final Notebook HTML Renderingcomposition/1/artifact/4analysis.html
      Graphical Histogram Renderingcomposition/1/artifact/5histogram.png
      LBDA GeoTIFF filecomposition/1/artifact/6lbda-v2_kddm_pmdi_2017.tiff
      Final Notebookcomposition/1/artifact/3analysis.ipynb
      Final Notebook HTML Renderingcomposition/1/artifact/4analysis.html
      Graphical Histogram Renderingcomposition/1/artifact/5histogram.png
      LBDA GeoTIFF filecomposition/1/artifact/6lbda-v2_kddm_pmdi_2017.tiff
    - -

    Artifacts:

    - - - - - - - - - -
    nameidmimeTypedescription
    LBDA NetCDF filecomposition/1/artifact/1application/x-netcdfNetCDF file containing the Living Blended Drought Atlas (LBDA) dataset
    Initial Notebookcomposition/1/artifact/2text/plainInitial state of Jupyter notebook for processing the LBDA dataset
    Final Notebookcomposition/1/artifact/3text/plainFinal state of Jupyter notebook for processing the LBDA dataset
    Final Notebook HTML Renderingcomposition/1/artifact/4text/htmlHTML rendering of final state of the Jupyter notebook
    Graphical Histogram Renderingcomposition/1/artifact/5image/pngGraphical rendering of the histogram of dataset values
    LBDA GeoTIFF filecomposition/1/artifact/6image/tiffGeoTIFF file containing LBDA data cube ready for staging to SKOPE server
    - +
    + + diff --git a/demo/02-tro-examples/03-skope-lbda-processing/run.sh b/demo/02-tro-examples/03-skope-lbda-processing/run.sh index e26eb33..1b50ffe 100644 --- a/demo/02-tro-examples/03-skope-lbda-processing/run.sh +++ b/demo/02-tro-examples/03-skope-lbda-processing/run.sh @@ -56,6 +56,9 @@ geist report --outputroot products << END_TEMPLATE {% gv_end %} {% endimg %} +

    Artifacts:

    + {%- table mappings="mappings.json" %}{% query_artifact_str %}{% endtable %} +

    Artifacts by Arrangement:

    {%- query isfilepath=False as query_arrangement_str %} SELECT DISTINCT ?arrangement (STR(?arrangement) AS ?id) ?name ?descr @@ -79,9 +82,6 @@ geist report --outputroot products << END_TEMPLATE {% endfor %} -

    Artifacts:

    - {%- table mappings="mappings.json" %}{% query_artifact_str %}{% endtable %} - {% endhtml %} diff --git a/demo/02-tro-examples/03-skope-lbda-processing/run.txt b/demo/02-tro-examples/03-skope-lbda-processing/run.txt index 98808de..05bc822 100644 --- a/demo/02-tro-examples/03-skope-lbda-processing/run.txt +++ b/demo/02-tro-examples/03-skope-lbda-processing/run.txt @@ -298,6 +298,9 @@ geist report --outputroot products << END_TEMPLATE {% gv_end %} {% endimg %} +

    Artifacts:

    + {%- table mappings="mappings.json" %}{% query_artifact_str %}{% endtable %} +

    Artifacts by Arrangement:

    {%- query isfilepath=False as query_arrangement_str %} SELECT DISTINCT ?arrangement (STR(?arrangement) AS ?id) ?name ?descr @@ -321,9 +324,6 @@ geist report --outputroot products << END_TEMPLATE {% endfor %} -

    Artifacts:

    - {%- table mappings="mappings.json" %}{% query_artifact_str %}{% endtable %} - {% endhtml %} @@ -375,6 +375,18 @@ END_TEMPLATE

    Trusted Research Performances (TRPs) and Arrangements:

    +

    Artifacts:

    + + + + + + + + + +
    nameidmimeTypedescription
    LBDA NetCDF filecomposition/1/artifact/1application/x-netcdfNetCDF file containing the Living Blended Drought Atlas (LBDA) dataset
    Initial Notebookcomposition/1/artifact/2text/plainInitial state of Jupyter notebook for processing the LBDA dataset
    Final Notebookcomposition/1/artifact/3text/plainFinal state of Jupyter notebook for processing the LBDA dataset
    Final Notebook HTML Renderingcomposition/1/artifact/4text/htmlHTML rendering of final state of the Jupyter notebook
    Graphical Histogram Renderingcomposition/1/artifact/5image/pngGraphical rendering of the histogram of dataset values
    LBDA GeoTIFF filecomposition/1/artifact/6image/tiffGeoTIFF file containing LBDA data cube ready for staging to SKOPE server
    +

    Artifacts by Arrangement:

    Web Resource Artifact Arrangement Instance
    • Arrangement ID: arrangement/1
    • @@ -432,18 +444,6 @@ END_TEMPLATE
    -

    Artifacts:

    - - - - - - - - - -
    nameidmimeTypedescription
    LBDA NetCDF filecomposition/1/artifact/1application/x-netcdfNetCDF file containing the Living Blended Drought Atlas (LBDA) dataset
    Initial Notebookcomposition/1/artifact/2text/plainInitial state of Jupyter notebook for processing the LBDA dataset
    Final Notebookcomposition/1/artifact/3text/plainFinal state of Jupyter notebook for processing the LBDA dataset
    Final Notebook HTML Renderingcomposition/1/artifact/4text/htmlHTML rendering of final state of the Jupyter notebook
    Graphical Histogram Renderingcomposition/1/artifact/5image/pngGraphical rendering of the histogram of dataset values
    LBDA GeoTIFF filecomposition/1/artifact/6image/tiffGeoTIFF file containing LBDA data cube ready for staging to SKOPE server
    - From 84a70986696a3d774c0ca0862ef72cd999a3c03e Mon Sep 17 00:00:00 2001 From: Meng Li <34143965+Meng6@users.noreply.github.com> Date: Sun, 31 Mar 2024 18:51:13 +0000 Subject: [PATCH 15/22] Add demo: json2jsonld --- .../06-json2jsonld/Makefile | 1 + .../06-json2jsonld/data/context1.csv | 3 + .../06-json2jsonld/data/context2.csv | 4 + .../06-json2jsonld/data/context3.csv | 29 ++ .../06-json2jsonld/data/tro.json | 237 ++++++++++++++ .../06-json2jsonld/data/tro.jsonld | 288 ++++++++++++++++++ .../06-json2jsonld/products/tro.jsonld | 285 +++++++++++++++++ .../06-json2jsonld/run.sh | 107 +++++++ .../06-json2jsonld/run.txt | 98 ++++++ 9 files changed, 1052 insertions(+) create mode 100644 demo/03-trace-explorations/06-json2jsonld/Makefile create mode 100644 demo/03-trace-explorations/06-json2jsonld/data/context1.csv create mode 100644 demo/03-trace-explorations/06-json2jsonld/data/context2.csv create mode 100644 demo/03-trace-explorations/06-json2jsonld/data/context3.csv create mode 100644 demo/03-trace-explorations/06-json2jsonld/data/tro.json create mode 100644 demo/03-trace-explorations/06-json2jsonld/data/tro.jsonld create mode 100644 demo/03-trace-explorations/06-json2jsonld/products/tro.jsonld create mode 100644 demo/03-trace-explorations/06-json2jsonld/run.sh create mode 100644 demo/03-trace-explorations/06-json2jsonld/run.txt diff --git a/demo/03-trace-explorations/06-json2jsonld/Makefile b/demo/03-trace-explorations/06-json2jsonld/Makefile new file mode 100644 index 0000000..68e529c --- /dev/null +++ b/demo/03-trace-explorations/06-json2jsonld/Makefile @@ -0,0 +1 @@ +include ${SHELL_NOTEBOOK_DOT_DIR}/Makefile.demo-runner diff --git a/demo/03-trace-explorations/06-json2jsonld/data/context1.csv b/demo/03-trace-explorations/06-json2jsonld/data/context1.csv new file mode 100644 index 0000000..a9995c6 --- /dev/null +++ b/demo/03-trace-explorations/06-json2jsonld/data/context1.csv @@ -0,0 +1,3 @@ +k1,k2,id +trp,trpAttribute,trp/{id1}/attribute/{id2} +composition,compArtifact,composition/{id1}/artifact/{id2} \ No newline at end of file diff --git a/demo/03-trace-explorations/06-json2jsonld/data/context2.csv b/demo/03-trace-explorations/06-json2jsonld/data/context2.csv new file mode 100644 index 0000000..e71c042 --- /dev/null +++ b/demo/03-trace-explorations/06-json2jsonld/data/context2.csv @@ -0,0 +1,4 @@ +k1,k2,k3,id +composition,hasArtifact,artifact,composition/{id1}/artifact/{id2} +arrangement,hasLocus,locus,arrangement/{id1}/locus/{id2} +trp,hadPerformanceAttribute,trpAttribute,trp/{id1}/attribute/{id2} \ No newline at end of file diff --git a/demo/03-trace-explorations/06-json2jsonld/data/context3.csv b/demo/03-trace-explorations/06-json2jsonld/data/context3.csv new file mode 100644 index 0000000..6d7192a --- /dev/null +++ b/demo/03-trace-explorations/06-json2jsonld/data/context3.csv @@ -0,0 +1,29 @@ +key,rdfTerm,idPrefix +label,rdfs:label +description,rdfs:comment +wasAssembledBy,trov:wasAssembledBy +hasCapability,trov:hasCapability +capability,@id,trs/capability/ +publicKey,trov:publicKey +wasTimestampedBy,trov:wasTimestampedBy +hasAttribute,trov:hasAttribute +troAttribute,@id,tro/attribute/ +warrantedBy,trov:warrantedBy +hasComposition,trov:hasComposition +composition,@id,composition/ +hasFingerprint,trov:hasFingerprint +fingerprint,@id,fingerprint/ +sha256,trov:sha256 +hasArtifact,trov:hasArtifact +mimeType,trov:mimeType +hasArrangement,trov:hasArrangement +arrangement,@id,arrangement/ +hasLocus,trov:hasLocus +hasLocation,trov:hasLocation +hasPerformance,trov:hasPerformance +trp,@id,trp/ +startedAtTime,trov:startedAtTime +endedAtTime,trov:endedAtTime +accessedArrangement,trov:accessedArrangement +contributedToArrangement,trov:contributedToArrangement +hadPerformanceAttribute,trov:hadPerformanceAttribute diff --git a/demo/03-trace-explorations/06-json2jsonld/data/tro.json b/demo/03-trace-explorations/06-json2jsonld/data/tro.json new file mode 100644 index 0000000..8372008 --- /dev/null +++ b/demo/03-trace-explorations/06-json2jsonld/data/tro.json @@ -0,0 +1,237 @@ + +{ + "label": "Transparent Research Object Instance", + "description": "Download LBDA dataset from NOAA website and prepare for use by researchers employing the SKOPE application", + + "wasAssembledBy": { + "label": "Trusted Research System Instance", + "description": "TRS that can monitor netowrk accesses or provide Internet isolation", + "publicKey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n", + "hasCapability": [ + { + "capability": 1, + "label": "Capability of Recording Internet Access", + "description": "TRS can record internet access" + }, + { + "capability": 2, + "label": "Capability of Providing Internet Isolation", + "description": "TRS can provide Internet isolation" + } + ] + }, + + "wasTimestampedBy": { + "publicKey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n" + }, + + "hasAttribute": [ + { + "troAttribute": 1, + "warrantedBy": [ + {"trp": 1, "trpAttribute": 1}, + {"trp": 2, "trpAttribute": 1}, + {"trp": 3, "trpAttribute": 1} + ] + } + ], + + "hasComposition": + { + "composition": 1, + + "hasFingerprint": { + "fingerprint": 1, + "sha256": "b2b65040893f35d112979c564121c7425f4aad10838aadcb232be5db715ec2b2" + }, + + "hasArtifact": [ + { + "artifact": 1, + "label": "LBDA NetCDF file", + "description": "NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset", + "mimeType": "application/x-netcdf", + "sha256": "b02edb8d27cf9ac19087938dd3d306895e208bd3a9f0458e63292ea2695a1f78" + }, + { + "artifact": 2, + "label": "Initial Notebook", + "description": "Initial state of Jupyter notebook for processing the LBDA dataset", + "mimeType": "text/plain", + "sha256": "8fcf663f1c40cbf846d0e5a136f0797fa560545f5d8c1391a5b13406f3814ad6" + }, + { + "artifact": 3, + "label": "Final Notebook", + "description": "Final state of Jupyter notebook for processing the LBDA dataset", + "mimeType": "text/plain", + "sha256": "8cf4f26b27e83a967bd7ddd97a24e6d4b7a9a7a14fff7ffeb47e2fa9085bccaf" + }, + { + "artifact": 4, + "label": "Final Notebook HTML Rendering", + "description": "HTML rendering of final state of the Jupyter notebook", + "mimeType": "text/html", + "sha256": "870c9297ae7439c283697761c90028312cc0312f13182afb0a0125eb29e5f7f0" + }, + { + "artifact": 5, + "label": "Graphical Histogram Rendering", + "description": "Graphical rendering of the histogram of dataset values", + "mimeType": "image/png", + "sha256": "cfc6e4d5e76754d4802d42a2d6ff79a901c7f0e5daccb256cab542bb7953b2bf" + }, + { + "artifact": 6, + "label": "LBDA GeoTIFF file", + "description": "GeoTIFF file containing LBDA data cube ready for staging to SKOPE server", + "mimeType": "image/tiff", + "sha256": "e035f3af957c4f761c1d502cc28f91676fbf2bbdf5f7045a7151a6d3ff04789d" + } + ] + }, + + "hasArrangement": [ + { + "arrangement": 1, + "label": "Web Resource Artifact Arrangement Instance", + "description": "Arrangement describing location of LBDA NetCDF file on NOAA web server", + "hasLocus": [ + { + "locus": 1, + "label": "LBDA NetCDF file", + "hasArtifact": {"composition": 1, "compArtifact": 1}, + "hasLocation": "https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc" + } + ] + }, + { + "arrangement": 2, + "label": "Local File System Artifact Arrangement Instance", + "description": "Arrangement on fileserver managed by TRS after downloading dataset and before running Jupyter notebook", + "hasLocus": [ + { + "locus": 1, + "label": "LBDA NetCDF file", + "hasArtifact": {"composition": 1, "compArtifact": 1}, + "hasLocation": "data/lbda-v2_kddm_pmdi_2017.nc" + }, + { + "locus": 2, + "label": "Initial Notebook", + "hasArtifact": {"composition": 1, "compArtifact": 2}, + "hasLocation": "analysis.ipynb" + } + ] + }, + { + "arrangement": 3, + "label": "Local File System Artifact Arrangement Instance", + "description": "Arrangement on fileserver managed by TRS after running Jupyter notebook", + "hasLocus": [ + { + "locus": 1, + "label": "LBDA NetCDF file", + "hasArtifact": {"composition": 1, "compArtifact": 1}, + "hasLocation": "data/lbda-v2_kddm_pmdi_2017.nc" + }, + { + "locus": 2, + "label": "Final Notebook", + "hasArtifact": {"composition": 1, "compArtifact": 3}, + "hasLocation": "analysis.ipynb" + }, + { + "locus": 3, + "label": "Final Notebook HTML Rendering", + "hasArtifact": {"composition": 1, "compArtifact": 4}, + "hasLocation": "output/analysis.html" + }, + { + "locus": 4, + "label": "Graphical Histogram Rendering", + "hasArtifact": {"composition": 1, "compArtifact": 5}, + "hasLocation": "output/histogram.png" + }, + { + "locus": 5, + "label": "LBDA GeoTIFF file", + "hasArtifact": {"composition": 1, "compArtifact": 6}, + "hasLocation": "output/lbda-v2_kddm_pmdi_2017.tiff" + } + ] + }, + { + "arrangement": 4, + "label": "Zip Artifact Arrangement Instance", + "description": "Arrangement of final products packaged in a Zip file", + "hasLocus": [ + { + "locus": 1, + "label": "Final Notebook", + "hasArtifact": {"composition": 1, "compArtifact": 3}, + "hasLocation": "analysis.ipynb" + }, + { + "locus": 2, + "label": "Final Notebook HTML Rendering", + "hasArtifact": {"composition": 1, "compArtifact": 4}, + "hasLocation": "analysis.html" + }, + { + "locus": 3, + "label": "Graphical Histogram Rendering", + "hasArtifact": {"composition": 1, "compArtifact": 5}, + "hasLocation": "histogram.png" + }, + { + "locus": 5, + "label": "LBDA GeoTIFF file", + "hasArtifact": {"composition": 1, "compArtifact": 6}, + "hasLocation": "lbda-v2_kddm_pmdi_2017.tiff" + } + ] + } + ], + + "hasPerformance": [ + { + "trp": 1, + "description": "Process that downloaded the LBDA NetCDF file from NOAA server to local filesystem", + "startedAtTime": "2023-05-08T01:30:00Z", + "endedAtTime": "2023-05-08T01:40:00Z", + "accessedArrangement": { "arrangement": 1 }, + "contributedToArrangement": { "arrangement": 2 }, + "hadPerformanceAttribute": { + "trpAttribute": 1, + "warrantedBy": { "capability": 1 } + } + }, + + { + "trp": 2, + "description": "Process that ran Jupyter notebook", + "startedAtTime": "2023-05-08T01:41:00Z", + "endedAtTime": "2023-05-08T01:50:00Z", + "accessedArrangement": { "arrangement": 2 }, + "contributedToArrangement": { "arrangement": 3 }, + "hadPerformanceAttribute": { + "trpAttribute": 1, + "warrantedBy": { "capability": 2 } + } + }, + + { + "trp": 3, + "description": "Process that packaged products of the Jupyter notebook execution in a Zip file", + "startedAtTime": "2023-05-08T01:51:00Z", + "endedAtTime": "2023-05-08T02:00:00Z", + "accessedArrangement": { "arrangement": 3 }, + "contributedToArrangement": { "arrangement": 4 }, + "hadPerformanceAttribute": { + "trpAttribute": 1, + "warrantedBy": { "capability": 2 } + } + } + ] +} diff --git a/demo/03-trace-explorations/06-json2jsonld/data/tro.jsonld b/demo/03-trace-explorations/06-json2jsonld/data/tro.jsonld new file mode 100644 index 0000000..8baf0c5 --- /dev/null +++ b/demo/03-trace-explorations/06-json2jsonld/data/tro.jsonld @@ -0,0 +1,288 @@ +{ + "@context": [{ + "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + "rdfs": "http://www.w3.org/2000/01/rdf-schema#", + "trov": "https://w3id.org/trace/2023/05/trov#", + "@base": "https://github.com/transparency-certified/trace-model/tree/master/02-tro-examples/03-skope-/" + }], + + "@graph": [ + { + "@id": "tro", + "@type": "trov:TransparentResearchObject", + "rdfs:label": "Transparent Research Object Instance", + "rdfs:comment": "Download LBDA dataset from NOAA website and prepare for use by researchers employing the SKOPE application", + + "trov:wasAssembledBy": { + "@id": "trs", + "@type": "trov:TrustedResearchSystem", + "rdfs:label": "Trusted Research System Instance", + "rdfs:comment": "TRS that can monitor netowrk accesses or provide Internet isolation", + "trov:publicKey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n", + "trov:hasCapability": [ + { + "@id": "trs/capability/1", + "@type": "trov:CanRecordInternetAccess", + "rdfs:label": "Capability of Recording Internet Access", + "rdfs:comment": "TRS can record internet access" + }, + { + "@id": "trs/capability/2", + "@type": "trov:CanProvideInternetIsolation", + "rdfs:label": "Capability of Providing Internet Isolation", + "rdfs:comment": "TRS can provide Internet isolation" + } + ] + }, + + "trov:wasTimestampedBy": { + "@id": "tsa", + "@type": "trov:TimeStampingAuthority", + "trov:publicKey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n" + }, + + "trov:hasAttribute": [ + { + "@id": "tro/attribute/1", + "@type": "trov:IncludesAllInputData", + "trov:warrantedBy": [ + {"@id": "trp/1/attribute/1" }, + {"@id": "trp/2/attribute/1" }, + {"@id": "trp/3/attribute/1" } + ] + } + ], + + "trov:hasComposition": + { + "@id": "composition/1", + "@type": "trov:ArtifactComposition", + + "trov:hasFingerprint": { + "@id": "fingerprint", + "@type": "trov:CompositionFingerprint", + "trov:sha256": "b2b65040893f35d112979c564121c7425f4aad10838aadcb232be5db715ec2b2" + }, + + "trov:hasArtifact": [ + { + "@id": "composition/1/artifact/1", + "@type": "trov:DataArtifact", + "rdfs:label": "LBDA NetCDF file", + "rdfs:comment": "NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset", + "trov:mimeType": "application/x-netcdf", + "trov:sha256": "b02edb8d27cf9ac19087938dd3d306895e208bd3a9f0458e63292ea2695a1f78" + }, + { + "@id": "composition/1/artifact/2", + "@type": "trov:ComputationalNotebookArtifact", + "rdfs:label": "Initial Notebook", + "rdfs:comment": "Initial state of Jupyter notebook for processing the LBDA dataset", + "trov:mimeType": "text/plain", + "trov:sha256": "8fcf663f1c40cbf846d0e5a136f0797fa560545f5d8c1391a5b13406f3814ad6" + }, + { + "@id": "composition/1/artifact/3", + "@type": "trov:ComputationalNotebookArtifact", + "rdfs:label": "Final Notebook", + "rdfs:comment": "Final state of Jupyter notebook for processing the LBDA dataset", + "trov:mimeType": "text/plain", + "trov:sha256": "8cf4f26b27e83a967bd7ddd97a24e6d4b7a9a7a14fff7ffeb47e2fa9085bccaf" + }, + { + "@id": "composition/1/artifact/4", + "@type": "trov:HTMLArtifact", + "rdfs:label": "Final Notebook HTML Rendering", + "rdfs:comment": "HTML rendering of final state of the Jupyter notebook", + "trov:mimeType": "text/html", + "trov:sha256": "870c9297ae7439c283697761c90028312cc0312f13182afb0a0125eb29e5f7f0" + }, + { + "@id": "composition/1/artifact/5", + "@type": "trov:ImageArtifact", + "rdfs:label": "Graphical Histogram Rendering", + "rdfs:comment": "Graphical rendering of the histogram of dataset values", + "trov:mimeType": "image/png", + "trov:sha256": "cfc6e4d5e76754d4802d42a2d6ff79a901c7f0e5daccb256cab542bb7953b2bf" + }, + { + "@id": "composition/1/artifact/6", + "@type": "trov:DataArtifact", + "rdfs:label": "LBDA GeoTIFF file", + "rdfs:comment": "GeoTIFF file containing LBDA data cube ready for staging to SKOPE server", + "trov:mimeType": "image/tiff", + "trov:sha256": "e035f3af957c4f761c1d502cc28f91676fbf2bbdf5f7045a7151a6d3ff04789d" + } + ] + }, + + "trov:hasArrangement": [ + { + "@id": "arrangement/1", + "@type": "trov:WebResourceArtifactArrangement", + "rdfs:label": "Web Resource Artifact Arrangement Instance", + "rdfs:comment": "Arrangement describing location of LBDA NetCDF file on NOAA web server", + "trov:hasLocus": [ + { + "@id": "arrangement/1/locus/1", + "@type": "trov:ArtifactLocus", + "rdfs:label": "LBDA NetCDF file", + "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, + "trov:hasLocation": "https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc" + } + ] + }, + { + "@id": "arrangement/2", + "@type": "trov:LocalFilesystemArtifactArrangement", + "rdfs:label": "Local File System Artifact Arrangement Instance", + "rdfs:comment": "Arrangement on fileserver managed by TRS after downloading dataset and before running Jupyter notebook", + "trov:hasLocus": [ + { + "@id": "arrangement/2/locus/1", + "@type": "trov:ArtifactLocus", + "rdfs:label": "LBDA NetCDF file", + "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, + "trov:hasLocation": "data/lbda-v2_kddm_pmdi_2017.nc" + }, + { + "@id": "arrangement/2/locus/2", + "@type": "trov:ArtifactLocus", + "rdfs:label": "Initial Notebook", + "trov:hasArtifact": { "@id": "composition/1/artifact/2" }, + "trov:hasLocation": "analysis.ipynb" + } + ] + }, + { + "@id": "arrangement/3", + "@type": "trov:LocalFilesystemArtifactArrangement", + "rdfs:label": "Local File System Artifact Arrangement Instance", + "rdfs:comment": "Arrangement on fileserver managed by TRS after running Jupyter notebook", + "trov:hasLocus": [ + { + "@id": "arrangement/3/locus/1", + "@type": "trov:ArtifactLocus", + "rdfs:label": "LBDA NetCDF file", + "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, + "trov:hasLocation": "data/lbda-v2_kddm_pmdi_2017.nc" + }, + { + "@id": "arrangement/3/locus/2", + "@type": "trov:ArtifactLocus", + "rdfs:label": "Final Notebook", + "trov:hasArtifact": { "@id": "composition/1/artifact/3" }, + "trov:hasLocation": "analysis.ipynb" + }, + { + "@id": "arrangement/3/locus/3", + "@type": "trov:ArtifactLocus", + "rdfs:label": "Final Notebook HTML Rendering", + "trov:hasArtifact": { "@id": "composition/1/artifact/4" }, + "trov:hasLocation": "output/analysis.html" + }, + { + "@id": "arrangement/3/locus/4", + "@type": "trov:ArtifactLocus", + "rdfs:label": "Graphical Histogram Rendering", + "trov:hasArtifact": { "@id": "composition/1/artifact/5" }, + "trov:hasLocation": "output/histogram.png" + }, + { + "@id": "arrangement/3/locus/5", + "@type": "trov:ArtifactLocus", + "rdfs:label": "LBDA GeoTIFF file", + "trov:hasArtifact": { "@id": "composition/1/artifact/6" }, + "trov:hasLocation": "output/lbda-v2_kddm_pmdi_2017.tiff" + } + ] + }, + { + "@id": "arrangement/4", + "@type": "trov:ZipArtifactArrangement", + "rdfs:label": "Zip Artifact Arrangement Instance", + "rdfs:comment": "Arrangement of final products packaged in a Zip file", + "trov:hasLocus": [ + { + "@id": "arrangement/4/locus/1", + "@type": "trov:ArtifactLocus", + "rdfs:label": "Final Notebook", + "trov:hasArtifact": { "@id": "composition/1/artifact/3" }, + "trov:hasLocation": "analysis.ipynb" + }, + { + "@id": "arrangement/4/locus/2", + "@type": "trov:ArtifactLocus", + "rdfs:label": "Final Notebook HTML Rendering", + "trov:hasArtifact": { "@id": "composition/1/artifact/4" }, + "trov:hasLocation": "analysis.html" + }, + { + "@id": "arrangement/4/locus/3", + "@type": "trov:ArtifactLocus", + "rdfs:label": "Graphical Histogram Rendering", + "trov:hasArtifact": { "@id": "composition/1/artifact/5" }, + "trov:hasLocation": "histogram.png" + }, + { + "@id": "arrangement/4/locus/5", + "@type": "trov:ArtifactLocus", + "rdfs:label": "LBDA GeoTIFF file", + "trov:hasArtifact": { "@id": "composition/1/artifact/6" }, + "trov:hasLocation": "lbda-v2_kddm_pmdi_2017.tiff" + } + ] + } + ], + + "trov:hasPerformance": [ + { + "@id": "trp/1", + "@type": "trov:TrustedResearchPerformance", + "rdfs:comment": "Process that downloaded the LBDA NetCDF file from NOAA server to local filesystem", + "trov:wasConductedBy": { "@id": "trs" }, + "trov:startedAtTime": "2023-05-08T01:30:00Z", + "trov:endedAtTime": "2023-05-08T01:40:00Z", + "trov:accessedArrangement": { "@id": "arrangement/1" }, + "trov:contributedToArrangement": { "@id": "arrangement/2" }, + "trov:hadPerformanceAttribute": { + "@id": "trp/1/attribute/1", + "@type": "trov:InternetAccessRecording", + "trov:warrantedBy": { "@id": "trs/capability/1" } + } + }, + + { + "@id": "trp/2", + "@type": "trov:TrustedResearchPerformance", + "rdfs:comment": "Process that ran Jupyter notebook", + "trov:wasConductedBy": { "@id": "trs" }, + "trov:startedAtTime": "2023-05-08T01:41:00Z", + "trov:endedAtTime": "2023-05-08T01:50:00Z", + "trov:accessedArrangement": { "@id": "arrangement/2" }, + "trov:contributedToArrangement": { "@id": "arrangement/3" }, + "trov:hadPerformanceAttribute": { + "@id": "trp/2/attribute/1", + "@type": "trov:InternetIsolation", + "trov:warrantedBy": { "@id": "trs/capability/2" } + } + }, + + { + "@id": "trp/3", + "@type": "trov:TrustedResearchPerformance", + "rdfs:comment": "Process that packaged products of the Jupyter notebook execution in a Zip file", + "trov:wasConductedBy": { "@id": "trs" }, + "trov:startedAtTime": "2023-05-08T01:51:00Z", + "trov:endedAtTime": "2023-05-08T02:00:00Z", + "trov:accessedArrangement": { "@id": "arrangement/3" }, + "trov:contributedToArrangement": { "@id": "arrangement/4" }, + "trov:hadPerformanceAttribute": { + "@id": "trp/3/attribute/1", + "@type": "trov:InternetIsolation", + "trov:warrantedBy": { "@id": "trs/capability/2" } + } + } + ] + } +]} diff --git a/demo/03-trace-explorations/06-json2jsonld/products/tro.jsonld b/demo/03-trace-explorations/06-json2jsonld/products/tro.jsonld new file mode 100644 index 0000000..971f517 --- /dev/null +++ b/demo/03-trace-explorations/06-json2jsonld/products/tro.jsonld @@ -0,0 +1,285 @@ +{ + "@context": [ + { + "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + "rdfs": "http://www.w3.org/2000/01/rdf-schema#", + "trov": "https://w3id.org/trace/2023/05/trov#", + "@base": "https://github.com/transparency-certified/trace-model/tree/master/02-tro-examples/03-skope-/" + } + ], + "@graph": [ + { + "rdfs:label": "Transparent Research Object Instance", + "rdfs:comment": "Download LBDA dataset from NOAA website and prepare for use by researchers employing the SKOPE application", + "trov:wasAssembledBy": { + "rdfs:label": "Trusted Research System Instance", + "rdfs:comment": "TRS that can monitor netowrk accesses or provide Internet isolation", + "trov:hasCapability": [ + { + "rdfs:label": "Capability of Recording Internet Access", + "rdfs:comment": "TRS can record internet access", + "@id": "trs/capability/1" + }, + { + "rdfs:label": "Capability of Providing Internet Isolation", + "rdfs:comment": "TRS can provide Internet isolation", + "@id": "trs/capability/2" + } + ], + "trov:publicKey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n" + }, + "trov:wasTimestampedBy": { + "trov:publicKey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n" + }, + "trov:hasAttribute": [ + { + "@id": "tro/attribute/1", + "trov:warrantedBy": [ + { + "@id": "trp/1/attribute/1" + }, + { + "@id": "trp/2/attribute/1" + }, + { + "@id": "trp/3/attribute/1" + } + ] + } + ], + "trov:hasComposition": { + "@id": "composition/1", + "trov:hasFingerprint": { + "@id": "fingerprint/1", + "trov:sha256": "b2b65040893f35d112979c564121c7425f4aad10838aadcb232be5db715ec2b2" + }, + "trov:hasArtifact": [ + { + "@id": "composition/1/artifact/1", + "rdfs:label": "LBDA NetCDF file", + "rdfs:comment": "NetCDF file containing the Living Blended Drought Atlas (LBDA) dataset", + "trov:sha256": "b02edb8d27cf9ac19087938dd3d306895e208bd3a9f0458e63292ea2695a1f78", + "trov:mimeType": "application/x-netcdf" + }, + { + "@id": "composition/1/artifact/2", + "rdfs:label": "Initial Notebook", + "rdfs:comment": "Initial state of Jupyter notebook for processing the LBDA dataset", + "trov:sha256": "8fcf663f1c40cbf846d0e5a136f0797fa560545f5d8c1391a5b13406f3814ad6", + "trov:mimeType": "text/plain" + }, + { + "@id": "composition/1/artifact/3", + "rdfs:label": "Final Notebook", + "rdfs:comment": "Final state of Jupyter notebook for processing the LBDA dataset", + "trov:sha256": "8cf4f26b27e83a967bd7ddd97a24e6d4b7a9a7a14fff7ffeb47e2fa9085bccaf", + "trov:mimeType": "text/plain" + }, + { + "@id": "composition/1/artifact/4", + "rdfs:label": "Final Notebook HTML Rendering", + "rdfs:comment": "HTML rendering of final state of the Jupyter notebook", + "trov:sha256": "870c9297ae7439c283697761c90028312cc0312f13182afb0a0125eb29e5f7f0", + "trov:mimeType": "text/html" + }, + { + "@id": "composition/1/artifact/5", + "rdfs:label": "Graphical Histogram Rendering", + "rdfs:comment": "Graphical rendering of the histogram of dataset values", + "trov:sha256": "cfc6e4d5e76754d4802d42a2d6ff79a901c7f0e5daccb256cab542bb7953b2bf", + "trov:mimeType": "image/png" + }, + { + "@id": "composition/1/artifact/6", + "rdfs:label": "LBDA GeoTIFF file", + "rdfs:comment": "GeoTIFF file containing LBDA data cube ready for staging to SKOPE server", + "trov:sha256": "e035f3af957c4f761c1d502cc28f91676fbf2bbdf5f7045a7151a6d3ff04789d", + "trov:mimeType": "image/tiff" + } + ] + }, + "trov:hasArrangement": [ + { + "rdfs:label": "Web Resource Artifact Arrangement Instance", + "rdfs:comment": "Arrangement describing location of LBDA NetCDF file on NOAA web server", + "@id": "arrangement/1", + "trov:hasLocus": [ + { + "@id": "arrangement/1/locus/1", + "rdfs:label": "LBDA NetCDF file", + "trov:hasArtifact": { + "@id": "composition/1/artifact/1" + }, + "trov:hasLocation": "https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc" + } + ] + }, + { + "rdfs:label": "Local File System Artifact Arrangement Instance", + "rdfs:comment": "Arrangement on fileserver managed by TRS after downloading dataset and before running Jupyter notebook", + "@id": "arrangement/2", + "trov:hasLocus": [ + { + "@id": "arrangement/2/locus/1", + "rdfs:label": "LBDA NetCDF file", + "trov:hasArtifact": { + "@id": "composition/1/artifact/1" + }, + "trov:hasLocation": "data/lbda-v2_kddm_pmdi_2017.nc" + }, + { + "@id": "arrangement/2/locus/2", + "rdfs:label": "Initial Notebook", + "trov:hasArtifact": { + "@id": "composition/1/artifact/2" + }, + "trov:hasLocation": "analysis.ipynb" + } + ] + }, + { + "rdfs:label": "Local File System Artifact Arrangement Instance", + "rdfs:comment": "Arrangement on fileserver managed by TRS after running Jupyter notebook", + "@id": "arrangement/3", + "trov:hasLocus": [ + { + "@id": "arrangement/3/locus/1", + "rdfs:label": "LBDA NetCDF file", + "trov:hasArtifact": { + "@id": "composition/1/artifact/1" + }, + "trov:hasLocation": "data/lbda-v2_kddm_pmdi_2017.nc" + }, + { + "@id": "arrangement/3/locus/2", + "rdfs:label": "Final Notebook", + "trov:hasArtifact": { + "@id": "composition/1/artifact/3" + }, + "trov:hasLocation": "analysis.ipynb" + }, + { + "@id": "arrangement/3/locus/3", + "rdfs:label": "Final Notebook HTML Rendering", + "trov:hasArtifact": { + "@id": "composition/1/artifact/4" + }, + "trov:hasLocation": "output/analysis.html" + }, + { + "@id": "arrangement/3/locus/4", + "rdfs:label": "Graphical Histogram Rendering", + "trov:hasArtifact": { + "@id": "composition/1/artifact/5" + }, + "trov:hasLocation": "output/histogram.png" + }, + { + "@id": "arrangement/3/locus/5", + "rdfs:label": "LBDA GeoTIFF file", + "trov:hasArtifact": { + "@id": "composition/1/artifact/6" + }, + "trov:hasLocation": "output/lbda-v2_kddm_pmdi_2017.tiff" + } + ] + }, + { + "rdfs:label": "Zip Artifact Arrangement Instance", + "rdfs:comment": "Arrangement of final products packaged in a Zip file", + "@id": "arrangement/4", + "trov:hasLocus": [ + { + "@id": "arrangement/4/locus/1", + "rdfs:label": "Final Notebook", + "trov:hasArtifact": { + "@id": "composition/1/artifact/3" + }, + "trov:hasLocation": "analysis.ipynb" + }, + { + "@id": "arrangement/4/locus/2", + "rdfs:label": "Final Notebook HTML Rendering", + "trov:hasArtifact": { + "@id": "composition/1/artifact/4" + }, + "trov:hasLocation": "analysis.html" + }, + { + "@id": "arrangement/4/locus/3", + "rdfs:label": "Graphical Histogram Rendering", + "trov:hasArtifact": { + "@id": "composition/1/artifact/5" + }, + "trov:hasLocation": "histogram.png" + }, + { + "@id": "arrangement/4/locus/5", + "rdfs:label": "LBDA GeoTIFF file", + "trov:hasArtifact": { + "@id": "composition/1/artifact/6" + }, + "trov:hasLocation": "lbda-v2_kddm_pmdi_2017.tiff" + } + ] + } + ], + "trov:hasPerformance": [ + { + "rdfs:comment": "Process that downloaded the LBDA NetCDF file from NOAA server to local filesystem", + "@id": "trp/1", + "trov:startedAtTime": "2023-05-08T01:30:00Z", + "trov:endedAtTime": "2023-05-08T01:40:00Z", + "trov:accessedArrangement": { + "@id": "arrangement/1" + }, + "trov:contributedToArrangement": { + "@id": "arrangement/2" + }, + "trov:hadPerformanceAttribute": { + "@id": "trp/1/attribute/1", + "trov:warrantedBy": { + "@id": "trs/capability/1" + } + } + }, + { + "rdfs:comment": "Process that ran Jupyter notebook", + "@id": "trp/2", + "trov:startedAtTime": "2023-05-08T01:41:00Z", + "trov:endedAtTime": "2023-05-08T01:50:00Z", + "trov:accessedArrangement": { + "@id": "arrangement/2" + }, + "trov:contributedToArrangement": { + "@id": "arrangement/3" + }, + "trov:hadPerformanceAttribute": { + "@id": "trp/2/attribute/1", + "trov:warrantedBy": { + "@id": "trs/capability/2" + } + } + }, + { + "rdfs:comment": "Process that packaged products of the Jupyter notebook execution in a Zip file", + "@id": "trp/3", + "trov:startedAtTime": "2023-05-08T01:51:00Z", + "trov:endedAtTime": "2023-05-08T02:00:00Z", + "trov:accessedArrangement": { + "@id": "arrangement/3" + }, + "trov:contributedToArrangement": { + "@id": "arrangement/4" + }, + "trov:hadPerformanceAttribute": { + "@id": "trp/3/attribute/1", + "trov:warrantedBy": { + "@id": "trs/capability/2" + } + } + } + ] + } + ] +} \ No newline at end of file diff --git a/demo/03-trace-explorations/06-json2jsonld/run.sh b/demo/03-trace-explorations/06-json2jsonld/run.sh new file mode 100644 index 0000000..aa43e41 --- /dev/null +++ b/demo/03-trace-explorations/06-json2jsonld/run.sh @@ -0,0 +1,107 @@ +#!/usr/bin/env bash + +CONTEXT1_FILE_PATH=data/context1.csv +CONTEXT2_FILE_PATH=data/context2.csv +CONTEXT3_FILE_PATH=data/context3.csv +JSON_FILE_PATH=data/tro.json +JSONLD_FILE_PATH=products/tro.jsonld + +# ------------------------------------------------------------------------------ + +bash_cell json2jsonld << END_CELL + +python3 << END_PYTHON + +from pyld import jsonld +import pandas as pd +import numpy as np +import json + +def process_id(value): + return str(value).strip() + +def update_dict(data, keys, cm): + + # Unpack context mappings + cm1, cm2, cm3 = cm + + # TYPE 1 + # e.g., {"trp": 1, "trpAttribute": 1} => {"@id": "trp/1/attribute/1" } + for item in cm1: + k1, k2 = item["k1"], item["k2"] + if (k1 in keys) and (k2 in keys): + data["@id"] = item["id"].format(id1=process_id(data[k1]), id2=process_id(data[k2])) + data.pop(k1) + data.pop(k2) + + # TYPE 2 + # e.g., {"composition": 1, "hasArtifact": {"artifact": 1}} OR {"composition": 1, "hasArtifact": [{"artifact": 1}]} + # => {"composition": 1, "hasArtifact": {"@id": "composition/1/artifact/1"}} OR {"composition": 1, "hasArtifact": [{"@id": "composition/1/artifact/1"}]} + for item in cm2: + k1, k2, k3 = item["k1"], item["k2"], item["k3"] + if (k1 in keys) and (k2 in keys): + if isinstance(data[k2], dict): + data[k2]["@id"] = item["id"].format(id1=process_id(data[k1]), id2=process_id(data[k2][k3])) + data[k2].pop(k3) + else: + for idx, artifact in enumerate(data[k2]): + data[k2][idx]["@id"] = item["id"].format(id1=process_id(data[k1]), id2=process_id(artifact[k3])) + data[k2][idx].pop(k3) + + # TYPE 3 + # one-to-one mappings based on context3.csv + for key in cm3.keys(): + if key in keys: + if isinstance(cm3[key]["idPrefix"], str): + data[cm3[key]["rdfTerm"]] = cm3[key]["idPrefix"] + process_id(data.pop(key)) + else: + data[cm3[key]["rdfTerm"]] = data.pop(key) + + return data + +def traverse_json(obj, cm): + if isinstance(obj, list): + for item in obj: + traverse_json(item, cm) + elif isinstance(obj, dict): + keys = obj.keys() + obj = update_dict(obj, keys, cm) + for k, v in obj.items(): + if isinstance(v, (list, dict)): + traverse_json(v, cm) + return obj + +# Load a TRO JSON Declaration +with open('${JSON_FILE_PATH}', 'r', encoding='utf-8') as fin: + content = fin.read() +json_content = json.loads(content) + +# Load the context mappings +cm1 = pd.read_csv('${CONTEXT1_FILE_PATH}').to_dict(orient='records') +cm2 = pd.read_csv('${CONTEXT2_FILE_PATH}').to_dict(orient='records') +cm3 = pd.read_csv('${CONTEXT3_FILE_PATH}', index_col='key').T.to_dict(orient='dict') +cm = [cm1, cm2, cm3] + +# Traverse and update it recursively +content = traverse_json(json_content, cm) + +# Add context +jsonld = { + "@context": [{ + "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + "rdfs": "http://www.w3.org/2000/01/rdf-schema#", + "trov": "https://w3id.org/trace/2023/05/trov#", + "@base": "https://github.com/transparency-certified/trace-model/tree/master/02-tro-examples/03-skope-/" + }] +} + +jsonld["@graph"] = [content] + +with open('${JSONLD_FILE_PATH}', 'w', encoding='utf-8') as fout: + json.dump(jsonld, fout, indent=2) + +END_PYTHON + +END_CELL + +# ------------------------------------------------------------------------------ diff --git a/demo/03-trace-explorations/06-json2jsonld/run.txt b/demo/03-trace-explorations/06-json2jsonld/run.txt new file mode 100644 index 0000000..2204aae --- /dev/null +++ b/demo/03-trace-explorations/06-json2jsonld/run.txt @@ -0,0 +1,98 @@ +===================================================== bash cell | json2jsonld ====================================================== + +python3 << END_PYTHON + +from pyld import jsonld +import pandas as pd +import numpy as np +import json + +def process_id(value): + return str(value).strip() + +def update_dict(data, keys, cm): + + # Unpack context mappings + cm1, cm2, cm3 = cm + + # TYPE 1 + # e.g., {"trp": 1, "trpAttribute": 1} => {"@id": "trp/1/attribute/1" } + for item in cm1: + k1, k2 = item["k1"], item["k2"] + if (k1 in keys) and (k2 in keys): + data["@id"] = item["id"].format(id1=process_id(data[k1]), id2=process_id(data[k2])) + data.pop(k1) + data.pop(k2) + + # TYPE 2 + # e.g., {"composition": 1, "hasArtifact": {"artifact": 1}} OR {"composition": 1, "hasArtifact": [{"artifact": 1}]} + # => {"composition": 1, "hasArtifact": {"@id": "composition/1/artifact/1"}} OR {"composition": 1, "hasArtifact": [{"@id": "composition/1/artifact/1"}]} + for item in cm2: + k1, k2, k3 = item["k1"], item["k2"], item["k3"] + if (k1 in keys) and (k2 in keys): + if isinstance(data[k2], dict): + data[k2]["@id"] = item["id"].format(id1=process_id(data[k1]), id2=process_id(data[k2][k3])) + data[k2].pop(k3) + else: + for idx, artifact in enumerate(data[k2]): + data[k2][idx]["@id"] = item["id"].format(id1=process_id(data[k1]), id2=process_id(artifact[k3])) + data[k2][idx].pop(k3) + + # TYPE 3 + # one-to-one mappings based on context3.csv + for key in cm3.keys(): + if key in keys: + if isinstance(cm3[key]["idPrefix"], str): + data[cm3[key]["rdfTerm"]] = cm3[key]["idPrefix"] + process_id(data.pop(key)) + else: + data[cm3[key]["rdfTerm"]] = data.pop(key) + + return data + +def traverse_json(obj, cm): + if isinstance(obj, list): + for item in obj: + traverse_json(item, cm) + elif isinstance(obj, dict): + keys = obj.keys() + obj = update_dict(obj, keys, cm) + for k, v in obj.items(): + if isinstance(v, (list, dict)): + traverse_json(v, cm) + return obj + +# Load a TRO JSON Declaration +with open('data/tro.json', 'r', encoding='utf-8') as fin: + content = fin.read() +json_content = json.loads(content) + +# Load the context mappings +cm1 = pd.read_csv('data/context1.csv').to_dict(orient='records') +cm2 = pd.read_csv('data/context2.csv').to_dict(orient='records') +cm3 = pd.read_csv('data/context3.csv', index_col='key').T.to_dict(orient='dict') +cm = [cm1, cm2, cm3] + +# Traverse and update it recursively +content = traverse_json(json_content, cm) + +# Add context +jsonld = { + "@context": [{ + "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + "rdfs": "http://www.w3.org/2000/01/rdf-schema#", + "trov": "https://w3id.org/trace/2023/05/trov#", + "@base": "https://github.com/transparency-certified/trace-model/tree/master/02-tro-examples/03-skope-/" + }] +} + +jsonld["@graph"] = [content] + +with open('products/tro.jsonld', 'w', encoding='utf-8') as fout: + json.dump(jsonld, fout, indent=2) + +END_PYTHON + +----------------------------------------------------------- cell outputs ----------------------------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + From 26501de4910aedae2bde6e2334d5c71e8adfb4ad Mon Sep 17 00:00:00 2001 From: Meng Li <34143965+Meng6@users.noreply.github.com> Date: Mon, 6 May 2024 22:06:28 +0000 Subject: [PATCH 16/22] Upgrade gesit to 0.2.0 and automate the report generation process --- README.md | 7 +- demo/01-trov-vocab/run.sh | 9 +- demo/01-trov-vocab/run.txt | 9 +- .../01-two-artifacts-no-trp/run.txt | 16 +- .../02-three-artifacts-one-trp/run.txt | 16 +- .../03-skope-lbda-processing/mappings.json | 1 + .../products/logo.png | Bin 41090 -> 0 bytes .../products/report.html | 350 +++++---- .../03-skope-lbda-processing/run.sh | 88 ++- .../03-skope-lbda-processing/run.txt | 285 ++++++-- .../03-skope-lbda-processing/templates.geist | 166 ++++- .../03-skope-lbda-processing/tro/tro.jsonld | 16 +- demo/02-tro-examples/common/query-tro.sh | 16 +- .../01-gpg-runtime/02-simple-tro/run.sh | 4 +- .../01-gpg-runtime/02-simple-tro/run.txt | 4 +- .../products/tro1.png | Bin 135122 -> 0 bytes .../products/tro1.svg | 279 +++++++ .../products/tro2.png | Bin 318369 -> 0 bytes .../products/tro2.svg | 493 +++++++++++++ .../products/tro3.png | Bin 400796 -> 0 bytes .../products/tro3.svg | 679 ++++++++++++++++++ .../products/tro4.png | Bin 113858 -> 0 bytes .../products/tro4.svg | 220 ++++++ .../products/tro5.png | Bin 128961 -> 0 bytes .../products/tro5.svg | 246 +++++++ .../05-validate-tro-declaration/run.sh | 20 +- .../05-validate-tro-declaration/run.txt | 20 +- requirements.txt | 3 +- 28 files changed, 2563 insertions(+), 384 deletions(-) delete mode 100644 demo/02-tro-examples/03-skope-lbda-processing/products/logo.png delete mode 100644 demo/03-trace-explorations/05-validate-tro-declaration/products/tro1.png create mode 100644 demo/03-trace-explorations/05-validate-tro-declaration/products/tro1.svg delete mode 100644 demo/03-trace-explorations/05-validate-tro-declaration/products/tro2.png create mode 100644 demo/03-trace-explorations/05-validate-tro-declaration/products/tro2.svg delete mode 100644 demo/03-trace-explorations/05-validate-tro-declaration/products/tro3.png create mode 100644 demo/03-trace-explorations/05-validate-tro-declaration/products/tro3.svg delete mode 100644 demo/03-trace-explorations/05-validate-tro-declaration/products/tro4.png create mode 100644 demo/03-trace-explorations/05-validate-tro-declaration/products/tro4.svg delete mode 100644 demo/03-trace-explorations/05-validate-tro-declaration/products/tro5.png create mode 100644 demo/03-trace-explorations/05-validate-tro-declaration/products/tro5.svg diff --git a/README.md b/README.md index 167c803..327ba7b 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,11 @@ Make commands issued in the top-level directory are used to obtain the Docker im ## Setup the environment -First start the REPRO in interactive mode using the `make start-repro` command (or the shorthand `make start`). +First pull the parent image from Docker Hub using the `make pull-parent` command and build this REPRO's Docker image using the `make build-image` command (or the shorthand `image`). + +Then start the REPRO in interactive mode using the `make start-repro` command (or the shorthand `make start`). -Then Install the related Python packages using the `pip install .` command. +Next, install the related Python packages using the `pip install .` command. Finally, exit the REPRO using the `exit` command. @@ -82,6 +84,7 @@ Below gives a brief description of these demonstrations: - _03-tro-fingerprint-state_ demonstrates how a fingerprint of a given state can be computed. - _04-timestamp_ demonstrates how a trusted timestamp can be created and applied to a TRO. - _05-validate-tro-declaration_ demonstrates how a TRO declaration can be validated through 5 examples. + - _06-json2jsonld_ demonstrates how to convert JSON into JSON-LD to enable a light version of TROV. To establish that the demonstrations can be reproduced, first use the `make clean-demo` command to delete the files produced by the demo: ``` diff --git a/demo/01-trov-vocab/run.sh b/demo/01-trov-vocab/run.sh index 7d08cf6..c212557 100644 --- a/demo/01-trov-vocab/run.sh +++ b/demo/01-trov-vocab/run.sh @@ -8,10 +8,10 @@ GEIST_TEMPLATES=templates.geist bash_cell 'load trov vocabulary without inferences' << END_CELL # Destroy the dataset -geist destroy --dataset kb --quiet +geist destroy rdflib --dataset kb --quiet # Import TRACE vocabulary and export as N-TRIPLES -geist create --dataset kb --inputformat json-ld --inputfile ${TRACE_VOCAB} --infer none +geist create rdflib --dataset kb --inputformat json-ld --inputfile ${TRACE_VOCAB} --infer none END_CELL @@ -25,7 +25,7 @@ bash_cell 'query subclass vocab' << END_CELL geist report --outputroot products << END_TEMPLATE {%- use "${GEIST_TEMPLATES}" %} -{%- query isfilepath=False as query_subclass_vocab_str %} +{%- query datastore="rdflib", isfilepath=False as query_subclass_vocab %} PREFIX rdf: PREFIX rdfs: @@ -42,7 +42,6 @@ geist report --outputroot products << END_TEMPLATE } ORDER BY ?ParentLabel ?ChildLabel {% endquery %} -{%- set query_subclass_vocab = query_subclass_vocab_str | json2df %} {%- html "report_subclass.html" %} {%- head "Subclass Report" %} @@ -76,7 +75,7 @@ geist report --outputroot products << END_TEMPLATE

    3. Table

    {%- table %} - {{ query_subclass_vocab_str }} + {{ query_subclass_vocab | df2json }} {% endtable %} {% endhtml %} diff --git a/demo/01-trov-vocab/run.txt b/demo/01-trov-vocab/run.txt index c26d727..d865963 100644 --- a/demo/01-trov-vocab/run.txt +++ b/demo/01-trov-vocab/run.txt @@ -1,10 +1,10 @@ ======================================= bash cell | load trov vocabulary without inferences ======================================== # Destroy the dataset -geist destroy --dataset kb --quiet +geist destroy rdflib --dataset kb --quiet # Import TRACE vocabulary and export as N-TRIPLES -geist create --dataset kb --inputformat json-ld --inputfile /mnt/trace-model/exports/trace-vocab.jsonld --infer none +geist create rdflib --dataset kb --inputformat json-ld --inputfile /mnt/trace-model/exports/trace-vocab.jsonld --infer none ----------------------------------------------------------- cell outputs ----------------------------------------------------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -17,7 +17,7 @@ geist create --dataset kb --inputformat json-ld --inputfile /mnt/trace-model/exp geist report --outputroot products << END_TEMPLATE {%- use "templates.geist" %} -{%- query isfilepath=False as query_subclass_vocab_str %} +{%- query datastore="rdflib", isfilepath=False as query_subclass_vocab %} PREFIX rdf: PREFIX rdfs: @@ -34,7 +34,6 @@ geist report --outputroot products << END_TEMPLATE } ORDER BY ?ParentLabel ?ChildLabel {% endquery %} -{%- set query_subclass_vocab = query_subclass_vocab_str | json2df %} {%- html "report_subclass.html" %} {%- head "Subclass Report" %} @@ -68,7 +67,7 @@ geist report --outputroot products << END_TEMPLATE

    3. Table

    {%- table %} - {{ query_subclass_vocab_str }} + {{ query_subclass_vocab | df2json }} {% endtable %} {% endhtml %} diff --git a/demo/02-tro-examples/01-two-artifacts-no-trp/run.txt b/demo/02-tro-examples/01-two-artifacts-no-trp/run.txt index 58075ab..a210e11 100644 --- a/demo/02-tro-examples/01-two-artifacts-no-trp/run.txt +++ b/demo/02-tro-examples/01-two-artifacts-no-trp/run.txt @@ -1,13 +1,13 @@ ================================================ bash cell | import trov vocabulary ================================================ # Destroy the dataset -geist destroy --dataset kb --quiet +geist destroy rdflib --dataset kb --quiet # Import TRACE vocabulary and TRO Manifest and export as N-TRIPLES -geist create --dataset kb --inputformat json-ld --inputfile /mnt/trace-model/exports/trace-vocab.jsonld --infer owl +geist create rdflib --dataset kb --inputformat json-ld --inputfile /mnt/trace-model/exports/trace-vocab.jsonld --infer owl # Import TRO and TRS as JSON-LD and export as N-TRIPLES -geist export --dataset kb --outputformat nt | sort | grep trov +geist export rdflib --dataset kb --outputformat nt | sort | grep trov ----------------------------------------------------------- cell outputs ----------------------------------------------------------- . @@ -181,10 +181,10 @@ geist export --dataset kb --outputformat nt | sort | grep trov ================================================ bash cell | import tro declaration ================================================ # Import TRACE vocabulary and TRO Manifest and export as N-TRIPLES -geist load --dataset kb --inputformat json-ld --inputfile tro/tro.jsonld +geist load rdflib --dataset kb --inputformat json-ld --inputfile tro/tro.jsonld # Import TRO and TRS as JSON-LD and export as N-TRIPLES -geist export --dataset kb --outputformat nt | sort | grep trov-example +geist export rdflib --dataset kb --outputformat nt | sort | grep trov-example ----------------------------------------------------------- cell outputs ----------------------------------------------------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -194,7 +194,7 @@ geist export --dataset kb --outputformat nt | sort | grep trov-example # What subclasses of TROAttribute have been defined? -geist query --dataset kb << __END_QUERY__ +geist query rdflib --dataset kb << __END_QUERY__ PREFIX rdfs: PREFIX trov: @@ -219,7 +219,7 @@ __END_QUERY__ # What subclasses of TRSAttribute have been defined? -geist query --dataset kb << __END_QUERY__ +geist query rdflib --dataset kb << __END_QUERY__ PREFIX rdfs: PREFIX trov: @@ -234,7 +234,7 @@ geist query --dataset kb << __END_QUERY__ __END_QUERY__ # Destroy the dataset -geist destroy --dataset kb +geist destroy rdflib --dataset kb ----------------------------------------------------------- cell outputs ----------------------------------------------------------- | | attribute | attributeLabel | attributeComment | diff --git a/demo/02-tro-examples/02-three-artifacts-one-trp/run.txt b/demo/02-tro-examples/02-three-artifacts-one-trp/run.txt index 58075ab..a210e11 100644 --- a/demo/02-tro-examples/02-three-artifacts-one-trp/run.txt +++ b/demo/02-tro-examples/02-three-artifacts-one-trp/run.txt @@ -1,13 +1,13 @@ ================================================ bash cell | import trov vocabulary ================================================ # Destroy the dataset -geist destroy --dataset kb --quiet +geist destroy rdflib --dataset kb --quiet # Import TRACE vocabulary and TRO Manifest and export as N-TRIPLES -geist create --dataset kb --inputformat json-ld --inputfile /mnt/trace-model/exports/trace-vocab.jsonld --infer owl +geist create rdflib --dataset kb --inputformat json-ld --inputfile /mnt/trace-model/exports/trace-vocab.jsonld --infer owl # Import TRO and TRS as JSON-LD and export as N-TRIPLES -geist export --dataset kb --outputformat nt | sort | grep trov +geist export rdflib --dataset kb --outputformat nt | sort | grep trov ----------------------------------------------------------- cell outputs ----------------------------------------------------------- . @@ -181,10 +181,10 @@ geist export --dataset kb --outputformat nt | sort | grep trov ================================================ bash cell | import tro declaration ================================================ # Import TRACE vocabulary and TRO Manifest and export as N-TRIPLES -geist load --dataset kb --inputformat json-ld --inputfile tro/tro.jsonld +geist load rdflib --dataset kb --inputformat json-ld --inputfile tro/tro.jsonld # Import TRO and TRS as JSON-LD and export as N-TRIPLES -geist export --dataset kb --outputformat nt | sort | grep trov-example +geist export rdflib --dataset kb --outputformat nt | sort | grep trov-example ----------------------------------------------------------- cell outputs ----------------------------------------------------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -194,7 +194,7 @@ geist export --dataset kb --outputformat nt | sort | grep trov-example # What subclasses of TROAttribute have been defined? -geist query --dataset kb << __END_QUERY__ +geist query rdflib --dataset kb << __END_QUERY__ PREFIX rdfs: PREFIX trov: @@ -219,7 +219,7 @@ __END_QUERY__ # What subclasses of TRSAttribute have been defined? -geist query --dataset kb << __END_QUERY__ +geist query rdflib --dataset kb << __END_QUERY__ PREFIX rdfs: PREFIX trov: @@ -234,7 +234,7 @@ geist query --dataset kb << __END_QUERY__ __END_QUERY__ # Destroy the dataset -geist destroy --dataset kb +geist destroy rdflib --dataset kb ----------------------------------------------------------- cell outputs ----------------------------------------------------------- | | attribute | attributeLabel | attributeComment | diff --git a/demo/02-tro-examples/03-skope-lbda-processing/mappings.json b/demo/02-tro-examples/03-skope-lbda-processing/mappings.json index ff9976e..44b2bed 100644 --- a/demo/02-tro-examples/03-skope-lbda-processing/mappings.json +++ b/demo/02-tro-examples/03-skope-lbda-processing/mappings.json @@ -1,6 +1,7 @@ { "http://www.w3.org/1999/02/22-rdf-syntax-ns#": "rdf:", "http://www.w3.org/2000/01/rdf-schema#": "rdfs:", + "https://schema.org": "schema:", "https://w3id.org/trace/2023/05/trov#": "trov:", "https://github.com/transparency-certified/trace-model/tree/master/02-tro-examples/03-skope-/": "" } \ No newline at end of file diff --git a/demo/02-tro-examples/03-skope-lbda-processing/products/logo.png b/demo/02-tro-examples/03-skope-lbda-processing/products/logo.png deleted file mode 100644 index 1e445751c073bae5b620f43aa37476a0f747ec01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41090 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 wJT+NG=v( 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
      w%5e0?ZVtQ zYQ#}#)D=^`J9mMEreNCC-1Td+7G4Aq^>O%evvE;K2i_ zRW&?SlL;saiA1Qdpz6)dNG4{zfk@wA-;UkhlQ#3z^1lE58epOTAnm#}6Ysu>mdpB& zHq&CU%AgBP&+(W3Z|J~b>~dovclsN5A)Yg5!u`Lj zzxf_M${5$J9)JBRS*8(EXE}hLW1PQyIu-FehlOwRC(Sqw3t8{f}<6%$nHo;%nk@g`l-Hp^RV& z;R%tNvrtjN_*o|6>Ml4SFEa_<;t27)|-VwIMK zKsjZSap5IJ%P!|x4o4!r)q8D!{V>$gEn~u`Pl6MOWxVNnW7V|Qjjxv7ce`cobb_dF zA!t2ca3S$2vGL|v&fD72`}RlPnp*7joU-*xx(TMdO(20tGJc%CYPNbxxoSc&q9vYV z&Hm=r(8(S)5azsY+GIkZNTlId!hj&9;u0pCl5%-r4h4vR>vljO%FbkI3DwsFC>pV` z;YM;H?HD1IN^CLFWu=PzT-~&Zx{?Bf=wPoc+}Yzf(lE4ZFK{@L0q*3C%Qc<=?dp}{ zyqv;C7b)_yfZ%8UJ^0RlU%0^dloB8aPT~g}dfxdYxTjXo(?Kx0?)MG1nuLv_Tp^n| zU8>i~3$xUdCQ36+6v2Swc!|_w?Ff8X%Q%O^{dT6e7YGr>6o5dj0V)-eNpO36QlqL= zQo#^QgdtF`mu6Yy7Ne|qoHExUvzR0%gCs)_A#~Lrx9!~@v$l~aPg#tMAYb2O zpB{qzBeACCX|d&|wUdAIbATzpVoVW`NWbR^<~dhqZ^YpyD86npO)T#GxJF$*PU!80 zKm-g0c}k-mBO&Bmh+6aZ*_{WEkr-#+vMt*vrvJF2ZcEd@z3h7T zJ#@;>G}ZJCFhFSH)CmvWX_{ODMf3$kpl{%UNKGXp44Ab@g--bTl5otYfrh5AD z3rCL-Jb(p{Kj?0yT_E>i}iZL)zG?PeBhKcidjLQ}SCgRxkrDoPNzx5=D#^|7TWG+p7 zKLF5XldP=7a@EqD1s5TN2n64=BjNXp3zAO>Bo2uMC0%?D3=cY8^-V+7d)>8rq0gU~ z8-o(HHZ*|bWv6U26A+7mRH~jcQ(aza|Gb)QZ%aBw3z6R_E8BG0#pcT{Qk54;H0o3) z2|4Tj#Pb0cFrP+)2z5osW0qk;efFM@w>due7og-o%T(W_Sk(R;sjR z<7E@dHIquU(R-hL?S@ZFvF;sIzdxXlrg_bm1PE0BI6NanAC)$^Q-mkd%-^mpGJKFlU31?-wBDh zyis?6>FZ-$ZpI(vT%JT@0_zWP;poWw03gw-1i?EI>2xBsn$l^+2A$Mmks8!8y*goC znUI-~;ef}H*pMID*nxV~I4M(ilsm`IN?3BF(2X w#u8~hr7@OB^C^w7M4C@&j3xeG00030|E^asUx-%~$N&HU07*qoM6N<$f+2x3-2eap diff --git a/demo/02-tro-examples/03-skope-lbda-processing/products/report.html b/demo/02-tro-examples/03-skope-lbda-processing/products/report.html index 316840c..cf0409c 100644 --- a/demo/02-tro-examples/03-skope-lbda-processing/products/report.html +++ b/demo/02-tro-examples/03-skope-lbda-processing/products/report.html @@ -8,242 +8,228 @@ TRO Report -

      TRO Report

      - +

      TRO Report

      - -

      This Transparent Research Object:

      - DOI: https://doi.org/...

      - Transparent Research Object Instance +

      This Transparent Research Object:

      LBDA Exploration Example

      TRO ID: tro
        -
      • Author: TRO_AUTHOR_NAME
      • -
      • Created datetime: 2024-01-11 10:00:00
      • +
      • Created by: LBDA Explorer
      • +
      • Created datetime: 2023-05-09T10:00:00Z
      • TRO Description: Download LBDA dataset from NOAA website and prepare for use by researchers employing the SKOPE application
      • Digital artifacts: 6
      • Artifact artifact arrangements: 4
      • Trusted Research Performances (TRPs): 3
      - - -
      - Trusted Research System Instance (this is the instance name) -

      TRS ID: trs -
        -
      • Name: TRS_NAME
      • -
      • Owner: TRS_OWNER_NAME
      • -
      • TRS Description: TRS that can monitor netowrk accesses or provide Internet isolation
      • -
      • Capabilities: 2 (see below)
      • -
      - +
      TRACE Reference Implementation +

      TRS ID: trs +
        +
      • Publisher: TRACE Project
      • +
      • TRS Description: TRS that can monitor netowrk accesses or provide Internet isolation
      • +
      • Capabilities: 2 (see below)
      • +
      + - + - - + +
      idnamedescription
      idnamedescription
      trs/capability/1Capability of Recording Internet AccessTRS can record internet access
      trs/capability/2Capability of Providing Internet IsolationTRS can provide Internet isolation
      trs/capability/1Capability of Recording Internet AccessTRS can record internet access
      trs/capability/2Capability of Providing Internet IsolationTRS can provide Internet isolation
      -
      - +
      +
      - - -

      Descriptions of these TRPs:


      - - - - - - -
      trpsdescription
      trp/1Download a dataset from NOAA web server
      trp/2Run Jupyter notebook with the downloaded dataset
      trp/3Zip all related files
      -
      +

      Descriptions of these TRPs:


      + + + + + +
      trpdescriptionstartend
      <trp/1>Process that downloaded the LBDA NetCDF file from NOAA server to local filesystem2023-05-08T01:30:00Z2023-05-08T01:40:00Z
      <trp/2>Process that ran Jupyter notebook2023-05-08T01:41:00Z2023-05-08T01:50:00Z
      <trp/3>Process that packaged products of the Jupyter notebook execution in a Zip file2023-05-08T01:51:00Z2023-05-08T02:00:00Z
      + +
      - - - - - - - - - -
      nameidmimeTypedescription
      LBDA NetCDF filecomposition/1/artifact/1application/x-netcdfNetCDF file containing the Living Blended Drought Atlas (LBDA) dataset
      Initial Notebookcomposition/1/artifact/2text/plainInitial state of Jupyter notebook for processing the LBDA dataset
      Final Notebookcomposition/1/artifact/3text/plainFinal state of Jupyter notebook for processing the LBDA dataset
      Final Notebook HTML Renderingcomposition/1/artifact/4text/htmlHTML rendering of final state of the Jupyter notebook
      Graphical Histogram Renderingcomposition/1/artifact/5image/pngGraphical rendering of the histogram of dataset values
      LBDA GeoTIFF filecomposition/1/artifact/6image/tiffGeoTIFF file containing LBDA data cube ready for staging to SKOPE server
      -
      - - -
      + + - Web Resource Artifact Arrangement Instance + + + + + + +
      nameidmimeTypedescription
      LBDA NetCDF filecomposition/1/artifact/1application/x-netcdfNetCDF file containing the Living Blended Drought Atlas (LBDA) dataset
      Initial Notebookcomposition/1/artifact/2text/plainInitial state of Jupyter notebook for processing the LBDA dataset
      Final Notebookcomposition/1/artifact/3text/plainFinal state of Jupyter notebook for processing the LBDA dataset
      Final Notebook HTML Renderingcomposition/1/artifact/4text/htmlHTML rendering of final state of the Jupyter notebook
      Graphical Histogram Renderingcomposition/1/artifact/5image/pngGraphical rendering of the histogram of dataset values
      LBDA GeoTIFF filecomposition/1/artifact/6image/tiffGeoTIFF file containing LBDA data cube ready for staging to SKOPE server
      +
      + + +
      Web Resource Artifact Arrangement

      Arrangement ID: arrangement/1
      • Arrangement Description: Arrangement describing location of LBDA NetCDF file on NOAA web server
      • Digital artifacts: - + - +
        nameidlocation
        nameidlocation
        LBDA NetCDF filecomposition/1/artifact/1https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc
        LBDA NetCDF filecomposition/1/artifact/1https://www1.ncdc.noaa.gov/pub/data/paleo/drought/LBDP-v2/lbda-v2_kddm_pmdi_2017.nc
      - Local File System Artifact Arrangement Instance -

      Arrangement ID: arrangement/2 + Local File System Artifact Arrangement +

      Arrangement ID: arrangement/2
      • Arrangement Description: Arrangement on fileserver managed by TRS after downloading dataset and before running Jupyter notebook
      • Digital artifacts: - + - - + +
        nameidlocation
        nameidlocation
        LBDA NetCDF filecomposition/1/artifact/1data/lbda-v2_kddm_pmdi_2017.nc
        Initial Notebookcomposition/1/artifact/2analysis.ipynb
        LBDA NetCDF filecomposition/1/artifact/1data/lbda-v2_kddm_pmdi_2017.nc
        Initial Notebookcomposition/1/artifact/2analysis.ipynb
      - Local File System Artifact Arrangement Instance -

      Arrangement ID: arrangement/3 + Local File System Artifact Arrangement +

      Arrangement ID: arrangement/3
      • Arrangement Description: Arrangement on fileserver managed by TRS after running Jupyter notebook
      • Digital artifacts: - + - - - - - + + + + +
        nameidlocation
        nameidlocation
        LBDA NetCDF filecomposition/1/artifact/1data/lbda-v2_kddm_pmdi_2017.nc
        Final Notebookcomposition/1/artifact/3analysis.ipynb
        Final Notebook HTML Renderingcomposition/1/artifact/4output/analysis.html
        Graphical Histogram Renderingcomposition/1/artifact/5output/histogram.png
        LBDA GeoTIFF filecomposition/1/artifact/6output/lbda-v2_kddm_pmdi_2017.tiff
        LBDA NetCDF filecomposition/1/artifact/1data/lbda-v2_kddm_pmdi_2017.nc
        Final Notebookcomposition/1/artifact/3analysis.ipynb
        Final Notebook HTML Renderingcomposition/1/artifact/4output/analysis.html
        Graphical Histogram Renderingcomposition/1/artifact/5output/histogram.png
        LBDA GeoTIFF filecomposition/1/artifact/6output/lbda-v2_kddm_pmdi_2017.tiff
      - Zip Artifact Arrangement Instance -

      Arrangement ID: arrangement/4 + Zip Artifact Arrangement +

      Arrangement ID: arrangement/4
      • Arrangement Description: Arrangement of final products packaged in a Zip file
      • Digital artifacts: - + - - - - + + + +
        nameidlocation
        nameidlocation
        Final Notebookcomposition/1/artifact/3analysis.ipynb
        Final Notebook HTML Renderingcomposition/1/artifact/4analysis.html
        Graphical Histogram Renderingcomposition/1/artifact/5histogram.png
        LBDA GeoTIFF filecomposition/1/artifact/6lbda-v2_kddm_pmdi_2017.tiff
        Final Notebookcomposition/1/artifact/3analysis.ipynb
        Final Notebook HTML Renderingcomposition/1/artifact/4analysis.html
        Graphical Histogram Renderingcomposition/1/artifact/5histogram.png
        LBDA GeoTIFF filecomposition/1/artifact/6lbda-v2_kddm_pmdi_2017.tiff
      -
      + - - + diff --git a/demo/02-tro-examples/03-skope-lbda-processing/run.sh b/demo/02-tro-examples/03-skope-lbda-processing/run.sh index 1b50ffe..81b6b6a 100644 --- a/demo/02-tro-examples/03-skope-lbda-processing/run.sh +++ b/demo/02-tro-examples/03-skope-lbda-processing/run.sh @@ -9,20 +9,22 @@ bash_cell tro_report << END_CELL geist report --outputroot products << END_TEMPLATE {%- use "templates.geist" %} -{%- create %} tro/tro.jsonld {% endcreate %} +{%- create datastore="rdflib" %} tro/tro.jsonld {% endcreate %} {%- html "report.html" %} {%- head "TRO Report" %} -

      TRO Report

      +

      TRO Report

      +

      This Transparent Research Object:

      - {%- map isfilepath=False, mappings="mappings.json" as query_tro_shorten %} {% query_tro_str %} {% endmap %} - {%- set query_tro = query_tro_shorten | json2df %} + {%- map isfilepath=False, mappings="mappings.json" as query_tro %} {% query_tro_str %} {% endmap %} {% for _, row in query_tro.iterrows() %} {{ row["tro_name"] }} +

      TRO ID: {{ row["tro_id"] }}
        -
      • TRO ID: {{ row["tro_id"] }}
      • +
      • Created by: {{ row["tro_creator"] }}
      • +
      • Created datetime: {{ row["tro_date"] }}
      • TRO Description: {{ row["tro_descr"] }}
      • Digital artifacts: {{ row["num_of_artifacts"] }}
      • Artifact artifact arrangements: {{ row["num_of_arrs"] }}
      • @@ -30,37 +32,46 @@ geist report --outputroot products << END_TEMPLATE
      {% endfor %} -

      Trusted Research System:

      - {%- map isfilepath=False, mappings="mappings.json" as query_trs_shorten %} {% query_trs_str %} {% endmap %} - {%- set query_trs = query_trs_shorten | json2df %} - {% for _, row in query_trs.iterrows() %} - {{ row["trs_name"] }} -
        -
      • TRS ID: {{ row["trs_id"] }}
      • -
      • TRS Description: {{ row["trs_descr"] }}
      • -
      • Capabilities: {{ row["num_of_capabilities"] }} (see below)
      • -
      - {% endfor %} - {%- table mappings="mappings.json" %}{% query_trs_capability_str %}{% endtable %} - -

      Trusted Research Performances (TRPs) and Arrangements:

      - {% img src="trp.svg" %} - {%- gv_graph "trp", "LR" %} - nodesep=0.6 - node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] - {%- map isfilepath=False, mappings="mappings.json" as query_trp_shorten %} {% query_trp_str %} {% endmap %} - {%- set query_trp = query_trp_shorten | json2df %} - {% for _, row in query_trp.iterrows() %} - {% gv_labeled_edge row["in"], row["out"], row["trp"] %} + +
      + {%- map isfilepath=False, mappings="mappings.json" as query_trs %} {% query_trs_str %} {% endmap %} + {% for _, row in query_trs.iterrows() %} + {{ row["trs_name"] }} +

      TRS ID: {{ row["trs_id"] }} +
        +
      • Publisher: {{ row["trs_publisher"] }}
      • +
      • TRS Description: {{ row["trs_descr"] }}
      • +
      • Capabilities: {{ row["num_of_capabilities"] }} (see below)
      • +
      {% endfor %} - {% gv_end %} - {% endimg %} - -

      Artifacts:

      - {%- table mappings="mappings.json" %}{% query_artifact_str %}{% endtable %} - -

      Artifacts by Arrangement:

      - {%- query isfilepath=False as query_arrangement_str %} + {%- table mappings="mappings.json" %}{% query_trs_capability_str %}{% endtable %} +
      + + +
      + {% img src="trp.svg" %} + {%- gv_graph "trp", "LR" %} + nodesep=0.6 + node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] + {%- map isfilepath=False, mappings="mappings.json" as query_trp %} {% query_trp_str %} {% endmap %} + {% for _, row in query_trp.iterrows() %} + {% gv_labeled_edge row["in"], row["out"], row["trp"] %} + {% endfor %} + {% gv_end %} + {% endimg %} +

      Descriptions of these TRPs:


      + {%- table mappings="mappings.json" %}{% query_trp_details_str %}{% endtable %} +
      + + +
      + {%- table mappings="mappings.json" %}{% query_artifact_str %}{% endtable %} +
      + + +
      + + {%- query datastore="rdflib", isfilepath=False as _query_arrangement %} SELECT DISTINCT ?arrangement (STR(?arrangement) AS ?id) ?name ?descr WHERE { ?tro rdf:type trov:TransparentResearchObject . @@ -71,18 +82,19 @@ geist report --outputroot products << END_TEMPLATE ORDER BY ?arrangement {% endquery %} - {%- map isfilepath=False, mappings="mappings.json", on="id" as query_arrangement_shorten %} {{ query_arrangement_str }} {% endmap %} - {%- set query_arrangement = query_arrangement_shorten | json2df %} + {%- map isfilepath=False, mappings="mappings.json", on="id" as query_arrangement %} {{ _query_arrangement | df2json }} {% endmap %} {% for idx, row in query_arrangement.iterrows() %} {{ row["name"] }} +

      Arrangement ID: {{ row["id"] }}
        -
      • Arrangement ID: {{ row["id"] }}
      • Arrangement Description: {{ row["descr"] }}
      • Digital artifacts: {%- table mappings="mappings.json" %}{% query_artifacts_by_arrangement_str row["arrangement"] %}{% endtable %}
      {% endfor %} +{% style %} +{% script %} {% endhtml %} {%- destroy %} diff --git a/demo/02-tro-examples/03-skope-lbda-processing/run.txt b/demo/02-tro-examples/03-skope-lbda-processing/run.txt index 05bc822..bce1ea9 100644 --- a/demo/02-tro-examples/03-skope-lbda-processing/run.txt +++ b/demo/02-tro-examples/03-skope-lbda-processing/run.txt @@ -1,13 +1,13 @@ ================================================ bash cell | import trov vocabulary ================================================ # Destroy the dataset -geist destroy --dataset kb --quiet +geist destroy rdflib --dataset kb --quiet # Import TRACE vocabulary and TRO Manifest and export as N-TRIPLES -geist create --dataset kb --inputformat json-ld --inputfile /mnt/trace-model/exports/trace-vocab.jsonld --infer owl +geist create rdflib --dataset kb --inputformat json-ld --inputfile /mnt/trace-model/exports/trace-vocab.jsonld --infer owl # Import TRO and TRS as JSON-LD and export as N-TRIPLES -geist export --dataset kb --outputformat nt | sort | grep trov +geist export rdflib --dataset kb --outputformat nt | sort | grep trov ----------------------------------------------------------- cell outputs ----------------------------------------------------------- . @@ -181,10 +181,10 @@ geist export --dataset kb --outputformat nt | sort | grep trov ================================================ bash cell | import tro declaration ================================================ # Import TRACE vocabulary and TRO Manifest and export as N-TRIPLES -geist load --dataset kb --inputformat json-ld --inputfile tro/tro.jsonld +geist load rdflib --dataset kb --inputformat json-ld --inputfile tro/tro.jsonld # Import TRO and TRS as JSON-LD and export as N-TRIPLES -geist export --dataset kb --outputformat nt | sort | grep trov-example +geist export rdflib --dataset kb --outputformat nt | sort | grep trov-example ----------------------------------------------------------- cell outputs ----------------------------------------------------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -194,7 +194,7 @@ geist export --dataset kb --outputformat nt | sort | grep trov-example # What subclasses of TROAttribute have been defined? -geist query --dataset kb << __END_QUERY__ +geist query rdflib --dataset kb << __END_QUERY__ PREFIX rdfs: PREFIX trov: @@ -219,7 +219,7 @@ __END_QUERY__ # What subclasses of TRSAttribute have been defined? -geist query --dataset kb << __END_QUERY__ +geist query rdflib --dataset kb << __END_QUERY__ PREFIX rdfs: PREFIX trov: @@ -234,7 +234,7 @@ geist query --dataset kb << __END_QUERY__ __END_QUERY__ # Destroy the dataset -geist destroy --dataset kb +geist destroy rdflib --dataset kb ----------------------------------------------------------- cell outputs ----------------------------------------------------------- | | attribute | attributeLabel | attributeComment | @@ -251,20 +251,22 @@ geist destroy --dataset kb geist report --outputroot products << END_TEMPLATE {%- use "templates.geist" %} -{%- create %} tro/tro.jsonld {% endcreate %} +{%- create datastore="rdflib" %} tro/tro.jsonld {% endcreate %} {%- html "report.html" %} {%- head "TRO Report" %} -

      TRO Report

      +

      TRO Report

      +

      This Transparent Research Object:

      - {%- map isfilepath=False, mappings="mappings.json" as query_tro_shorten %} {% query_tro_str %} {% endmap %} - {%- set query_tro = query_tro_shorten | json2df %} + {%- map isfilepath=False, mappings="mappings.json" as query_tro %} {% query_tro_str %} {% endmap %} {% for _, row in query_tro.iterrows() %} {{ row["tro_name"] }} +

      TRO ID: {{ row["tro_id"] }}
        -
      • TRO ID: {{ row["tro_id"] }}
      • +
      • Created by: {{ row["tro_creator"] }}
      • +
      • Created datetime: {{ row["tro_date"] }}
      • TRO Description: {{ row["tro_descr"] }}
      • Digital artifacts: {{ row["num_of_artifacts"] }}
      • Artifact artifact arrangements: {{ row["num_of_arrs"] }}
      • @@ -272,37 +274,46 @@ geist report --outputroot products << END_TEMPLATE
      {% endfor %} -

      Trusted Research System:

      - {%- map isfilepath=False, mappings="mappings.json" as query_trs_shorten %} {% query_trs_str %} {% endmap %} - {%- set query_trs = query_trs_shorten | json2df %} - {% for _, row in query_trs.iterrows() %} - {{ row["trs_name"] }} -
        -
      • TRS ID: {{ row["trs_id"] }}
      • -
      • TRS Description: {{ row["trs_descr"] }}
      • -
      • Capabilities: {{ row["num_of_capabilities"] }} (see below)
      • -
      - {% endfor %} - {%- table mappings="mappings.json" %}{% query_trs_capability_str %}{% endtable %} - -

      Trusted Research Performances (TRPs) and Arrangements:

      - {% img src="trp.svg" %} - {%- gv_graph "trp", "LR" %} - nodesep=0.6 - node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] - {%- map isfilepath=False, mappings="mappings.json" as query_trp_shorten %} {% query_trp_str %} {% endmap %} - {%- set query_trp = query_trp_shorten | json2df %} - {% for _, row in query_trp.iterrows() %} - {% gv_labeled_edge row["in"], row["out"], row["trp"] %} + +
      + {%- map isfilepath=False, mappings="mappings.json" as query_trs %} {% query_trs_str %} {% endmap %} + {% for _, row in query_trs.iterrows() %} + {{ row["trs_name"] }} +

      TRS ID: {{ row["trs_id"] }} +
        +
      • Publisher: {{ row["trs_publisher"] }}
      • +
      • TRS Description: {{ row["trs_descr"] }}
      • +
      • Capabilities: {{ row["num_of_capabilities"] }} (see below)
      • +
      {% endfor %} - {% gv_end %} - {% endimg %} - -

      Artifacts:

      - {%- table mappings="mappings.json" %}{% query_artifact_str %}{% endtable %} - -

      Artifacts by Arrangement:

      - {%- query isfilepath=False as query_arrangement_str %} + {%- table mappings="mappings.json" %}{% query_trs_capability_str %}{% endtable %} +
      + + +
      + {% img src="trp.svg" %} + {%- gv_graph "trp", "LR" %} + nodesep=0.6 + node[shape=box style="filled, rounded" fillcolor="#b3e2cd" peripheries=1 fontname=Courier] + {%- map isfilepath=False, mappings="mappings.json" as query_trp %} {% query_trp_str %} {% endmap %} + {% for _, row in query_trp.iterrows() %} + {% gv_labeled_edge row["in"], row["out"], row["trp"] %} + {% endfor %} + {% gv_end %} + {% endimg %} +

      Descriptions of these TRPs:


      + {%- table mappings="mappings.json" %}{% query_trp_details_str %}{% endtable %} +
      + + +
      + {%- table mappings="mappings.json" %}{% query_artifact_str %}{% endtable %} +
      + + +
      + + {%- query datastore="rdflib", isfilepath=False as _query_arrangement %} SELECT DISTINCT ?arrangement (STR(?arrangement) AS ?id) ?name ?descr WHERE { ?tro rdf:type trov:TransparentResearchObject . @@ -313,18 +324,19 @@ geist report --outputroot products << END_TEMPLATE ORDER BY ?arrangement {% endquery %} - {%- map isfilepath=False, mappings="mappings.json", on="id" as query_arrangement_shorten %} {{ query_arrangement_str }} {% endmap %} - {%- set query_arrangement = query_arrangement_shorten | json2df %} + {%- map isfilepath=False, mappings="mappings.json", on="id" as query_arrangement %} {{ _query_arrangement | df2json }} {% endmap %} {% for idx, row in query_arrangement.iterrows() %} {{ row["name"] }} +

      Arrangement ID: {{ row["id"] }}
        -
      • Arrangement ID: {{ row["id"] }}
      • Arrangement Description: {{ row["descr"] }}
      • Digital artifacts: {%- table mappings="mappings.json" %}{% query_artifacts_by_arrangement_str row["arrangement"] %}{% endtable %}
      {% endfor %} +{% style %} +{% script %} {% endhtml %} {%- destroy %} @@ -339,43 +351,53 @@ END_TEMPLATE - TRO Report -

      TRO Report

      -

      This Transparent Research Object:

      Transparent Research Object Instance +

      TRO Report

      + +

      This Transparent Research Object:

      LBDA Exploration Example +

      TRO ID: tro
        -
      • TRO ID: tro
      • +
      • Created by: LBDA Explorer
      • +
      • Created datetime: 2023-05-09T10:00:00Z
      • TRO Description: Download LBDA dataset from NOAA website and prepare for use by researchers employing the SKOPE application
      • Digital artifacts: 6
      • Artifact artifact arrangements: 4
      • Trusted Research Performances (TRPs): 3
      -

      Trusted Research System:

      Trusted Research System Instance -
        -
      • TRS ID: trs
      • -
      • TRS Description: TRS that can monitor netowrk accesses or provide Internet isolation
      • -
      • Capabilities: 2 (see below)
      • -
      - + +
      TRACE Reference Implementation +

      TRS ID: trs +
        +
      • Publisher: TRACE Project
      • +
      • TRS Description: TRS that can monitor netowrk accesses or provide Internet isolation
      • +
      • Capabilities: 2 (see below)
      • +
      +
      idnamedescription
      trs/capability/1Capability of Recording Internet AccessTRS can record internet access
      trs/capability/2Capability of Providing Internet IsolationTRS can provide Internet isolation
      - -

      Trusted Research Performances (TRPs) and Arrangements:

      - -

      Artifacts:

      +
      + + +
      +

      Descriptions of these TRPs:


      + + + + + + +
      trpdescriptionstartend
      <trp/1>Process that downloaded the LBDA NetCDF file from NOAA server to local filesystem2023-05-08T01:30:00Z2023-05-08T01:40:00Z
      <trp/2>Process that ran Jupyter notebook2023-05-08T01:41:00Z2023-05-08T01:50:00Z
      <trp/3>Process that packaged products of the Jupyter notebook execution in a Zip file2023-05-08T01:51:00Z2023-05-08T02:00:00Z
      +
      + + +
      @@ -386,10 +408,12 @@ END_TEMPLATE
      nameidmimeTypedescription
      Graphical Histogram Renderingcomposition/1/artifact/5image/pngGraphical rendering of the histogram of dataset values
      LBDA GeoTIFF filecomposition/1/artifact/6image/tiffGeoTIFF file containing LBDA data cube ready for staging to SKOPE server
      - -

      Artifacts by Arrangement:

      Web Resource Artifact Arrangement Instance +
      + + +
      Web Resource Artifact Arrangement +

      Arrangement ID: arrangement/1
        -
      • Arrangement ID: arrangement/1
      • Arrangement Description: Arrangement describing location of LBDA NetCDF file on NOAA web server
      • Digital artifacts: @@ -399,9 +423,9 @@ END_TEMPLATE
      - Local File System Artifact Arrangement Instance + Local File System Artifact Arrangement +

      Arrangement ID: arrangement/2
        -
      • Arrangement ID: arrangement/2
      • Arrangement Description: Arrangement on fileserver managed by TRS after downloading dataset and before running Jupyter notebook
      • Digital artifacts: @@ -412,9 +436,9 @@ END_TEMPLATE
      - Local File System Artifact Arrangement Instance + Local File System Artifact Arrangement +

      Arrangement ID: arrangement/3
        -
      • Arrangement ID: arrangement/3
      • Arrangement Description: Arrangement on fileserver managed by TRS after running Jupyter notebook
      • Digital artifacts: @@ -428,9 +452,9 @@ END_TEMPLATE
      - Zip Artifact Arrangement Instance + Zip Artifact Arrangement +

      Arrangement ID: arrangement/4

QT++WuJ3fJ|rYlt2ytf^@~r31#k`SG?32ZP0rXLJW%{UpQ9!^wZ+#*H&O zKjW2bI{ldiW={nrC9GK`FJ=n}_#jt7Dg2%iNt6kE)*_K}eYQUph)7K>)7xy*ey?g5 ztYMs86A3=7))M15>GaNC} z35m{|vq`&tCU2H%E-EYYMDX3b7DAt6kTZQj?>;0H(a9cLc-HsXx`_0h$A z`o6@;`!0O{z44A?iHR%Ag@$&n7uf=;%LF5NllLu=j%C@;J2fl2diLR~&MRYAV>}qU z^Q!zs?8)y}JGV)!UY$I6#tQa}+YdfBN|8;}U^*+6Z$e-@h6!Q6{cJD)-jc+ zc(%1Am&)2o>Bg5m@LqSv$$FZukw@7{)_+fWw#}~W$@EiDeza1!-I8;CPqJ3n$;V#q zi6tcm5jb|Wzq$5o>rMe}Bse!qTUuJutFB(Bs(GyK#gJm=}ENgAuvSIh!96!NJV zQ*}}DdbAyxvptLlS>>6Bsz`HCoMENpS5#cOd2=>!tvB^EjH>OMo9mQf4!#dmK=-1$ zBqH%yVt%I;a2501El@bgqx52E?r1<*$Kw@RgL;oE&>MeMMdsvVjhG(>H!WWu21h+b ze_=wogj(>y=p5)`$j}qbF(Cjpc*K~dnfhq~bHNAv0AR@G*>jtgtLr|GNntg-p)@(> z;57ULg4?f=-7(>D-#-Z&-?VR@ZJR=u#RRslRWG!fF z=&rl-r4AG$k8G>$Vf%*L^Q)@7(ZT=qB#~}1rOnHZ85|k4y_JY}o85$Y3b>CUaX)x) z>E0HTkxyH6h1e${zaZ1Q;Cq65W;K2LRvM#VasP_pl08v^R{tt1A2@L1qVpAT$v{g{ zmNJ#R_~~DFZq48BXJXmY z-oryL4aMK-@$BPmoXHn}_g7x-g-vsN_fqUoiuE9?X>Yu<+Yp8szE&KpL@-C-&gG*MdxMU&Aryj05wW89@iREnis>DL`c(e67Q&t`}y%py^E7sdxFKx!b zrq;yjk3DD3y4AItPfJRDTK-bh{LuE)Q)k(#;w&>#)5>11$|{z9KZ{E^@!Zj;!K+!O z_qEL5+@N&o!QMl8$C~_kJDVPbW%u5jbZ7_f)uU4`F&?^tfP z53dKaxypIrjf+M1gFjhKcH8&5GgekNzP)R`ki1QY?EyS4GgW2^3#j(=mZe*l?P5Dr z*w#8dBfP^*Z3mC;;1>99U4nkWTsY5iN#L%+{kI>c`1xwb?LfnE`n%?vT1W#>zats7 z+SHDYwE}>g6n)O+u8T4qBAD%(`*(bIOrCxh?XS)EW|bxRt51EWoGS@f?o8P2?mLTo zTJ;?aA7Pd@KY#0~3}FFgcv`PJE}tD##Hg;SYUNgYtP`HhI%rlnh<@Mw%uFqNU+v39 zhNcU5Gx2X_*3i_%u-&OyT@I;3eT)dT^0vhb2e-G>SPuQu{BGF6#-erPR;B+lHcKrF zQ&ZPvmyn&{pHt8#^ve|5;I<^5)+eR-dCEkc)(I@RsQg<)!zYu63EkC zs=cgsKP@5x*azi2nfA}yFL(dS-+yYdW46Jxy0X%Wo`h}2n%BFn)vA10bS_A0H}BFh z^VQnL6Td&x8>R1JqK49cpNp1NlF*~LyZswGY3 z;rw+8e)&D~t?R)|GBG*3sZvGbR-XJ-`9-}xn;p%Dt4h~p~tO6E#uvO zHE*!>&t%69W$edMf2xs}TQSq$c~)ScW4Y-x{o9pH(Z#b5H#a?=EFzjL=vHPPuO-sv zQo}sADdUXJHHn$wn>|dQXP=HVmCcBi^)^h>=5+7Q$*z_-^FAr^IwMV7HZ4t7wQTaI z)@RaFrcSSXBbHSxcExi3@^cN}ji(fDxCFko2Ck$ZqR3z8kI6uZJ@)8x-@j^O$~WLw|vPY`wN^uhY#S zOPRShxMEwUZ;xQsX|@d*l8Z;^Dl$%zuDG1I+Nv9=i!1vz#DX__-{^R{hb(x%{YbwXgUw@1jjBH@r)G`joSB-)B!x!@4Jj zMY)9k+0{~bqWRUd=CWFQt$|w6$r4LshAcV;ww4X|r^l)6PSU9Uran#a%f(*1(86y{ zy!L(-y|D&gIJ4qcJ#Mkm+N#;gJX0mqXX3>zcv{?k8NAo z+vcscBl3Ez{}rilrkUXlJk9G54G3hqId~2*XNv$R9{pHmBXUEiK$Mw`!S-~J?5(VK z4aFuW&xQ%v3!sjj=r2%tea3p%_|Gt3d!J+@gaHhrpR`Be;Vfv(!$V-l!Gk4!9H4}O zLPSUr&{SOrRQekhjx@DigBdS{%ldDHnHi^0|v+*_b9{&W1lz^)qm#O??2nudL%1OtClXrc5~c4tS2kv@l9 zSh&Q4S}5I}uK@62@7T|Z^RK=5=j-jBXvBb6vqM9J54{2xv@d024oao}Bh?o%9L=Q+fcZD{TNIp#hWL- zebK{X{eSK~?JWlJVZ0q47bFpo|8%roW99YP?m|;qVXko)4!Ok5Lu(ipay5|6PBYFGY`egixw{LRa zJMr|{83cs}1zkaJ{huQVteVNDP8u=R)<>9Yz=(Qm@NvQM6DRc0DS#bxXoB*@nh9gs z$Ggp74if0GPae1mei)tx%1J$nTKEh;N>JvrByOl-!6FoUdT5=)eBkVcrgQCT$HG>3Y=#5Z$Y+P(BX=Mf!*?F0h>$xy?ytn|KkBFP{K$fVd&}gcZ>{M zNcR-&7rV1NZ#Aqa>C=>~_va-V-j4sj*PxIAe6flDOZ-#3q_DKKia!gedbabjOQ8vu z1t;!9DqB}faKi>_AHM_;dby}b-Qbq^7dT1In7;M57>gVYnOJN8`<%h8@n>EX_unT- zRFnTcL8-+65|Ciy@XN*<@c}~j^3S*Tto+X-aDplY{7iWa!3CEaV?***8y)WI>B&KJ ztLu%hFEvy^`Ahrr>b`IMy8<~+gQh^FS%7zE&YS^Xv%U42`w};KCoKB<4;yP=fl20# z#dTP8_Mate`F`%7-NP4(HX0mWuHL-qzQLqK7gTNJx_PTj$}~YG9)>}DlviJb7CneK*%-t!GHE}Xu!+PKWmr!8X_RHM40Riu@R=f z)s!#Uw-BfdwK@T=u|YzX3x-vo){L>`UcjmUcky^aBO?n!_O)x*s5cFm2=BL4F07#L z)84H)4!?69>O8jo7W&^HU|Id2C-~+6eS#oE;0cymRZ=wMW?^@xe63*%k@Y})M2Yvs z4z^$AEp{{`+|g`cp&WPT>-iQ{zg^}p#WI7Ukak-`oWsyckhoZ2G~fE%s$Kvat zbdmw#VQS35%a~au-I>Kqq&UTWt);nRE7~&bKR5M?&NVf)$M!=POlvac;ig;!*-PyP z0sYJKZo_u!J7p+1zujA@WLE>vw?xpEqCjG*r#2n`G|U}y6$s%Mv? za}*CL1a&tdB&QDQJ*`54(%QH%xKsm1M)Rjn)2CPaLh};hqEhGwBL%=&XN_$KLHe+$ zT!BG-7QbvzK@stpIIJBGBenp18_;sXbb(jd)3)RwwuwK^MzzoWutf(QBO3EP&i~hJW0W zsaXnwLg+GU&EZaut(KL25x2BQnP%wf(xS!qXyNVNSy;D?-@Is(-98c4Il%?+d~@eN zZ^{(|ML>WDRnZ9@?DN+>hpll749B=Qi{QaxAft~T=L^;OVV7Y1LDq*4ZOKIv*L^Tg z0Hq4S=&)^d@!c};rhG{?k4u+TH)b`|t#SCJoYDrex2sYF3=7|`+H?6VaV2`<9CENR zd;mRqw4kT7d+B~(J+aXk8Y+cZuoKZ#ZmF;^O)mrmTpp_gUL_Wl9mo|jwMF)H3A0ZE z<6h{}B5m8Y4d*MtDeXd_dULBZM$@M9JO8Ee!voCw&vy)hUSLC5EPo}Y%2`}`wZKqO zQ*%CAY!-$q{)rv__0i#_aT3?vt0tpy$nf0Xv)#}SsKtL$6Sy46#~c)1zkYxF?Kvz= z1boiiE6oHc!g)=M4rSa2*%_T(l=`UoDRBU!zP8O~SKm{!N(lxaQD;H+R3vzfb_kY@ zQSw+l^^J{g$PBP_Ndm(-1)1&nV2G_5S@SJ2kmTr!^I;r`aB0)mukOG#JaR!$upg|f zoy5R`;ZNS$Tc-cRZi=%bhz9V$1kGxmM$Bw1mA>FC4D+TWxbS%(q|+=1LS$Nc z&eb`w5jxLEt$!Z)<)qFIhOR_FSBuUFA33LJ#Lz%0gq+1}5*O6a#1RR;IHRVf2ECFT z>{c9bpC9ktv4f4+TzC-E<>cg0bJLtq=%@iq~z} zxbZSNrMx$kBKmQT^rn79k7pZ$km?+eqAvkBg4SymoLqA7u)2_{gr=mVfPKCK+HWPwrV$x5f39!{f=o4!nh#Kz3K^XvZIOYie#@t`SqBZ4p*r_zIGR z-gDLHbZ!I1EFPmNDy@*;R0p{LMZLu5vmLglywmwN2_`2ddg6fp4Dpa6Xrrg0Hu~`l z6pPQm+~C6^OA;hrPF5Fa6n34))nG^={apSxeXE<`Y+k~n#SER$!v_vnDWtTuJe{3m z^4uB~cMjUiYsJJ=tDsdYD=Jz{TJ57xj(aU*cfNh~s!(mI^W*49ehsSRZ(y?)tpOzU#7f%Pqj-UZ~?g!}zVTp$CKx-dn3QmoC_RM$y#B zhzDLruTH$b>BV@3`6)ezZB$kL`eD&>8I8(g3JNZ%P(7O#&$H&vdB)5$GEn+lk@0!2!@z!zHVl=S1L0{7FfR{^V7yG8 za7?o*v;WGqw>JhCYamk z6snVb=dFKG+W8haqd@Y*2M;bWUSWBjuf)ISpsF+P8~k_uM^AuN$G~ik+fZCmatZ0q z49E?4#X}=pI&@(j{E~PaF%#2TF`) zVgK-82SB1JSrWzG==j3SqUo^(y6sror(pID5WM+;$@9SNz6*RnaHe2HMV9&6v zZ5uIK7>*tbF1*o8$0Z{bLk#Og@-vMA$*4D)Q+@p@wp}@M8kakyrQInl!0IQm?mtJL z&cFfoLtTnQ0mxK*QL_}yn zp5PiCZ4#H%r+D|uo8gW}1%?bpUyZFr$~SY!uo;3|`^KJa-hWa}#tq0k!KFdRnFcu` zewA8DMI}@Oq4SHTj#`u}XbUMV%#$XWM<(MSK5KwqCq@s6K3 zW~=gtn6uzT?TKCcyLqp}BnHh#BkB%JQ*EniL7dKQE7XsUjYV&HJFI%BsRz7wAbbhZ zWCrFpmd}svQ<* z4(TAEOAodtaHV7xmliLfC7#)?F zY+`I|-fuIOi1t%6wRA~C`vgMqjnI47XJuPid|SylZ|J_I~5H_%2PzfVB}rNyFY z7`Oymfkec5xD~r&>%O}M(d>ET|1jEqTbbt0#gOH8-Qtito~V$bbRiyl&BdR4e%G;W zb<~dQI6VR*NYBtRv-F~?3%R)&Zt_g%V9*#VAXq(CTJ2B21-4x17i)X)< zYTN%hL8}g%y>uw9=V;$HjJtpM349X}`YqFkL78Ki3g_+&!X`$qS?YHiy4g?7>u+e< z3E-4RxFqTdbtgdsSKRlCgr?6icW&d*?Ku!@j10t$ygd6+#sjhTK02A8QBlUu=ez{vBspLNr0u1MoqI(O%j!ommIraN(K$V@ z34#xz>8~GJHq~y=hkN3FoItJ_Jly>-GB)-#_=jGokhzgTxAzQ#xdt6Qe{vxD{5T75 zZ#o?+{fKTgAIk&ql6hYjv{*#)LZi89&}lmT+-sx_&PYMo;o>R?ZkcUWhsMXAB%-V_ z9N}|TsF#l02c0cMEsFoaSwJ<}a0+dFUJVfe(xWxq7e+P?O2TGgJ4|yJG_!{2W+)Ye z*yU3+;%*fiZ$lD_vVi_F_$xa0)02~udd>wvgB^;HN76$1kfxu*wdcPHz(p*n(t00n z7oNUA7N~KII+*Mzf)hugQ?ze9DtCVRi3fUggn10nO5^-bHZBOv#Sa{1xR3z35!$dJ zNvC53bGqD+TWMeH+D6uI=)lOKv7N`RZ&2-a z{&}gkEhi|1hvSb;CN3sgP+&_mAiwxm+xWutcIfrZ9o6oteV12_WW)-kN8>g}~Oy$VIT_W8zHcq)S8;)$h$&u^3# z_&WU7C$a?KV6>R~gGYWXM5+vyhgM%h!Z)y#z}-QXQE&5nPylNXO>K8%bf4Q&YTJ`X zQ22BO)c$6rp~@rEq2y{TNL?Z6z}pKhui^p=d-F? zTYuM2CwVXK&4Y4lO5V|Q~)x?H7wy+?IAOaS1sBXcDJ_~?#+be#%al}hdjI}?dBo^LK+inq?^U)x{vVL7n+C>$i;9dO zIR3=@*{M%^E^-x*Rj;JRB`t=tVBL*F+E25KxpvcrLKFsb*BAS$0VPu2>QQjQ)6;z! z$kGMn+y11XbFiV#p+w=CJ=-0uO(ALNs`4cT+=t*M2O%l3_yA`?nEVIU3>9)0{sXL6 z3;l&PN!ngFrJ4uJhQJom>|hssMh0g&(NYnA_4mB93^)>Vkj%dza;A|3IPXFZMh9xm z<`hPGjV~pO1X7-@I=l$uQvu0SV97~wGRDYy>B(BH?%t+W@34f7P}9t65h%LWN8-XKIA=(8wp zY>bY3_HzGT88_H>)L{S~r1!yp@5k|PQB>{xzfZDg!NpEFIKR>0a8yf*`}SS^&rkk+ z5&>{H8&CQ55Xi?mJc=o%FnU3|!%aIb7ie8P+BAP20yF>L?w}00M1F5+vCYW)-}o>! zNyE-#<>E9uXy&hi!3)zr-QnNAFso7_co1TZs*rc%?^W&|7rMId(b~ zq*rPW&`E-YN-|Y;=elquFY|?9{X+oTaOnBKELZ@!0f@{tPO`4-Ks}$$JYAZB=c_v2 zP2*(wdk|X1>t(YNdlO}J?zA--f);BaNdR5^$IqX1nK=1H4(_rXL_&+e^BKOFFq&Z{ z2g9#lPyQN!=>lyW`eB$0)V)#~3lDGZuv~q(cp^5uCA$Z3xz6+P0Qv^*KyDTP6D!`{ zm{ENM2Qbb!IS??CEoy1vB62e#=>pj!V*x~gI!L=))yBT0iRbcGrZ2L4dTU@_;vR)yX%T zLFWC%QFt8T(L$P08S6-9%&BL4^ytxJjKBl`sJ0%z#hu)ef!-@XweDN0DLR`PqlDFT zoH{WUr@rjIXYDZ_bKEl_N~GbiXyBJ7jZg~r8zAem4+nTSMd__(od2mCe|Vs3FJ_Tq zAR+KJ^g3)JC+=_Ql|OYyb`62Zw?BN`dtMqg+tgT(wN|8Amm7CbHSL`VM zJ$A$mLMa6~0DQOGRc>q_yD*j4e~vE0!%`5}AUSf2-Lu$P5FGucY5tYdCXxYB_Pwi<~24MO&4t^MD zp-N%Ok_c6R{)YgIg+om{`s=4Vc%oq8e)J%Cr2;Vl zOrf(WUTN%Qr_KCR7KF|(sj3q7wam}YXJpO(VrXt|UA8wZc1>x5FCYPM|11m_0&E0z zi;*nrwLOdp3FnGsHGVKFcrg(r@ zAL!t~{rpz8y!bs!Yin}l?SHQ`>`Yna?8}p(eIOGLaA$$FHjcK0U&9duL0bwUMP`(9SSByq47T^z8TVm1|Be40=5M2ylYU-b)v0u^nv-pUi*- zHiXFX+$^LT`>j1Vbm6Sb;7(zoZm`9+Eihto%=VlDjuTiZ6<#7&$8!KCPbv5g z{rgPYc(eZ8UdBK1(4o_oq_aZw9df|ANx%a&jcLs~hK>HB%3XD<` zL@JN;o1KemJ7k1d^N8ftn8B7Ag05)wYu+oMCkuh`6|f?^7^e+F66fYc8h9#2gYs`-$YrV^y4B=siF zg2wxAp#?gP`55QB;i0w>%9b}ybZ47S31u!&keA1lSvDM^=pO6CH%!Ieawr!o4rL`^ zjmSrj$qOchAMa_G@d-?c#_WtvpS3|rFzceS5aQCEaxBy(7O}&W64CD$mEWH*?A;&Vo zsy?6DA`vBKcT1nF5xzV zQya%E(cvLyShNNZuzRsF#`3Tcc^`sW`VrDRczL}*g$+)1pw@t&LHuEYQ*adAhZYkT zrT~5#330IA8Cb@zaf&uB0g(tFmDqcuvEmKS#PKiQiX$})+YH8!<8nZ9q(?;s3kA8L zg9rfU!#&ZfL=i~#we5LfJ)=$EwnxmpPj?%IAkGFz$H70hYG01EyaBr_k9hTl5lr)kbaDCgXTpMv-UzN}nKG=0G1sxny;p(=nQ zhcFO&jEL-hpMGbZ_oA#r-gSQC8#>VEYzBT$X+<7JrZNq#M#BF+g{F|L&9z()$H2H2x zz3aJuX7R<2pI19zzsB<+Q}B=Hnp+8KLqm(LSi0CrJn>7!hsz-r-ky#Vp&)R|%z z%xU2vqY;t?f)xj|t}J9~BsC>e1&bnY^;K3{?R@T>kV z6swCy3ouT(iTa?x@c^23YxYGU=mUIGkp=9Fx}Zq}dH_?Hpa=3M_y2svuHpklAPmUs;O9LdXn9Qf$6q zcujL{)^kqr=zPItqV+!6>=nuh8^!Hvw_c12`E;N266e>!%@411$2`*fn5lJO zLFV*6ZCUtpemS$5m1C|Trz#sOE1lX<__=f4@vMl%$~qK#^y-ZF6bfKfK!DGNT~rs^H8bJ8g6TCYDgT8z7aty|JJ662g>V%mFqL4h$a z#21?xvs7mQDq06x2QysE6+FfsPT*YsakAALK@d0KnM`pK1W__IK*|K$TA&If10VVPPT+*~sA_~~GMcXbGW+}q4Yy9v5$2H>ou%Q}m3WCwuwyF@fP6}vAYkji zQ8Pv2ogikB%@|x$^k9S-Xy19;vqHzpY6F39C~66R2h?%O+WIx#%UZ-?WC3aWSLIrL z%M+lkYCpbi3ff8;zrF^LK>XGgA(trpUW{>ap;`^b&RH-z?d+|zz%a8H`5~iwaGyxl zmvMH@g(loOi6?Q*G{=M?1{{g3Es<0zz~hL6Ux)`Br0Qx=dT9^+@p!VVAW915a4=L)An8S1ioX*T*93s%h2!h)yzu9z?h6@2(!eNN zte}(mw-?O9SaKqXB22?B^12q!G|U$TFjjkS`S# z`@0hk)Bg{wWqawCJ06^`8ZXVl}=vAVt zR*eqrKsrS-@%wTvWWhFn@$9jM+W#l0m>q=1mHZ{@vYY_;QK#b+My!oChk+1r2xupO zso)H^0tJtdTlf||KyhO0*E65m`0EusQ6ZhXP^xEadj-90RZ}a}78+TN za}Xyi8|=`TI-e_EPfjb9S?=n%J!P7Z+sS`qA zAVN2csb7K4hC#9epg?f;e+nKhYTZo38D|XKH3zN4D=(g2-LYfn=lnA82K$d3&1`IP zf#*lqJl#SwQ{W3kMo_TRGCym(&>cYWXK*%eZ*|y0oywC2wWH5;(Xk2Mc+y+kLcwzf z2Qbn&kVRwxWb8us==3j74|D=q!2i==&LDb*s;X+hO&tib$vLXX*y{3oWj}km5Dd7` zMS~4pUSul9NoiWKC(O)z;1>g_yt+Xxb}fU^+uPfArY$e;#S13Fv9QmH#6iqTRQ3q9 zzT#Jqu#w?x*|=Nav}u=jT(BDm7Lc;m#g9lfy0CIO!>tq@;f01qPvE0sTA9oVTC)qd zHYHoIgP^tk9?0JdGU z+<<()RN&kr$7-^W1!?yC)ua9zao9)jJ|L4l#MXe8UkD=w`T3oyC*7JOcPUX52dT0z zR%1QNVRx=E>`#(=_@m$$-k$W1ej}R4zj0K(fTEw{8NcH*>cG7@z7ALe5YK~3b%wuV ze!y~5`NXZ{$4!o!Gj0z^2&bYMF|Hp17nsxJyKrk zUk@x6ebr*)m><*^RrAJkFFeBq;e{x?{c)3mu35-+rZRRaEBjyZ^7bxDA41X%%VHNF zA5OT~B=({Z*F&R@KqGhvV|>9C954teaxI%~D7o3xoM%IW+65ChFmC%2YNnmcvGC!E zIoJS#%xnL>Tc(JJh``y4{ER`2NGMTTZ#HBPH$HNyB&#Fxr~orgrIs>DV2yC)b3-0N zM)CMtCkNxP#?e`)4Z^4ciIH(?qfo?hyU#w}-loMeM>I8~4-A9)&y*^)bCv&FV4a=^ zdyK*cdrF6b0`n*(M5v|526}rz`;=wax995J=Fn-L0d`Q^g&5oOw?CE*wU^r(eHaY8 zy5-|Zla9Wxgx@k8ku4;Y4^c~=Y#6bEaYz_N1=XgVX`JeqK4mXawVVP$!VK zw@4@lWp=%u4@Sl!aC`F26Sj;e7K=yMw5MlxA~a0!MqW&&910$VCl4Mx2=FX5X9$VK zOvWo51KW1*_69~V1I~AIFenXK{Z24frvL$~Z)#eGM9CE#M=XY8$Tj4b`g>ttDqEo} zpN5%Nrx9%fTacZqkr&je*Yynz!oXNp*=ax4b!sY%xQr^zu^z+{^APP-O z)4Ki1Ut+Zd^0T5iqO2iWWTxxc1HhR0HmX2F5~pW@Tla9PCHnNJsj7W6PXbv!*;fx*BPa zBKWb<4YTA&Y@a-Mus!ZaNw<;7K#Top>!oyo7^$*o<;v*lSfW0&>+9=d`4^a%=I3VH zzjigO%)H+*7-qyVARQ26R%?MF+|%GU84s7-lYOwk6LiP+X00p=f&&lZkkD~SQF?u9ZJ63d6sLeF3b!W=&OfVQUQN}QcYh23!M&yi<8 z{rS}tCRvraXYu&j3& zzQ`nd5hMbQMpVZy5&wZN?mU4?2$n)SA6~)mNJGvADG%~scd+*4zjFg6gKgV4x z?A^7cAZ4%SCpe`2@Iv_mrUA`@YP0qMHh3BR#6-=ZfeU3HZ*!Za&*`>v5ciP_Hb_Wn zGx-jdEtyVI^8tkNlt(gP4`6p7=ZScNpJQjhG(q{>&@jLNEHs?_=EYX7O}F2Q$X5*o zp?PiGBsTt_>z+uBK{MgEK!u^+61>6Pxf-v|l`uV=&WWJez&KEtuQFS`Li zwW7iD4Wrr1z|f!cr8xrBF9w=K$Le-2@Odrw>H+Gi>q<+&C)WeAnowI%z{3E{vE~LQ z0!>970s6`?69X-XT(qtppQ@LSIg7Y9cEXFn--tob@9}l>Q2FCGAzxS|kO1jfW<@>7 zPM9bab|_ApQWW$KEi1q@zmK`eY4cNHiOOK0g~MP#{71*_DeOw(*&s%s-+XJv+zPda z&`(i`#>C8;1<8S=IXIFGM`&YCRukGS(VtNr~%7mP?nD;XK;_C&jTRMDe3%`|{ zDi0PJZ$MVV2@i9MA~7l$YJnaiLl#~r>R+3ir!X+Duyk_`(lUmsx_Z%f6DxHf;7SpN z`Fdjo4%>@~0;f44*Jel{QdpaB>?%Mw^EP2 zi#F}c+Tq@f86cQSx(uPgee2}Pd6JgP091y5jLY~j6-O|vNQG|X2~)>>s_l%di`%ozmX~Dw;N1M8tQr6 zAfAZ0ejmeK+DcYqCt*7$Dp$vJi3P`RH)~#RSF_Np;AZbC?TopQ_S9bd=~Ke71VLw$ z!*GUnso6cdh_z8Hj^dy8Xln=Mb@}XC;j`pUe^g(t7qt32uJtMyA4vfDTb-;2o8u4vFLTRuG_DuL0Os}Gn0TH{uvUb>= zrfwjGT2-P0y$5z2amUokvAp3=&yLAlnGL^V5D@j>_zA%gi6*B+{6LaLN*W}A-|nIJ zOms_h5*fNCCM23Rf1@6cXI2v8;xtwVbqb+&NYqwy8kZIoB}N7M z)b2g|K8j=BI+m3O|1sR3i9Os@5;Gsg-QDVu&zILsV&I^u{9d-OJIM4=l3m5!;S0A< z^Hub;ltOSFdvM9=q!L7n(`e9G2OQb9u&v9RX)InRZr7~ng9Y3oD07KJh}F`5WCT9k zDBJJvU+tQO1d6%N;e9hB3j~tMSmZR{2R>89k`GUx4+3Gnr8bMJ9n(z=Prn_bc@7Ny z$@-hyi1>hFiYRTNAt5jF>l3};m<4Ij>6VgJ)b{|4ldsgB8cfVXoMY6swePQI12-Mh zbpp0@Qs>A^y7uoUh2e8OGnre+8x#>U13LOTq#=$IKBH1s8a{6;->WZE=3G8 zv69$mFR%bWlemln2`6YBj=pmss)}JKdh=m~7DBagE|M6MfF1zR7Xd`|*SSomzY_B$ z+qUPx4jU3DWL`L+l!0yyKF(t;??uLLNHX*QX~M;AHM%Yw0xHoFP;iI@os$QmF$KLs zqRI)mQU_@!!!nt=@H<2?4h{`l%Keahg5~Lq{bJsghN7E?@e288$Glo_$5RXgOb|D|W z41LP-JV!@IwgLNlfq^9DTZJ|2#{I#e6cqOd-11G=r}K&LZ21W}rB$pAGRc$rpElOq zY<~-;OY^<07Bv|s-!pmQVv`>2?P-e}%qhPE)h;_i5}D$6p|VOI>_OQqg1iuYLkg-+cr>V+a@u&lBGvz%o9k04?p4r7KxOKQu zQI&HHh;Jy)Ov(pwTF_eU0+Twa>>K6a@RWmtxIC2x_Co_+@D4nLez%E0shZA|(|sKk zH;+L;HE8#|uUB17Z4qW9kjW?qAKPfvV#}!UaCVahOU8u2Qok*gbp%hGBRowe!6;}Ei8$UA><+ra>jpM+cjovkoXtBepOSm0Mq|+ z97YCpno|aY@rAGen+qIwATT;6CI?9%eH-xN2_9u+?O*!}{Vf~d$|BPE9Qwi}uR<6t?_j(%wl zD|YY1)Nfs=^AWq*sELDitq=k=r7f7D#WDL9xDCjXXfO$yBFA7>4di|OVQIwyV?#sY z#Gq3&32Ux-%hIu|Zq*%b`MHwpqyMt#!bJdwWOzVb5wP#N0Q^!#3bE@uVa@N(p7vW& zH4$H)nDt}@PkI+n*ucTd0%(BU0 zJv37QfZGb-(;?ZTUmePIY2uhJT8(}zbv4NWo)(El%xf4Oj&~9TFsII)>#C<@6zbjO z^@~B(8Fsf4le#eUf7#J!uewI^!rmgevSk2fyZafgW;}Mv5WY7+O2=XZbU?{u# z77da|9Ze>v=umz!1dwn5fY0mP8jzA!P-l(;THxhk)<1i zc5p5-9$0m~UKy9+j0;)-mQ#L6fj$|EPz#DWqj-I^D6s~?{JIvRFnR`rs<=JW zL<<>b@ohj2aU5`sxrZug0{dMU;B<1)z(RmbNSVkU5KVSsB z_|g8=YZcui3JghfG123P;vcWc$sp)FMtAZ6AKPH*IeNK8Z`V%r&?LnnAHw5?m+CyS z`9-fAL}(bNq5L85Mo@oHb<*rc^xIEC|7TgI_}rGLpQEl8*SZbRD@HREPiyU|I$4_9 zA}B}}jG%xz;dl?pZa-yS`;5eeG(meCem`(XqMgIZj^+bl3iVn`&my^5m}4^Tp@^!3 z>~HbaM3VR@)5nj_3#Y(XyIW@apQb^e3aY5sqfedjEb5U;$-!jvhm?-?7jPTJ0eXUh#~7d0clpwBl6`@G1A0T-)YPtB_dC;8 zv4JiQ$T3YVnF4wk=vY**7Jj6=0&u^3>H1UCJS7)k(W5^B*GA^jIGxf8P&dG?VPb&t zs#bUi&m$t(Ax`;QVhTVf7*jUTZD2=wBAno)re#S)8){YHJVjS>zNEUb2vo!5PKq~2 z;v(>6KoLan5eBnCN$Cm9%Pb>DS5>#v-zI2lIqq&WM{desAW$Gtnn?^sTq}T2 zocHh>B+f8cpUl9ZS)acLG#TxV)+~t7&{btXb7Z+%RiB z#y_JGi_=YBukPmWXP6b+fHzEIYUm0f0cAMih@$-l7{;ie6Pk@S^KXs*<{nsPqb?sH|XlgE%gsU$^(=r*H1_RNXj%U5j;SDWg#mD!o^05 zn(H^?FM<4mhJ)XoJ5z*Mki4=Y1S0Dh9rRu~R^og7De*&X$-qiQKHLQC@yTY3FH6%j@q@{BhaZ+FEwh2*7KP)pVW}%5^>hv2KD;0z1|i7JvMS znj{S1vc?RyRH<~|goK3a>V>xzi^a=b-|qKKL7uDpmIK%@iGx60Vc_H-=FpZcTbe3U z)}Za;fz*#&9I-4}ul(-Xud3>Z=LE7f1bMTN=8$xXYKTLJFjWQY81xP4O)ftIr0PS~ z)tRHG)dt^*(?D^$Y*<0lzpD#2_3PkQ!Db_Bca*wupoys|hpp}4$&}ZNZ@k_UqKY9Q ztUzth?^v&D(yWKJz5=vM7}fy0`KcfiBEd0Sa`U(K$`vaLpLzgztHWTKC6X9torQTj zsE=vJ5O8nx*T+SSRbXFv@P~r_It(UD6aVRt1{RpY5g)*E9cSu-xQqEHdT0vQ-L&Li zaYJc9D&+L9N4Qgx9>Tr^?@xUA9$b^1;=+zxMVK5AzrPdtQ-+MzomcGo!uqJ z)?GtW1^=P4o_+?AuCgprvLVoTvuV1zgYoM7;R@-^|=Ilh_a`Z-2l zazTURpO-9f7}t!SPrAl;cj-FuYFs|*zr=SqeD-N;$8OkJH3J+7-1Yax;eh_L5M)uz z+?B~js~;prM*HyBXXrLDvQQluu(BW~p}UlLuKGcb#6zH@xX?cD%%>7)tAyfT8TZv! z&?#787+$V$x1{p6YT@BSz;h0Uz8w-z?n-&P)h7VVr;^qUdp1IQO<#y)e%+ncXQhk2 zlc)qD;FTZRi^PA0Hmj-PHqn?V+*}I?W+hJ!Udx%M{Mcb)8#cHB69p0obag6TUUNB| zx=@D|K8o%VD2@b!8XOOeTyeWzru%3ZTwp^Hr2vcCD0R9>`fpQ2eBRfIBfhu+u~kZ# zwn5AM1FS~?XnG(v0Y}8iyf89uOoSoHJaNA83~`Bby)G##x(_crAnatW9vPX>cW%gR z-YFZuWFvvB>hRmInHpb9GPSw-ZtqjJH_|wye3xs>#)nVKHSaEcd00~uk5(~yHBeS8 zH$s+f-Atuck$7G8?Zf(JW}I+Oz<*g@5Njy052MtkH&p6RMR8~5-3WZg8*Yt6g- zXLXF8K=en^$?bhx|5(V4hIafBdH&B{8mmI^XQ+h!L@#ADpp5>JbZ3gA1*gD-w&~A* cuu>VB&b1`FSx?%tmVwW%Z7Pbf^19CdADg1bK>z>% diff --git a/demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/products/tool_report.png b/demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/products/tool_report.png deleted file mode 100644 index 955eb9bdf439c668829177af0a6c04054efcae69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120341 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 z 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 EAFaXEbpQYW diff --git a/demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/products/tool_report.txt b/demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/products/tool_report.txt deleted file mode 100644 index 70a0303..0000000 --- a/demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/products/tool_report.txt +++ /dev/null @@ -1,4 +0,0 @@ -Node: arrangement/1/locus/2 -Error Message: Value does not have class trov:ResearchArtifact -Suggested Node(s) to be Updated: composition/1/artifact/100 - diff --git a/demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/run.sh b/demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/run.sh deleted file mode 100644 index 3bec032..0000000 --- a/demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/run.sh +++ /dev/null @@ -1,115 +0,0 @@ -#!/usr/bin/env bash - -# paths to data files -TRO_DECLARATION_JSONLD_PATH="data/tro.jsonld" -TRO_DECLARATION_SCHEMA_PATH="data/tro.schema.ttl" -SCRATCH_REPORT_PATH="products/scratch_report" -TOOL_REPORT_PATH="products/tool_report" - -# ------------------------------------------------------------------------------ - -bash_cell 'dot report' << END_CELL - -python3 << END_PYTHON - -from pyshacl import validate -from rdflib import Graph -import pygraphviz as pgv -import pandas as pd -import subprocess - -mappings={ - "http://www.w3.org/1999/02/22-rdf-syntax-ns#": "rdf#", - "http://www.w3.org/2000/01/rdf-schema#": "rdfs#", - "https://w3id.org/trace/2023/05/trov#": "trov#", - "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/": "" -} - -with open("${TRO_DECLARATION_JSONLD_PATH}") as fin: - tro_jsonld = fin.read() - -# Load JSON-LD file with RDFLib -g = Graph() -g.parse(data=tro_jsonld, format="json-ld") - -# Query the imported triples -q = """ - SELECT ?s ?p ?o - WHERE { - ?s ?p ?o - } - ORDER BY ?s ?p ?o - """ -rows = [] -for r in g.query(q): - rows.append(r) -graphs = pd.DataFrame(rows, columns=["source", "label", "target"]).replace(mappings, regex=True) #.sort_values(by=["source", "target"]) - -# Validate JSON-LD file with SHACL -with open("${TRO_DECLARATION_SCHEMA_PATH}") as fin: - tro_schema = fin.read() -r = validate(data_graph=tro_jsonld, - shacl_graph=tro_schema, - data_graph_format="json-ld", - inference='rdfs', - debug=True) -conforms, results_graph, results_text = r -q = """ - PREFIX : - - SELECT ?value ?msg - WHERE { - ?curr_node :focusNode ?focus . - ?curr_node :value ?value . - ?curr_node :resultMessage ?msg . - ?another_node :focusNode ?another_focus . - FILTER (?value != ?another_focus) - FILTER (?another_node != ?curr_node) - } -""" -rows = [] -for r in results_graph.query(q): - rows.append(r) -wrong = pd.DataFrame(rows, columns=["node", "msg"]).replace(mappings, regex=True).drop_duplicates() - -# Create a directed graph -G = pgv.AGraph(directed=True) - -for _, row in graphs.iterrows(): - G.add_edge(row["source"], row["target"], label=row["label"]) -for _, row in wrong.iterrows(): - G.add_node(row["node"], color="#f77580") - # G.add_edge(row["node"], row["msg"], label="ErrorMsg", color="#f77580") - -G.write("${SCRATCH_REPORT_PATH}.gv") -subprocess.run(["dot", "-Tpng", "${SCRATCH_REPORT_PATH}.gv", "-o", "${SCRATCH_REPORT_PATH}.png"]) - -END_PYTHON - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'report string with the validate_tro tool' << END_CELL - -validate_tro -f ${TRO_DECLARATION_JSONLD_PATH} -s ${TRO_DECLARATION_SCHEMA_PATH} - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'report txt file with the validate_tro tool' << END_CELL - -validate_tro -f ${TRO_DECLARATION_JSONLD_PATH} -s ${TRO_DECLARATION_SCHEMA_PATH} -o ${TOOL_REPORT_PATH} -of txt - -END_CELL - -# ------------------------------------------------------------------------------ - -bash_cell 'report png file with the validate_tro tool' << END_CELL - -validate_tro -f ${TRO_DECLARATION_JSONLD_PATH} -s ${TRO_DECLARATION_SCHEMA_PATH} -o ${TOOL_REPORT_PATH} -of png - -END_CELL - -# ------------------------------------------------------------------------------ \ No newline at end of file diff --git a/demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/run.txt b/demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/run.txt deleted file mode 100644 index 399f5b8..0000000 --- a/demo/02-explorations/12-validate-jsonld/05-report-pygraphviz/run.txt +++ /dev/null @@ -1,111 +0,0 @@ -====================================================== bash cell | dot report ====================================================== - -python3 << END_PYTHON - -from pyshacl import validate -from rdflib import Graph -import pygraphviz as pgv -import pandas as pd -import subprocess - -mappings={ - "http://www.w3.org/1999/02/22-rdf-syntax-ns#": "rdf#", - "http://www.w3.org/2000/01/rdf-schema#": "rdfs#", - "https://w3id.org/trace/2023/05/trov#": "trov#", - "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/": "" -} - -with open("data/tro.jsonld") as fin: - tro_jsonld = fin.read() - -# Load JSON-LD file with RDFLib -g = Graph() -g.parse(data=tro_jsonld, format="json-ld") - -# Query the imported triples -q = """ - SELECT ?s ?p ?o - WHERE { - ?s ?p ?o - } - ORDER BY ?s ?p ?o - """ -rows = [] -for r in g.query(q): - rows.append(r) -graphs = pd.DataFrame(rows, columns=["source", "label", "target"]).replace(mappings, regex=True) #.sort_values(by=["source", "target"]) - -# Validate JSON-LD file with SHACL -with open("data/tro.schema.ttl") as fin: - tro_schema = fin.read() -r = validate(data_graph=tro_jsonld, - shacl_graph=tro_schema, - data_graph_format="json-ld", - inference='rdfs', - debug=True) -conforms, results_graph, results_text = r -q = """ - PREFIX : - - SELECT ?value ?msg - WHERE { - ?curr_node :focusNode ?focus . - ?curr_node :value ?value . - ?curr_node :resultMessage ?msg . - ?another_node :focusNode ?another_focus . - FILTER (?value != ?another_focus) - FILTER (?another_node != ?curr_node) - } -""" -rows = [] -for r in results_graph.query(q): - rows.append(r) -wrong = pd.DataFrame(rows, columns=["node", "msg"]).replace(mappings, regex=True).drop_duplicates() - -# Create a directed graph -G = pgv.AGraph(directed=True) - -for _, row in graphs.iterrows(): - G.add_edge(row["source"], row["target"], label=row["label"]) -for _, row in wrong.iterrows(): - G.add_node(row["node"], color="#f77580") - # G.add_edge(row["node"], row["msg"], label="ErrorMsg", color="#f77580") - -G.write("products/scratch_report.gv") -subprocess.run(["dot", "-Tpng", "products/scratch_report.gv", "-o", "products/scratch_report.png"]) - -END_PYTHON - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -======================================= bash cell | report string with the validate_tro tool ======================================= - -validate_tro -f data/tro.jsonld -s data/tro.schema.ttl - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -Node: arrangement/1/locus/2 -Error Message: Value does not have class trov:ResearchArtifact -Suggested Node(s) to be Updated: composition/1/artifact/100 - - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -====================================== bash cell | report txt file with the validate_tro tool ====================================== - -validate_tro -f data/tro.jsonld -s data/tro.schema.ttl -o products/tool_report -of txt - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -====================================== bash cell | report png file with the validate_tro tool ====================================== - -validate_tro -f data/tro.jsonld -s data/tro.schema.ttl -o products/tool_report -of png - ------------------------------------------------------------ cell outputs ----------------------------------------------------------- -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - diff --git a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/Makefile b/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/Makefile deleted file mode 100644 index 68e529c..0000000 --- a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/Makefile +++ /dev/null @@ -1 +0,0 @@ -include ${SHELL_NOTEBOOK_DOT_DIR}/Makefile.demo-runner diff --git a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/data/tro.schema.ttl b/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/data/tro.schema.ttl deleted file mode 100644 index 6ecd9c9..0000000 --- a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/data/tro.schema.ttl +++ /dev/null @@ -1,128 +0,0 @@ -@prefix rdf: . -@prefix rdfs: . -@prefix trov: . -@prefix : . - -@prefix xsd: . -@prefix sh: . -@prefix schema: . - -schema:TroShape - a sh:NodeShape ; - sh:targetClass trov:TransparentResearchObject ; - sh:property [ # One TRO has ANY number of comments - sh:path rdfs:comment ; - sh:datatype xsd:string ; - ] ; - sh:property [ # One TRO has EXACTLY ONE TRS - sh:path trov:wasAssembledBy ; - sh:minCount 1 ; - sh:maxCount 1 ; - sh:node schema:TrsShape ; - ] ; - sh:property [ # One TRO has at MOST ONE TSA - sh:path trov:wasTimestampedBy ; - sh:maxCount 1 ; - sh:node schema:TsaShape ; - ] ; - sh:property [ # One TRO has at LEAST ONE composition - sh:path trov:hasComposition ; - sh:minCount 1 ; - sh:node schema:CompShape ; - ] ; - sh:property [ # One TRO has at LEAST ONE arrangement - sh:path trov:hasArrangement ; - sh:minCount 1 ; - sh:node schema:ArrShape ; - ] . - - -schema:TrsShape - a sh:NodeShape ; - sh:targetClass trov:TrustedResearchSystem ; - sh:property [ - sh:path rdfs:comment ; - sh:datatype xsd:string ; - ] ; - sh:property [ # One TRS has EXACTLY ONE public key - sh:path trov:publicKey ; - sh:datatype xsd:string ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] . - -schema:TsaShape - a sh:NodeShape ; - sh:targetClass trov:TimeStampingAuthority ; - sh:property [ # One TSA has EXACTLY ONE public key - sh:path trov:publicKey ; - sh:datatype xsd:string ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] . - -schema:CompShape - a sh:NodeShape ; - sh:targetClass trov:ArtifactComposition ; - sh:property [ # Each composition has EXACTLY ONE fingerprint - sh:path trov:hasFingerprint ; - sh:minCount 1 ; - sh:maxCount 1 ; - sh:node schema:FingerprintShape ; - ] ; - sh:property [ # Each composition has at LEAST ONE artifact - sh:path trov:hasArtifact ; - sh:minCount 1 ; - sh:node schema:ArtifactShape ; - ] . - -schema:FingerprintShape - a sh:NodeShape ; - sh:targetClass trov:CompositionFingerprint ; - sh:property [ # Each composition has at EXACTLY ONE sha256 - sh:message "*** Each fingerprint should have EXACTLY ONE sha256 with String format ***" ; - sh:path trov:sha256 ; - sh:datatype xsd:string ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] . - -schema:ArtifactShape - a sh:NodeShape ; - sh:targetClass trov:ResearchArtifact ; - sh:property [ # Each artifact has at MOST ONE memeType - sh:path trov:mimeType ; - sh:datatype xsd:string ; - sh:maxCount 1 ; - ] ; - sh:property [ # Each artifact has EXACTLY ONE sha256 - sh:path trov:sha256 ; - sh:datatype xsd:string ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] . - -schema:ArrShape - a sh:NodeShape ; - sh:targetClass trov:ArtifactArrangement ; - sh:property [ # Each artifact has at LEAST ONE artifact locus - sh:path trov:hasLocus ; - sh:minCount 1 ; - sh:node schema:LocusShape ; - ] . - -schema:LocusShape - a sh:NodeShape ; - sh:targetClass trov:ArtifactLocus ; - sh:property [ # Each artifact locus is linked to a valid artifact - sh:path trov:hasArtifact ; - sh:class trov:ResearchArtifact ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] ; - sh:property [ # Each artifact locus has EXACTLY ONE location - sh:path trov:hasLocation ; - sh:datatype xsd:string ; - sh:minCount 1 ; - sh:maxCount 1 ; - ] . diff --git a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/data/tro2.jsonld b/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/data/tro2.jsonld deleted file mode 100644 index 1e90c36..0000000 --- a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/data/tro2.jsonld +++ /dev/null @@ -1,76 +0,0 @@ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [ - { - "@id": "tro/1", - "@type": "trov:TransparentResearchObject", - "rdfs:comment": "A composition of two files in a single arrangement endorsed by a TRS that enforces no policies", - - "trov:wasAssembledBy": { - "@id": "trs", - "@type": "trov:TrustedResearchSystem", - "rdfs:comment": "TRS that enforces no policies", - "trov:publicKey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n" - }, - - "trov:wasTimestampedBy": { - "@id": "tsa", - "@type": "trov:TimeStampingAuthority", - "trov:publicKey": "-----BEGIN PGP PUBLIC KEY BLOCK-----\nmI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f\nPFa62W7k1CWEm7KLcOO5hlmMvI+GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6\nTbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0\nHXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+iM4EEwEKADgWIQQS8oDdaGyb\nHbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK\nCRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+CknyQ3yV/fpEU+IH2T6qS\nxrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N\nIsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+1An5ogCOACg==\n=vuaX\n-----END PGP PUBLIC KEY BLOCK-----\n" - }, - - "trov:hasComposition": - { - "@id": "composition/1", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": - { - "@id": "fingerprint", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc" - }, - - "trov:hasArtifact": [ - { - "@id": "composition/1/artifact/1", - "@type": "trov:ResearchArtifact", - "trov:mimeType": "text/plain", - "trov:sha256": "b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c" - }, - - { - "@id": "composition/1/artifact/2", - "@type": "trov:ResearchArtifact", - "trov:mimeType": "text/plain", - "trov:sha256": "7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730" - }] - }, - - "trov:hasArrangement": [ - { - "@id": "arrangement/1", - "@type": "trov:ArtifactArrangement", - "trov:hasLocus": [ - { - "@id": "arrangement/1/locus/1", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, - "trov:hasLocation": "file1" - }, - { - "@id": "arrangement/1/locus/2", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/100" }, - "trov:hasLocation": "file2" - } - ] - }] - } -]} diff --git a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/data/tro4.jsonld b/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/data/tro4.jsonld deleted file mode 100644 index 80c6e1d..0000000 --- a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/data/tro4.jsonld +++ /dev/null @@ -1,44 +0,0 @@ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [ - { - "@id": "tro/1", - "@type": "trov:TransparentResearchObject", - - "trov:hasComposition": [ - { - "@id": "composition/1", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": - { - "@id": "fp1", - "@type": "trov:CompositionFingerprint" - }, - - "trov:hasArtifact": [ - { - "@id": "composition/1/artifact/1", - "@type": "trov:ResearchArtifact", - "trov:sha256": "art.sha256.1" - }] - }], - "trov:hasArrangement": { - "@id": "arrangement/1", - "@type": "trov:ArtifactArrangement", - "trov:hasLocus": [ - { - "@id": "arrangement/1/locus/1", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, - "trov:hasLocation": "filepath1" - }] - } - }] -} \ No newline at end of file diff --git a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/data/tro5.jsonld b/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/data/tro5.jsonld deleted file mode 100644 index fb43907..0000000 --- a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/data/tro5.jsonld +++ /dev/null @@ -1,46 +0,0 @@ -{ - "@context": [{ - "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - "rdfs": "http://www.w3.org/2000/01/rdf-schema#", - "trov": "https://w3id.org/trace/2023/05/trov#", - "@base": "https://github.com/transparency-certified/trace-model/tree/master/demo/01-trov-examples/01-two-artifacts-no-trp/" - }], - - "@graph": [ - { - "@id": "tro/1", - "@type": "trov:TransparentResearchObject", - - "trov:hasComposition": [ - { - "@id": "composition/1", - "@type": "trov:ArtifactComposition", - - "trov:hasFingerprint": - { - "@id": "fp1", - "@type": "trov:CompositionFingerprint", - "trov:sha256": "sha256.fp1" - }, - - "trov:hasArtifact": [ - { - "@id": "composition/1/artifact/1", - "@type": "trov:ResearchArtifact", - "trov:sha256": "art.sha256.1" - }] - }], - "trov:hasArrangement": { - "@id": "arrangement/1", - "@type": "trov:ArtifactArrangement", - "trov:hasLocus": [ - { - "@id": "arrangement/1/locus/1", - "@type": "trov:ArtifactLocus", - "trov:hasArtifact": { "@id": "composition/1/artifact/1" }, - "trov:hasLocation": "filepath1" - }] - } - }, - { "@id": "fp1", "trov:sha256": "sha256.fp2" } -]} \ No newline at end of file diff --git a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro1.gv b/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro1.gv deleted file mode 100644 index 058a914..0000000 --- a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro1.gv +++ /dev/null @@ -1,80 +0,0 @@ -strict digraph "" { - "arrangement/1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "trov#ArtifactArrangement" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1" -> "trov#ArtifactArrangement" [label="rdf#type"]; - "arrangement/1/locus/1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1" -> "arrangement/1/locus/1" [label="trov#hasLocus"]; - "arrangement/1/locus/2" [fillcolor="#fdccac", - shape=box, - style="filled, rounded"]; - "arrangement/1" -> "arrangement/1/locus/2" [label="trov#hasLocus"]; - "trov#ArtifactLocus" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1/locus/1" -> "trov#ArtifactLocus" [label="rdf#type"]; - "composition/1/artifact/1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1/locus/1" -> "composition/1/artifact/1" [label="trov#hasArtifact"]; - filepath1 [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1/locus/1" -> filepath1 [label="trov#hasLocation"]; - "arrangement/1/locus/2" -> "trov#ArtifactLocus" [label="rdf#type"]; - "composition/1/artifact/100" [fillcolor="#cbd5e8", - shape=box, - style="filled, rounded"]; - "arrangement/1/locus/2" -> "composition/1/artifact/100" [label="trov#hasArtifact"]; - filepath2 [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1/locus/2" -> filepath2 [label="trov#hasLocation"]; - "Value does not have class trov:ResearchArtifact" [fillcolor="#fdccac", - shape=box, - style="filled, rounded, dashed"]; - "arrangement/1/locus/2" -> "Value does not have class trov:ResearchArtifact" [label=ErrorMsg, - style=dashed]; - "trov#ResearchArtifact" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1/artifact/1" -> "trov#ResearchArtifact" [label="rdf#type"]; - "art.sha256.1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1/artifact/1" -> "art.sha256.1" [label="trov#sha256"]; - "composition/1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1" -> "composition/1/artifact/1" [label="trov#hasArtifact"]; - "trov#ArtifactComposition" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1" -> "trov#ArtifactComposition" [label="rdf#type"]; - fp1 [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1" -> fp1 [label="trov#hasFingerprint"]; - "trov#CompositionFingerprint" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - fp1 -> "trov#CompositionFingerprint" [label="rdf#type"]; - "sha256.fp1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - fp1 -> "sha256.fp1" [label="trov#sha256"]; - "tro/1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "tro/1" -> "arrangement/1" [label="trov#hasArrangement"]; - "tro/1" -> "composition/1" [label="trov#hasComposition"]; - "trov#TransparentResearchObject" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "tro/1" -> "trov#TransparentResearchObject" [label="rdf#type"]; -} diff --git a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro1.png b/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro1.png deleted file mode 100644 index 955eb9bdf439c668829177af0a6c04054efcae69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120341 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 z 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 EAFaXEbpQYW diff --git a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro2.png b/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro2.png deleted file mode 100644 index e6bffa74cb1c641191d0b2e292061b04576762f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318189 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 nqL3CMKW;K)iuq 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%0D9KBvc| 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 Ay8r+H diff --git a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro3.gv b/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro3.gv deleted file mode 100644 index 3a2a6eb..0000000 --- a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro3.gv +++ /dev/null @@ -1,215 +0,0 @@ -strict digraph "" { - "arrangement/1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "trov#ArtifactArrangement" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1" -> "trov#ArtifactArrangement" [label="rdf#type"]; - "arrangement/1/locus/1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1" -> "arrangement/1/locus/1" [label="trov#hasLocus"]; - "arrangement/1/locus/2" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1" -> "arrangement/1/locus/2" [label="trov#hasLocus"]; - "arrangement/1/locus/3" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1" -> "arrangement/1/locus/3" [label="trov#hasLocus"]; - "arrangement/1/locus/4" [fillcolor="#fdccac", - shape=box, - style="filled, rounded"]; - "arrangement/1" -> "arrangement/1/locus/4" [label="trov#hasLocus"]; - "trov#ArtifactLocus" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1/locus/1" -> "trov#ArtifactLocus" [label="rdf#type"]; - "composition/1/artifact/1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1/locus/1" -> "composition/1/artifact/1" [label="trov#hasArtifact"]; - file1 [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1/locus/1" -> file1 [label="trov#hasLocation"]; - "arrangement/1/locus/2" -> "trov#ArtifactLocus" [label="rdf#type"]; - "arrangement/1/locus/2" -> "composition/1/artifact/1" [label="trov#hasArtifact"]; - "arrangement/1/locus/2" -> file1 [label="trov#hasLocation"]; - "arrangement/1/locus/3" -> "trov#ArtifactLocus" [label="rdf#type"]; - "composition/1/artifact/2" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1/locus/3" -> "composition/1/artifact/2" [label="trov#hasArtifact"]; - file2 [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "arrangement/1/locus/3" -> file2 [label="trov#hasLocation"]; - "arrangement/1/locus/4" -> "trov#ArtifactLocus" [label="rdf#type"]; - "arrangement/1/locus/4" -> file2 [label="trov#hasLocation"]; - "composition/1/artifact/100" [fillcolor="#cbd5e8", - shape=box, - style="filled, rounded"]; - "arrangement/1/locus/4" -> "composition/1/artifact/100" [label="trov#hasArtifact"]; - "Value does not have class trov:ResearchArtifact" [fillcolor="#fdccac", - shape=box, - style="filled, rounded, dashed"]; - "arrangement/1/locus/4" -> "Value does not have class trov:ResearchArtifact" [label=ErrorMsg, - style=dashed]; - "trov#ResearchArtifact" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1/artifact/1" -> "trov#ResearchArtifact" [label="rdf#type"]; - "text/plain" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1/artifact/1" -> "text/plain" [label="trov#mimeType"]; - b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1/artifact/1" -> b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c [label="trov#sha256"]; - "composition/1/artifact/2" -> "trov#ResearchArtifact" [label="rdf#type"]; - "composition/1/artifact/2" -> "text/plain" [label="trov#mimeType"]; - "7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1/artifact/2" -> "7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730" [label="trov#sha256"]; - "composition/1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1" -> "composition/1/artifact/1" [label="trov#hasArtifact"]; - "composition/1" -> "composition/1/artifact/2" [label="trov#hasArtifact"]; - "trov#ArtifactComposition" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/1" -> "trov#ArtifactComposition" [label="rdf#type"]; - fingerprint [fillcolor="#fdccac", - shape=box, - style="filled, rounded"]; - "composition/1" -> fingerprint [label="trov#hasFingerprint"]; - "trov#CompositionFingerprint" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - fingerprint -> "trov#CompositionFingerprint" [label="rdf#type"]; - "218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc" [fillcolor="#cbd5e8", - shape=box, - style="filled, rounded"]; - fingerprint -> "218d9c33959c89013ca3f0f9dfa9479e0df8d5e4a53bb319b5bfab87f506dadc" [label="trov#sha256"]; - fp2 [fillcolor="#cbd5e8", - shape=box, - style="filled, rounded"]; - fingerprint -> fp2 [label="trov#sha256"]; - "*** Each fingerprint should have EXACTLY ONE sha256 with String format ***" [fillcolor="#fdccac", - shape=box, - style="filled, rounded, dashed"]; - fingerprint -> "*** Each fingerprint should have EXACTLY ONE sha256 with String format ***" [label=ErrorMsg, - style=dashed]; - "composition/2" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "composition/2" -> "trov#ArtifactComposition" [label="rdf#type"]; - "composition/2" -> fingerprint [label="trov#hasFingerprint"]; - "tro/1" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "tro/1" -> "arrangement/1" [label="trov#hasArrangement"]; - "tro/1" -> "composition/1" [label="trov#hasComposition"]; - "tro/1" -> "composition/2" [label="trov#hasComposition"]; - "trov#TransparentResearchObject" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "tro/1" -> "trov#TransparentResearchObject" [label="rdf#type"]; - "A composition of two files in a single arrangement endorsed by a TRS that enforces no policies" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - "tro/1" -> "A composition of two files in a single arrangement endorsed by a TRS that enforces no policies" [label="rdfs#comment"]; - trs [fillcolor="#fdccac", - shape=box, - style="filled, rounded"]; - "tro/1" -> trs [label="trov#wasAssembledBy"]; - tsa [fillcolor="#fdccac", - shape=box, - style="filled, rounded"]; - "tro/1" -> tsa [label="trov#wasTimestampedBy"]; - "trov#TrustedResearchSystem" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - trs -> "trov#TrustedResearchSystem" [label="rdf#type"]; - "TRS that enforces no policies" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - trs -> "TRS that enforces no policies" [label="rdfs#comment"]; - "-----BEGIN PGP PUBLIC KEY BLOCK----- -mI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f -PFa62W7k1CWEm7KLcOO5hlmMvI+\ -GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6 -TbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0 -HXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+\ -iM4EEwEKADgWIQQS8oDdaGyb -HbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK -CRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+\ -CknyQ3yV/fpEU+IH2T6qS -xrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N -IsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+\ -1An5ogCOACg== -=vuaX ------END PGP PUBLIC KEY BLOCK----- -" [fillcolor="#cbd5e8", - shape=box, - style="filled, rounded"]; - trs -> "-----BEGIN PGP PUBLIC KEY BLOCK----- -mI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f -PFa62W7k1CWEm7KLcOO5hlmMvI+\ -GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6 -TbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0 -HXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+\ -iM4EEwEKADgWIQQS8oDdaGyb -HbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK -CRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+\ -CknyQ3yV/fpEU+IH2T6qS -xrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N -IsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+\ -1An5ogCOACg== -=vuaX ------END PGP PUBLIC KEY BLOCK----- -" [label="trov#publicKey"]; - "trs.pk2" [fillcolor="#cbd5e8", - shape=box, - style="filled, rounded"]; - trs -> "trs.pk2" [label="trov#publicKey"]; - "More than 1 values on ->trov:publicKey" [fillcolor="#fdccac", - shape=box, - style="filled, rounded, dashed"]; - trs -> "More than 1 values on ->trov:publicKey" [label=ErrorMsg, - style=dashed]; - tsa -> "-----BEGIN PGP PUBLIC KEY BLOCK----- -mI0EZDYvLQEEALgKOwntOmQquijOSnnOOHYAEMKwIO//Ukogb8ftzIBGZ6PSSI9f -PFa62W7k1CWEm7KLcOO5hlmMvI+\ -GJLnLa4y60wxcKEq26Hi/r9SPO2HbjJMo9vy6 -TbwSndwn148wKzpfSH4dt3v5xJJ5ty0nz2k3cKsKxuOV/X23R0GotxUtABEBAAG0 -HXJlcHJvIHVzZXIgPHJlcHJvQHJlcHJvcy5kZXY+\ -iM4EEwEKADgWIQQS8oDdaGyb -HbIUMG5hkHOSVXRlzAUCZDYvLQIbLwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK -CRBhkHOSVXRlzJeoA/40RSsS88t6zXgBmHZDXyV9d5+\ -CknyQ3yV/fpEU+IH2T6qS -xrj9JZ8wIk4K2yntksmNOioztGyzTwrZlf6Gd/xo0U26ptKgxppBQZV/Wbzjpo1N -IsGEo6zUxyfInIxL/nnAlktGhl9B8teoyqwmMCP8bmrUiLSeex+\ -1An5ogCOACg== -=vuaX ------END PGP PUBLIC KEY BLOCK----- -" [label="trov#publicKey"]; - "trov#TimeStampingAuthority" [fillcolor="#b3e2cd", - shape=box, - style="filled, rounded"]; - tsa -> "trov#TimeStampingAuthority" [label="rdf#type"]; - "tsa.pk2" [fillcolor="#cbd5e8", - shape=box, - style="filled, rounded"]; - tsa -> "tsa.pk2" [label="trov#publicKey"]; - "More than 1 values on ->trov:publicKey" [fillcolor="#fdccac", - shape=box, - style="filled, rounded, dashed"]; - tsa -> "More than 1 values on ->trov:publicKey" [label=ErrorMsg, - style=dashed]; -} diff --git a/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro3.png b/demo/02-explorations/12-validate-jsonld/06-test-tro-wrong-cases/products/tro3.png deleted file mode 100644 index a807538cade620ca05969371e65dde9561d83a01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 391915 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°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�+YmYQ#&VW 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