eyeling 1.13.2 → 1.13.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/HANDBOOK.md +2 -0
- package/examples/allen-interval-calculus.n3 +180 -0
- package/examples/deck/odrl-dpv-risk-ranked.md +251 -0
- package/examples/dining-philosophers.n3 +383 -0
- package/examples/input/annotation.ttl +3 -1
- package/examples/input/reifies.ttl +2 -0
- package/examples/input/triple-term.ttl +3 -2
- package/examples/kaprekar.n3 +205 -0
- package/examples/odrl-dpv-ehds-risk-ranked.n3 +473 -0
- package/examples/odrl-dpv-healthcare-risk-ranked.n3 +575 -0
- package/examples/odrl-dpv-risk-ranked.n3 +30 -31
- package/examples/output/allen-interval-calculus.n3 +157 -0
- package/examples/output/dining-philosophers.n3 +808 -0
- package/examples/output/kaprekar.n3 +9992 -0
- package/examples/output/odrl-dpv-ehds-risk-ranked.n3 +144 -0
- package/examples/output/odrl-dpv-healthcare-risk-ranked.n3 +117 -0
- package/examples/output/odrl-dpv-risk-ranked.n3 +70 -6
- package/examples/output/wind-turbine.n3 +6 -0
- package/examples/reifies.n3 +1 -2
- package/examples/triple-term.n3 +3 -3
- package/examples/wind-turbine.n3 +63 -0
- package/eyeling.js +7 -2
- package/lib/cli.js +4 -1
- package/lib/engine.js +3 -1
- package/package.json +1 -1
- package/test/api.test.js +11 -0
- package/tools/n3gen.js +36 -7
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
@prefix : <https://example.org/odrl-dpv-ehds-risk-ranked#> .
|
|
2
|
+
@prefix dct: <http://purl.org/dc/terms/> .
|
|
3
|
+
@prefix dpv: <https://w3id.org/dpv#> .
|
|
4
|
+
@prefix eu-dga: <https://w3id.org/dpv/legal/eu/dga#> .
|
|
5
|
+
@prefix eu-ehds: <https://w3id.org/dpv/legal/eu/ehds#> .
|
|
6
|
+
@prefix genid: <https://eyereasoner.github.io/.well-known/genid/> .
|
|
7
|
+
@prefix log: <http://www.w3.org/2000/10/swap/log#> .
|
|
8
|
+
@prefix odrl: <http://www.w3.org/ns/odrl/2/> .
|
|
9
|
+
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
|
10
|
+
@prefix risk: <https://w3id.org/dpv/risk#> .
|
|
11
|
+
|
|
12
|
+
genid:b4170cf8-6d12-05e6-0d62-0f4c42cbb77c a risk:RiskSource .
|
|
13
|
+
genid:b4170cf8-6d12-05e6-0d62-0f4c42cbb77c a risk:LegalComplianceRisk .
|
|
14
|
+
genid:b4170cf8-6d12-05e6-0d62-0f4c42cbb77c dct:source :PermSecondaryUseDUA .
|
|
15
|
+
genid:b4170cf8-6d12-05e6-0d62-0f4c42cbb77c dct:description "Secondary use permitted without EHDS Data Permit." .
|
|
16
|
+
genid:8b6d63fe-3aba-fc8c-d435-107b8d2d437c a dpv:Risk .
|
|
17
|
+
genid:8b6d63fe-3aba-fc8c-d435-107b8d2d437c a risk:PolicyRisk .
|
|
18
|
+
genid:8b6d63fe-3aba-fc8c-d435-107b8d2d437c dct:source :PermSecondaryUseDUA .
|
|
19
|
+
genid:8b6d63fe-3aba-fc8c-d435-107b8d2d437c risk:hasRiskSource genid:b4170cf8-6d12-05e6-0d62-0f4c42cbb77c .
|
|
20
|
+
genid:8b6d63fe-3aba-fc8c-d435-107b8d2d437c dpv:hasConsequence risk:CustomerConfidenceLoss .
|
|
21
|
+
genid:8b6d63fe-3aba-fc8c-d435-107b8d2d437c dpv:hasImpact risk:FinancialLoss .
|
|
22
|
+
genid:8b6d63fe-3aba-fc8c-d435-107b8d2d437c dpv:hasImpact risk:NonMaterialDamage .
|
|
23
|
+
genid:8b6d63fe-3aba-fc8c-d435-107b8d2d437c :aboutClause :ClauseH1 .
|
|
24
|
+
genid:8b6d63fe-3aba-fc8c-d435-107b8d2d437c :scoreRaw 100 .
|
|
25
|
+
genid:8b6d63fe-3aba-fc8c-d435-107b8d2d437c :violatesNeed :Need_RequireDataPermit .
|
|
26
|
+
genid:8b6d63fe-3aba-fc8c-d435-107b8d2d437c dct:description "Risk: secondary use is permitted without an EHDS Data Permit safeguard. Clause H1: Hospital may provide electronic health data for secondary use based on a bilateral data use agreement with the applicant." .
|
|
27
|
+
:ProcessContext1 dpv:hasRisk genid:8b6d63fe-3aba-fc8c-d435-107b8d2d437c .
|
|
28
|
+
genid:89664258-fefa-8d30-6eb9-72e87d93d99c a dpv:RiskMitigationMeasure .
|
|
29
|
+
genid:89664258-fefa-8d30-6eb9-72e87d93d99c dct:description "Require an EHDS Data Permit (eu-ehds:DataPermit) issued by a Health Data Access Body prior to secondary use." .
|
|
30
|
+
genid:89664258-fefa-8d30-6eb9-72e87d93d99c dpv:mitigatesRisk genid:8b6d63fe-3aba-fc8c-d435-107b8d2d437c .
|
|
31
|
+
genid:89664258-fefa-8d30-6eb9-72e87d93d99c :suggestAdd {
|
|
32
|
+
:PermSecondaryUseDUA odrl:constraint _:sk_0 .
|
|
33
|
+
_:sk_0 a odrl:Constraint .
|
|
34
|
+
_:sk_0 odrl:leftOperand :hasDataPermit .
|
|
35
|
+
_:sk_0 odrl:operator odrl:eq .
|
|
36
|
+
_:sk_0 odrl:rightOperand true .
|
|
37
|
+
:PermitExample a eu-ehds:DataPermit .
|
|
38
|
+
:PermitExample dct:description "Example placeholder for an issued data permit." .
|
|
39
|
+
} .
|
|
40
|
+
genid:8b6d63fe-3aba-fc8c-d435-107b8d2d437c dpv:isMitigatedByMeasure genid:89664258-fefa-8d30-6eb9-72e87d93d99c .
|
|
41
|
+
genid:884e4487-8c4b-8810-90c0-17a495889b30 a risk:RiskSource .
|
|
42
|
+
genid:884e4487-8c4b-8810-90c0-17a495889b30 a risk:LegalComplianceRisk .
|
|
43
|
+
genid:884e4487-8c4b-8810-90c0-17a495889b30 dct:source :PermSecondaryUseAllPatients .
|
|
44
|
+
genid:884e4487-8c4b-8810-90c0-17a495889b30 dct:description "Opt-out from secondary use not explicitly respected." .
|
|
45
|
+
genid:e8c966b0-9c81-ff94-18b1-21d486bac44c a dpv:Risk .
|
|
46
|
+
genid:e8c966b0-9c81-ff94-18b1-21d486bac44c a risk:PolicyRisk .
|
|
47
|
+
genid:e8c966b0-9c81-ff94-18b1-21d486bac44c a risk:UnwantedDisclosureData .
|
|
48
|
+
genid:e8c966b0-9c81-ff94-18b1-21d486bac44c dct:source :PermSecondaryUseAllPatients .
|
|
49
|
+
genid:e8c966b0-9c81-ff94-18b1-21d486bac44c risk:hasRiskSource genid:884e4487-8c4b-8810-90c0-17a495889b30 .
|
|
50
|
+
genid:e8c966b0-9c81-ff94-18b1-21d486bac44c dpv:hasConsequence risk:CustomerConfidenceLoss .
|
|
51
|
+
genid:e8c966b0-9c81-ff94-18b1-21d486bac44c dpv:hasImpact risk:NonMaterialDamage .
|
|
52
|
+
genid:e8c966b0-9c81-ff94-18b1-21d486bac44c :aboutClause :ClauseH2 .
|
|
53
|
+
genid:e8c966b0-9c81-ff94-18b1-21d486bac44c :scoreRaw 100 .
|
|
54
|
+
genid:e8c966b0-9c81-ff94-18b1-21d486bac44c :violatesNeed :Need_RespectOptOutSecondaryUse .
|
|
55
|
+
genid:e8c966b0-9c81-ff94-18b1-21d486bac44c dct:description "Risk: secondary use may include patients who opted out (EHDS A71). Clause H2: Secondary use may include all patient records for training and evaluating health-related algorithms." .
|
|
56
|
+
:ProcessContext1 dpv:hasRisk genid:e8c966b0-9c81-ff94-18b1-21d486bac44c .
|
|
57
|
+
genid:3679a190-523c-9332-6005-4e14ea5e6e88 a dpv:RiskMitigationMeasure .
|
|
58
|
+
genid:3679a190-523c-9332-6005-4e14ea5e6e88 dct:description "Add an explicit safeguard to exclude records of persons who exercised the EHDS opt-out from secondary use (A71)." .
|
|
59
|
+
genid:3679a190-523c-9332-6005-4e14ea5e6e88 dpv:mitigatesRisk genid:e8c966b0-9c81-ff94-18b1-21d486bac44c .
|
|
60
|
+
genid:3679a190-523c-9332-6005-4e14ea5e6e88 :suggestAdd {
|
|
61
|
+
:PermSecondaryUseAllPatients odrl:constraint _:sk_1 .
|
|
62
|
+
_:sk_1 a odrl:Constraint .
|
|
63
|
+
_:sk_1 odrl:leftOperand :respectOptOutSecondaryUse .
|
|
64
|
+
_:sk_1 odrl:operator odrl:eq .
|
|
65
|
+
_:sk_1 odrl:rightOperand true .
|
|
66
|
+
} .
|
|
67
|
+
genid:e8c966b0-9c81-ff94-18b1-21d486bac44c dpv:isMitigatedByMeasure genid:3679a190-523c-9332-6005-4e14ea5e6e88 .
|
|
68
|
+
genid:72ae1018-4dcd-392a-9bbf-c080b5d038b0 a risk:RiskSource .
|
|
69
|
+
genid:72ae1018-4dcd-392a-9bbf-c080b5d038b0 a risk:PolicyRisk .
|
|
70
|
+
genid:72ae1018-4dcd-392a-9bbf-c080b5d038b0 dct:source :PermDownloadLocalCopy .
|
|
71
|
+
genid:72ae1018-4dcd-392a-9bbf-c080b5d038b0 dct:description "Local download permitted; secure processing environment not required." .
|
|
72
|
+
genid:8d3275f0-67e6-28c8-79c4-9e8012d185f4 a dpv:Risk .
|
|
73
|
+
genid:8d3275f0-67e6-28c8-79c4-9e8012d185f4 a risk:UnwantedDisclosureData .
|
|
74
|
+
genid:8d3275f0-67e6-28c8-79c4-9e8012d185f4 dct:source :PermDownloadLocalCopy .
|
|
75
|
+
genid:8d3275f0-67e6-28c8-79c4-9e8012d185f4 risk:hasRiskSource genid:72ae1018-4dcd-392a-9bbf-c080b5d038b0 .
|
|
76
|
+
genid:8d3275f0-67e6-28c8-79c4-9e8012d185f4 dpv:hasConsequence risk:CustomerConfidenceLoss .
|
|
77
|
+
genid:8d3275f0-67e6-28c8-79c4-9e8012d185f4 dpv:hasImpact risk:FinancialLoss .
|
|
78
|
+
genid:8d3275f0-67e6-28c8-79c4-9e8012d185f4 dpv:hasImpact risk:NonMaterialDamage .
|
|
79
|
+
genid:8d3275f0-67e6-28c8-79c4-9e8012d185f4 :aboutClause :ClauseH3 .
|
|
80
|
+
genid:8d3275f0-67e6-28c8-79c4-9e8012d185f4 :scoreRaw 88 .
|
|
81
|
+
genid:8d3275f0-67e6-28c8-79c4-9e8012d185f4 :violatesNeed :Need_SecureProcessingEnvironment .
|
|
82
|
+
genid:8d3275f0-67e6-28c8-79c4-9e8012d185f4 dct:description "Risk: the agreement permits local downloads rather than processing within a secure processing environment. Clause H3: The applicant may download a complete local copy of the dataset to its own infrastructure for analysis." .
|
|
83
|
+
:ProcessContext1 dpv:hasRisk genid:8d3275f0-67e6-28c8-79c4-9e8012d185f4 .
|
|
84
|
+
genid:c516de60-83e5-b4b8-2de8-c5b4edf763b0 a dpv:RiskMitigationMeasure .
|
|
85
|
+
genid:c516de60-83e5-b4b8-2de8-c5b4edf763b0 dct:description "Require processing only within a secure processing environment (e.g., eu-dga:SecureProcessingEnvironment), and prohibit local downloads of raw datasets." .
|
|
86
|
+
genid:c516de60-83e5-b4b8-2de8-c5b4edf763b0 dpv:mitigatesRisk genid:8d3275f0-67e6-28c8-79c4-9e8012d185f4 .
|
|
87
|
+
genid:c516de60-83e5-b4b8-2de8-c5b4edf763b0 :suggestAdd {
|
|
88
|
+
:ProhibitDownloadLocalCopy a odrl:Prohibition .
|
|
89
|
+
:ProhibitDownloadLocalCopy odrl:assigner :HospitalA .
|
|
90
|
+
:ProhibitDownloadLocalCopy odrl:assignee :UniLab .
|
|
91
|
+
:ProhibitDownloadLocalCopy odrl:action :download .
|
|
92
|
+
:ProhibitDownloadLocalCopy odrl:target :Dataset1 .
|
|
93
|
+
:ProhibitDownloadLocalCopy :clause :ClauseH3 .
|
|
94
|
+
:ProcessContext1 dpv:hasTechnicalOrganisationalMeasure eu-dga:SecureProcessingEnvironment .
|
|
95
|
+
} .
|
|
96
|
+
genid:8d3275f0-67e6-28c8-79c4-9e8012d185f4 dpv:isMitigatedByMeasure genid:c516de60-83e5-b4b8-2de8-c5b4edf763b0 .
|
|
97
|
+
genid:d31b6ae0-cb02-39e0-1fa0-86946b7e44c0 a risk:RiskSource .
|
|
98
|
+
genid:d31b6ae0-cb02-39e0-1fa0-86946b7e44c0 a risk:PolicyRisk .
|
|
99
|
+
genid:d31b6ae0-cb02-39e0-1fa0-86946b7e44c0 dct:source :PermProvidePseudonymisedData .
|
|
100
|
+
genid:d31b6ae0-cb02-39e0-1fa0-86946b7e44c0 dct:description "Statistical anonymisation safeguard missing for secondary use." .
|
|
101
|
+
genid:315f48bc-4e89-b706-ef07-dc88e29c5050 a dpv:Risk .
|
|
102
|
+
genid:315f48bc-4e89-b706-ef07-dc88e29c5050 a risk:UnwantedDisclosureData .
|
|
103
|
+
genid:315f48bc-4e89-b706-ef07-dc88e29c5050 dct:source :PermProvidePseudonymisedData .
|
|
104
|
+
genid:315f48bc-4e89-b706-ef07-dc88e29c5050 risk:hasRiskSource genid:d31b6ae0-cb02-39e0-1fa0-86946b7e44c0 .
|
|
105
|
+
genid:315f48bc-4e89-b706-ef07-dc88e29c5050 dpv:hasConsequence risk:CustomerConfidenceLoss .
|
|
106
|
+
genid:315f48bc-4e89-b706-ef07-dc88e29c5050 dpv:hasImpact risk:NonMaterialDamage .
|
|
107
|
+
genid:315f48bc-4e89-b706-ef07-dc88e29c5050 :aboutClause :ClauseH4 .
|
|
108
|
+
genid:315f48bc-4e89-b706-ef07-dc88e29c5050 :scoreRaw 80 .
|
|
109
|
+
genid:315f48bc-4e89-b706-ef07-dc88e29c5050 :violatesNeed :Need_StatisticallyAnonymisedSecondaryUse .
|
|
110
|
+
genid:315f48bc-4e89-b706-ef07-dc88e29c5050 dct:description "Risk: secondary-use dataset is only described as pseudonymised, without a safeguard requiring statistically anonymised data for secondary use. Clause H4: The dataset will be provided in pseudonymised form by removing direct identifiers." .
|
|
111
|
+
:ProcessContext1 dpv:hasRisk genid:315f48bc-4e89-b706-ef07-dc88e29c5050 .
|
|
112
|
+
genid:09f44e28-35fe-53c0-2b73-d8f51a1d4f24 a dpv:RiskMitigationMeasure .
|
|
113
|
+
genid:09f44e28-35fe-53c0-2b73-d8f51a1d4f24 dct:description "Require an EHDS Health Data Request for statistically anonymised data (eu-ehds:HealthDataRequest), and add a constraint that secondary-use data must be statistically anonymised." .
|
|
114
|
+
genid:09f44e28-35fe-53c0-2b73-d8f51a1d4f24 dpv:mitigatesRisk genid:315f48bc-4e89-b706-ef07-dc88e29c5050 .
|
|
115
|
+
genid:09f44e28-35fe-53c0-2b73-d8f51a1d4f24 :suggestAdd {
|
|
116
|
+
:PermProvidePseudonymisedData odrl:constraint _:sk_2 .
|
|
117
|
+
_:sk_2 a odrl:Constraint .
|
|
118
|
+
_:sk_2 odrl:leftOperand :statisticallyAnonymised .
|
|
119
|
+
_:sk_2 odrl:operator odrl:eq .
|
|
120
|
+
_:sk_2 odrl:rightOperand true .
|
|
121
|
+
:ProcessContext1 dpv:hasOrganisationalMeasure eu-ehds:HealthDataRequest .
|
|
122
|
+
} .
|
|
123
|
+
genid:315f48bc-4e89-b706-ef07-dc88e29c5050 dpv:isMitigatedByMeasure genid:09f44e28-35fe-53c0-2b73-d8f51a1d4f24 .
|
|
124
|
+
genid:8b6d63fe-3aba-fc8c-d435-107b8d2d437c :score 100 .
|
|
125
|
+
genid:e8c966b0-9c81-ff94-18b1-21d486bac44c :score 100 .
|
|
126
|
+
genid:8d3275f0-67e6-28c8-79c4-9e8012d185f4 :score 88 .
|
|
127
|
+
genid:315f48bc-4e89-b706-ef07-dc88e29c5050 :score 80 .
|
|
128
|
+
genid:8b6d63fe-3aba-fc8c-d435-107b8d2d437c dpv:hasSeverity risk:HighSeverity .
|
|
129
|
+
genid:8b6d63fe-3aba-fc8c-d435-107b8d2d437c dpv:hasRiskLevel risk:HighRisk .
|
|
130
|
+
genid:e8c966b0-9c81-ff94-18b1-21d486bac44c dpv:hasSeverity risk:HighSeverity .
|
|
131
|
+
genid:e8c966b0-9c81-ff94-18b1-21d486bac44c dpv:hasRiskLevel risk:HighRisk .
|
|
132
|
+
genid:8d3275f0-67e6-28c8-79c4-9e8012d185f4 dpv:hasSeverity risk:HighSeverity .
|
|
133
|
+
genid:8d3275f0-67e6-28c8-79c4-9e8012d185f4 dpv:hasRiskLevel risk:HighRisk .
|
|
134
|
+
genid:315f48bc-4e89-b706-ef07-dc88e29c5050 dpv:hasSeverity risk:HighSeverity .
|
|
135
|
+
genid:315f48bc-4e89-b706-ef07-dc88e29c5050 dpv:hasRiskLevel risk:HighRisk .
|
|
136
|
+
(:AgreementEHDS1 :PatientProfileExample 0) log:outputString "\n=== Ranked DPV Risk Report (EHDS-aligned) ===\nAgreement: EHDS Secondary Use Agreement (example)\nProfile: Example patient profile (EHDS rights expectations)\n\n" .
|
|
137
|
+
(:AgreementEHDS1 :PatientProfileExample 1 900 "H1" 0 genid:8b6d63fe-3aba-fc8c-d435-107b8d2d437c) log:outputString "score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H1\n Risk: secondary use is permitted without an EHDS Data Permit safeguard. Clause H1: Hospital may provide electronic health data for secondary use based on a bilateral data use agreement with the applicant.\n\n" .
|
|
138
|
+
(:AgreementEHDS1 :PatientProfileExample 1 900 "H2" 0 genid:e8c966b0-9c81-ff94-18b1-21d486bac44c) log:outputString "score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H2\n Risk: secondary use may include patients who opted out (EHDS A71). Clause H2: Secondary use may include all patient records for training and evaluating health-related algorithms.\n\n" .
|
|
139
|
+
(:AgreementEHDS1 :PatientProfileExample 1 912 "H3" 0 genid:8d3275f0-67e6-28c8-79c4-9e8012d185f4) log:outputString "score=88 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H3\n Risk: the agreement permits local downloads rather than processing within a secure processing environment. Clause H3: The applicant may download a complete local copy of the dataset to its own infrastructure for analysis.\n\n" .
|
|
140
|
+
(:AgreementEHDS1 :PatientProfileExample 1 920 "H4" 0 genid:315f48bc-4e89-b706-ef07-dc88e29c5050) log:outputString "score=80 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H4\n Risk: secondary-use dataset is only described as pseudonymised, without a safeguard requiring statistically anonymised data for secondary use. Clause H4: The dataset will be provided in pseudonymised form by removing direct identifiers.\n\n" .
|
|
141
|
+
(:AgreementEHDS1 :PatientProfileExample 1 900 "H1" 1 genid:8b6d63fe-3aba-fc8c-d435-107b8d2d437c genid:89664258-fefa-8d30-6eb9-72e87d93d99c) log:outputString " - mitigation for clause H1: Require an EHDS Data Permit (eu-ehds:DataPermit) issued by a Health Data Access Body prior to secondary use.\n" .
|
|
142
|
+
(:AgreementEHDS1 :PatientProfileExample 1 900 "H2" 1 genid:e8c966b0-9c81-ff94-18b1-21d486bac44c genid:3679a190-523c-9332-6005-4e14ea5e6e88) log:outputString " - mitigation for clause H2: Add an explicit safeguard to exclude records of persons who exercised the EHDS opt-out from secondary use (A71).\n" .
|
|
143
|
+
(:AgreementEHDS1 :PatientProfileExample 1 912 "H3" 1 genid:8d3275f0-67e6-28c8-79c4-9e8012d185f4 genid:c516de60-83e5-b4b8-2de8-c5b4edf763b0) log:outputString " - mitigation for clause H3: Require processing only within a secure processing environment (e.g., eu-dga:SecureProcessingEnvironment), and prohibit local downloads of raw datasets.\n" .
|
|
144
|
+
(:AgreementEHDS1 :PatientProfileExample 1 920 "H4" 1 genid:315f48bc-4e89-b706-ef07-dc88e29c5050 genid:09f44e28-35fe-53c0-2b73-d8f51a1d4f24) log:outputString " - mitigation for clause H4: Require an EHDS Health Data Request for statistically anonymised data (eu-ehds:HealthDataRequest), and add a constraint that secondary-use data must be statistically anonymised.\n" .
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
@prefix : <https://example.org/odrl-dpv-healthcare-risk-ranked#> .
|
|
2
|
+
@prefix dct: <http://purl.org/dc/terms/> .
|
|
3
|
+
@prefix dpv: <https://w3id.org/dpv#> .
|
|
4
|
+
@prefix genid: <https://eyereasoner.github.io/.well-known/genid/> .
|
|
5
|
+
@prefix log: <http://www.w3.org/2000/10/swap/log#> .
|
|
6
|
+
@prefix odrl: <http://www.w3.org/ns/odrl/2/> .
|
|
7
|
+
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
|
8
|
+
@prefix risk: <https://w3id.org/dpv/risk#> .
|
|
9
|
+
|
|
10
|
+
genid:499c8c88-3ef3-7ae0-932f-c74cf4fb20f4 a risk:RiskSource .
|
|
11
|
+
genid:499c8c88-3ef3-7ae0-932f-c74cf4fb20f4 a risk:LegalComplianceRisk .
|
|
12
|
+
genid:499c8c88-3ef3-7ae0-932f-c74cf4fb20f4 dct:source :PermResearchUse .
|
|
13
|
+
genid:499c8c88-3ef3-7ae0-932f-c74cf4fb20f4 dct:description "Research use permitted without explicit consent constraint." .
|
|
14
|
+
genid:6e6083d0-be14-5284-ce15-b2f04cc273c8 a dpv:Risk .
|
|
15
|
+
genid:6e6083d0-be14-5284-ce15-b2f04cc273c8 a risk:PolicyRisk .
|
|
16
|
+
genid:6e6083d0-be14-5284-ce15-b2f04cc273c8 a risk:CustomerConfidenceLoss .
|
|
17
|
+
genid:6e6083d0-be14-5284-ce15-b2f04cc273c8 dct:source :PermResearchUse .
|
|
18
|
+
genid:6e6083d0-be14-5284-ce15-b2f04cc273c8 risk:hasRiskSource genid:499c8c88-3ef3-7ae0-932f-c74cf4fb20f4 .
|
|
19
|
+
genid:6e6083d0-be14-5284-ce15-b2f04cc273c8 dpv:hasConsequence risk:CustomerConfidenceLoss .
|
|
20
|
+
genid:6e6083d0-be14-5284-ce15-b2f04cc273c8 dpv:hasImpact risk:NonMaterialDamage .
|
|
21
|
+
genid:6e6083d0-be14-5284-ce15-b2f04cc273c8 dpv:hasImpact risk:FinancialLoss .
|
|
22
|
+
genid:6e6083d0-be14-5284-ce15-b2f04cc273c8 :aboutClause :ClauseH1 .
|
|
23
|
+
genid:6e6083d0-be14-5284-ce15-b2f04cc273c8 :scoreRaw 120 .
|
|
24
|
+
genid:6e6083d0-be14-5284-ce15-b2f04cc273c8 :violatesNeed :Need_ConsentForResearch .
|
|
25
|
+
genid:6e6083d0-be14-5284-ce15-b2f04cc273c8 dct:description "Risk: health/genomic data may be used for research without explicit opt-in consent. Clause H1: Hospital may use EHR and genomic data for internal clinical research and publication." .
|
|
26
|
+
:ProcessContextHC1 dpv:hasRisk genid:6e6083d0-be14-5284-ce15-b2f04cc273c8 .
|
|
27
|
+
genid:d8249b0c-66d8-73a8-c1d0-8c7c5256b338 a dpv:RiskMitigationMeasure .
|
|
28
|
+
genid:d8249b0c-66d8-73a8-c1d0-8c7c5256b338 dct:description "Add an explicit consent constraint for secondary research use." .
|
|
29
|
+
genid:d8249b0c-66d8-73a8-c1d0-8c7c5256b338 dpv:mitigatesRisk genid:6e6083d0-be14-5284-ce15-b2f04cc273c8 .
|
|
30
|
+
genid:d8249b0c-66d8-73a8-c1d0-8c7c5256b338 :suggestAdd {
|
|
31
|
+
:PermResearchUse odrl:constraint _:sk_0 .
|
|
32
|
+
_:sk_0 a odrl:Constraint .
|
|
33
|
+
_:sk_0 odrl:leftOperand :explicitConsent .
|
|
34
|
+
_:sk_0 odrl:operator odrl:eq .
|
|
35
|
+
_:sk_0 odrl:rightOperand true .
|
|
36
|
+
} .
|
|
37
|
+
genid:6e6083d0-be14-5284-ce15-b2f04cc273c8 dpv:isMitigatedByMeasure genid:d8249b0c-66d8-73a8-c1d0-8c7c5256b338 .
|
|
38
|
+
genid:3c85dd80-8e33-c0fa-8b1c-89f4c16ca4cc a risk:RiskSource .
|
|
39
|
+
genid:3c85dd80-8e33-c0fa-8b1c-89f4c16ca4cc a risk:LegalComplianceRisk .
|
|
40
|
+
genid:3c85dd80-8e33-c0fa-8b1c-89f4c16ca4cc dct:source :PermShareWithPharma .
|
|
41
|
+
genid:3c85dd80-8e33-c0fa-8b1c-89f4c16ca4cc dct:description "External sharing permitted without de-identification/pseudonymisation requirement." .
|
|
42
|
+
genid:b9e2eab8-2d4b-c4a4-50ea-6468777be280 a dpv:Risk .
|
|
43
|
+
genid:b9e2eab8-2d4b-c4a4-50ea-6468777be280 a risk:UnwantedDisclosureData .
|
|
44
|
+
genid:b9e2eab8-2d4b-c4a4-50ea-6468777be280 a risk:ReputationalRisk .
|
|
45
|
+
genid:b9e2eab8-2d4b-c4a4-50ea-6468777be280 dct:source :PermShareWithPharma .
|
|
46
|
+
genid:b9e2eab8-2d4b-c4a4-50ea-6468777be280 risk:hasRiskSource genid:3c85dd80-8e33-c0fa-8b1c-89f4c16ca4cc .
|
|
47
|
+
genid:b9e2eab8-2d4b-c4a4-50ea-6468777be280 dpv:hasConsequence risk:CustomerConfidenceLoss .
|
|
48
|
+
genid:b9e2eab8-2d4b-c4a4-50ea-6468777be280 dpv:hasImpact risk:NonMaterialDamage .
|
|
49
|
+
genid:b9e2eab8-2d4b-c4a4-50ea-6468777be280 dpv:hasImpact risk:FinancialLoss .
|
|
50
|
+
genid:b9e2eab8-2d4b-c4a4-50ea-6468777be280 dpv:hasImpact risk:Discrimination .
|
|
51
|
+
genid:b9e2eab8-2d4b-c4a4-50ea-6468777be280 :aboutClause :ClauseH2 .
|
|
52
|
+
genid:b9e2eab8-2d4b-c4a4-50ea-6468777be280 :scoreRaw 125 .
|
|
53
|
+
genid:b9e2eab8-2d4b-c4a4-50ea-6468777be280 :violatesNeed :Need_DeIdentifyBeforeSharing .
|
|
54
|
+
genid:b9e2eab8-2d4b-c4a4-50ea-6468777be280 dct:description "Risk: genomic data may be shared with external pharma partners without a de-identification/pseudonymisation requirement. Clause H2: Hospital may share genomic data with pharmaceutical partners for drug discovery and R&D." .
|
|
55
|
+
:ProcessContextHC1 dpv:hasRisk genid:b9e2eab8-2d4b-c4a4-50ea-6468777be280 .
|
|
56
|
+
genid:be734cc0-bf89-eac8-fa57-8bfba350cb64 a dpv:RiskMitigationMeasure .
|
|
57
|
+
genid:be734cc0-bf89-eac8-fa57-8bfba350cb64 dct:description "Require de-identification/pseudonymisation before external sharing of genomic data." .
|
|
58
|
+
genid:be734cc0-bf89-eac8-fa57-8bfba350cb64 dpv:mitigatesRisk genid:b9e2eab8-2d4b-c4a4-50ea-6468777be280 .
|
|
59
|
+
genid:be734cc0-bf89-eac8-fa57-8bfba350cb64 :suggestAdd {
|
|
60
|
+
:PermShareWithPharma odrl:constraint _:sk_1 .
|
|
61
|
+
_:sk_1 a odrl:Constraint .
|
|
62
|
+
_:sk_1 odrl:leftOperand :deIdentified .
|
|
63
|
+
_:sk_1 odrl:operator odrl:eq .
|
|
64
|
+
_:sk_1 odrl:rightOperand true .
|
|
65
|
+
:PermShareWithPharma odrl:duty _:sk_2 .
|
|
66
|
+
_:sk_2 a odrl:Duty .
|
|
67
|
+
_:sk_2 odrl:action :deIdentify .
|
|
68
|
+
_:sk_2 odrl:constraint _:sk_3 .
|
|
69
|
+
_:sk_3 a odrl:Constraint .
|
|
70
|
+
_:sk_3 odrl:leftOperand :deIdentificationStandard .
|
|
71
|
+
_:sk_3 odrl:operator odrl:eq .
|
|
72
|
+
_:sk_3 odrl:rightOperand :StateOfTheArt .
|
|
73
|
+
} .
|
|
74
|
+
genid:b9e2eab8-2d4b-c4a4-50ea-6468777be280 dpv:isMitigatedByMeasure genid:be734cc0-bf89-eac8-fa57-8bfba350cb64 .
|
|
75
|
+
genid:fc8b3e87-761e-e430-a338-09d827d7d764 a risk:RiskSource .
|
|
76
|
+
genid:fc8b3e87-761e-e430-a338-09d827d7d764 a risk:PolicyRisk .
|
|
77
|
+
genid:fc8b3e87-761e-e430-a338-09d827d7d764 dct:source :PermRetention10y .
|
|
78
|
+
genid:fc8b3e87-761e-e430-a338-09d827d7d764 dct:description "Retention period exceeds patient preference." .
|
|
79
|
+
genid:e333f4ec-b543-e01c-ae40-fce8760f4fec a dpv:Risk .
|
|
80
|
+
genid:e333f4ec-b543-e01c-ae40-fce8760f4fec a risk:PolicyRisk .
|
|
81
|
+
genid:e333f4ec-b543-e01c-ae40-fce8760f4fec a risk:CustomerConfidenceLoss .
|
|
82
|
+
genid:e333f4ec-b543-e01c-ae40-fce8760f4fec dct:source :PermRetention10y .
|
|
83
|
+
genid:e333f4ec-b543-e01c-ae40-fce8760f4fec risk:hasRiskSource genid:fc8b3e87-761e-e430-a338-09d827d7d764 .
|
|
84
|
+
genid:e333f4ec-b543-e01c-ae40-fce8760f4fec dpv:hasConsequence risk:CustomerConfidenceLoss .
|
|
85
|
+
genid:e333f4ec-b543-e01c-ae40-fce8760f4fec dpv:hasImpact risk:NonMaterialDamage .
|
|
86
|
+
genid:e333f4ec-b543-e01c-ae40-fce8760f4fec :aboutClause :ClauseH4 .
|
|
87
|
+
genid:e333f4ec-b543-e01c-ae40-fce8760f4fec :scoreRaw 70 .
|
|
88
|
+
genid:e333f4ec-b543-e01c-ae40-fce8760f4fec :violatesNeed :Need_RetentionLimit3y .
|
|
89
|
+
genid:e333f4ec-b543-e01c-ae40-fce8760f4fec dct:description "Risk: retention (3650 days) exceeds patient preference (1095 days). Clause H4: Hospital retains patient health records for 10 years." .
|
|
90
|
+
:ProcessContextHC1 dpv:hasRisk genid:e333f4ec-b543-e01c-ae40-fce8760f4fec .
|
|
91
|
+
genid:4576211e-2495-d7a8-ebb0-5eb4707c9ce4 a dpv:RiskMitigationMeasure .
|
|
92
|
+
genid:4576211e-2495-d7a8-ebb0-5eb4707c9ce4 dct:description "Limit retention to 3 years (or document the legal obligation requiring longer retention)." .
|
|
93
|
+
genid:4576211e-2495-d7a8-ebb0-5eb4707c9ce4 dpv:mitigatesRisk genid:e333f4ec-b543-e01c-ae40-fce8760f4fec .
|
|
94
|
+
genid:4576211e-2495-d7a8-ebb0-5eb4707c9ce4 :suggestAdd {
|
|
95
|
+
:PermRetention10y odrl:constraint _:sk_4 .
|
|
96
|
+
_:sk_4 a odrl:Constraint .
|
|
97
|
+
_:sk_4 odrl:leftOperand :retentionDays .
|
|
98
|
+
_:sk_4 odrl:operator odrl:lteq .
|
|
99
|
+
_:sk_4 odrl:rightOperand 1095 .
|
|
100
|
+
} .
|
|
101
|
+
genid:e333f4ec-b543-e01c-ae40-fce8760f4fec dpv:isMitigatedByMeasure genid:4576211e-2495-d7a8-ebb0-5eb4707c9ce4 .
|
|
102
|
+
genid:6e6083d0-be14-5284-ce15-b2f04cc273c8 :score 100 .
|
|
103
|
+
genid:b9e2eab8-2d4b-c4a4-50ea-6468777be280 :score 100 .
|
|
104
|
+
genid:e333f4ec-b543-e01c-ae40-fce8760f4fec :score 70 .
|
|
105
|
+
genid:6e6083d0-be14-5284-ce15-b2f04cc273c8 dpv:hasSeverity risk:HighSeverity .
|
|
106
|
+
genid:6e6083d0-be14-5284-ce15-b2f04cc273c8 dpv:hasRiskLevel risk:HighRisk .
|
|
107
|
+
genid:b9e2eab8-2d4b-c4a4-50ea-6468777be280 dpv:hasSeverity risk:HighSeverity .
|
|
108
|
+
genid:b9e2eab8-2d4b-c4a4-50ea-6468777be280 dpv:hasRiskLevel risk:HighRisk .
|
|
109
|
+
genid:e333f4ec-b543-e01c-ae40-fce8760f4fec dpv:hasSeverity risk:ModerateSeverity .
|
|
110
|
+
genid:e333f4ec-b543-e01c-ae40-fce8760f4fec dpv:hasRiskLevel risk:ModerateRisk .
|
|
111
|
+
(:AgreementHC1 :PatientExample 0) log:outputString "\n=== Ranked DPV Risk Report (Healthcare & Life Sciences) ===\nAgreement: Example Healthcare & Life-Sciences Data Use Agreement\nProfile: Example patient profile\n\n" .
|
|
112
|
+
(:AgreementHC1 :PatientExample 1 900 "H1" 0 genid:6e6083d0-be14-5284-ce15-b2f04cc273c8) log:outputString "score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H1\n Risk: health/genomic data may be used for research without explicit opt-in consent. Clause H1: Hospital may use EHR and genomic data for internal clinical research and publication.\n\n" .
|
|
113
|
+
(:AgreementHC1 :PatientExample 1 900 "H2" 0 genid:b9e2eab8-2d4b-c4a4-50ea-6468777be280) log:outputString "score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H2\n Risk: genomic data may be shared with external pharma partners without a de-identification/pseudonymisation requirement. Clause H2: Hospital may share genomic data with pharmaceutical partners for drug discovery and R&D.\n\n" .
|
|
114
|
+
(:AgreementHC1 :PatientExample 1 930 "H4" 0 genid:e333f4ec-b543-e01c-ae40-fce8760f4fec) log:outputString "score=70 (https://w3id.org/dpv/risk#ModerateRisk, https://w3id.org/dpv/risk#ModerateSeverity) clause H4\n Risk: retention (3650 days) exceeds patient preference (1095 days). Clause H4: Hospital retains patient health records for 10 years.\n\n" .
|
|
115
|
+
(:AgreementHC1 :PatientExample 1 900 "H1" 1 genid:6e6083d0-be14-5284-ce15-b2f04cc273c8 genid:d8249b0c-66d8-73a8-c1d0-8c7c5256b338) log:outputString " - mitigation for clause H1: Add an explicit consent constraint for secondary research use.\n" .
|
|
116
|
+
(:AgreementHC1 :PatientExample 1 900 "H2" 1 genid:b9e2eab8-2d4b-c4a4-50ea-6468777be280 genid:be734cc0-bf89-eac8-fa57-8bfba350cb64) log:outputString " - mitigation for clause H2: Require de-identification/pseudonymisation before external sharing of genomic data.\n" .
|
|
117
|
+
(:AgreementHC1 :PatientExample 1 930 "H4" 1 genid:e333f4ec-b543-e01c-ae40-fce8760f4fec genid:4576211e-2495-d7a8-ebb0-5eb4707c9ce4) log:outputString " - mitigation for clause H4: Limit retention to 3 years (or document the legal obligation requiring longer retention).\n" .
|
|
@@ -3,8 +3,10 @@
|
|
|
3
3
|
@prefix dpv: <https://w3id.org/dpv#> .
|
|
4
4
|
@prefix genid: <https://eyereasoner.github.io/.well-known/genid/> .
|
|
5
5
|
@prefix log: <http://www.w3.org/2000/10/swap/log#> .
|
|
6
|
+
@prefix odrl: <http://www.w3.org/ns/odrl/2/> .
|
|
7
|
+
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
|
6
8
|
@prefix risk: <https://w3id.org/dpv/risk#> .
|
|
7
|
-
@prefix
|
|
9
|
+
@prefix tosl: <https://example.org/tosl-profile#> .
|
|
8
10
|
|
|
9
11
|
genid:1c780f80-9b90-f310-2ce9-2d829e5616d8 a risk:RiskSource .
|
|
10
12
|
genid:1c780f80-9b90-f310-2ce9-2d829e5616d8 a risk:LegalComplianceRisk .
|
|
@@ -27,6 +29,26 @@ genid:59bf9d7c-6868-401e-bb47-667826cd85bc :scoreRaw 110 .
|
|
|
27
29
|
genid:59bf9d7c-6868-401e-bb47-667826cd85bc :violatesNeed :Need_DataCannotBeRemoved .
|
|
28
30
|
genid:59bf9d7c-6868-401e-bb47-667826cd85bc dct:description "Risk: account/data removal is permitted without notice safeguards (no notice constraint and no duty to inform). Clause C1: Provider may remove the user account (and associated data) at its discretion." .
|
|
29
31
|
:ProcessContext1 dpv:hasRisk genid:59bf9d7c-6868-401e-bb47-667826cd85bc .
|
|
32
|
+
genid:f2f8e420-4979-6bb4-9d7a-724cdbeeeef4 a dpv:RiskMitigationMeasure .
|
|
33
|
+
genid:f2f8e420-4979-6bb4-9d7a-724cdbeeeef4 dct:description "Add a notice constraint (minimum noticeDays) before account removal." .
|
|
34
|
+
genid:f2f8e420-4979-6bb4-9d7a-724cdbeeeef4 dpv:mitigatesRisk genid:59bf9d7c-6868-401e-bb47-667826cd85bc .
|
|
35
|
+
genid:f2f8e420-4979-6bb4-9d7a-724cdbeeeef4 :suggestAdd {
|
|
36
|
+
:PermDeleteAccount odrl:constraint _:sk_0 .
|
|
37
|
+
_:sk_0 a odrl:Constraint .
|
|
38
|
+
_:sk_0 odrl:leftOperand tosl:noticeDays .
|
|
39
|
+
_:sk_0 odrl:operator odrl:gteq .
|
|
40
|
+
_:sk_0 odrl:rightOperand 14 .
|
|
41
|
+
} .
|
|
42
|
+
genid:4d551ac7-50e7-79bc-bbc6-d35022c24650 a dpv:RiskMitigationMeasure .
|
|
43
|
+
genid:4d551ac7-50e7-79bc-bbc6-d35022c24650 dct:description "Add a duty to inform the consumer prior to account removal." .
|
|
44
|
+
genid:4d551ac7-50e7-79bc-bbc6-d35022c24650 dpv:mitigatesRisk genid:59bf9d7c-6868-401e-bb47-667826cd85bc .
|
|
45
|
+
genid:4d551ac7-50e7-79bc-bbc6-d35022c24650 :suggestAdd {
|
|
46
|
+
:PermDeleteAccount odrl:duty _:sk_1 .
|
|
47
|
+
_:sk_1 a odrl:Duty .
|
|
48
|
+
_:sk_1 odrl:action odrl:inform .
|
|
49
|
+
} .
|
|
50
|
+
genid:59bf9d7c-6868-401e-bb47-667826cd85bc dpv:isMitigatedByMeasure genid:f2f8e420-4979-6bb4-9d7a-724cdbeeeef4 .
|
|
51
|
+
genid:59bf9d7c-6868-401e-bb47-667826cd85bc dpv:isMitigatedByMeasure genid:4d551ac7-50e7-79bc-bbc6-d35022c24650 .
|
|
30
52
|
genid:b00dbc9c-519f-4664-518c-32853c2cfabc a risk:RiskSource .
|
|
31
53
|
genid:b00dbc9c-519f-4664-518c-32853c2cfabc a risk:PolicyRisk .
|
|
32
54
|
genid:b00dbc9c-519f-4664-518c-32853c2cfabc dct:source :PermChangeTerms .
|
|
@@ -43,6 +65,20 @@ genid:423c1420-b028-620c-fcd2-78f08f0da0ca :scoreRaw 85 .
|
|
|
43
65
|
genid:423c1420-b028-620c-fcd2-78f08f0da0ca :violatesNeed :Need_ChangeOnlyWithPriorNotice .
|
|
44
66
|
genid:423c1420-b028-620c-fcd2-78f08f0da0ca dct:description "Risk: terms may change with notice (3 days) below consumer requirement (14 days). Clause C2: Provider may change terms by informing users at least 3 days in advance." .
|
|
45
67
|
:ProcessContext1 dpv:hasRisk genid:423c1420-b028-620c-fcd2-78f08f0da0ca .
|
|
68
|
+
genid:6eda9020-28eb-8740-c9c2-4d0139e1499c a dpv:RiskMitigationMeasure .
|
|
69
|
+
genid:6eda9020-28eb-8740-c9c2-4d0139e1499c dct:description "Increase minimum noticeDays in the inform duty to meet the consumer requirement." .
|
|
70
|
+
genid:6eda9020-28eb-8740-c9c2-4d0139e1499c dpv:mitigatesRisk genid:423c1420-b028-620c-fcd2-78f08f0da0ca .
|
|
71
|
+
genid:6eda9020-28eb-8740-c9c2-4d0139e1499c :suggestAdd {
|
|
72
|
+
:PermChangeTerms odrl:duty _:sk_2 .
|
|
73
|
+
_:sk_2 a odrl:Duty .
|
|
74
|
+
_:sk_2 odrl:action odrl:inform .
|
|
75
|
+
_:sk_2 odrl:constraint _:sk_3 .
|
|
76
|
+
_:sk_3 a odrl:Constraint .
|
|
77
|
+
_:sk_3 odrl:leftOperand tosl:noticeDays .
|
|
78
|
+
_:sk_3 odrl:operator odrl:gteq .
|
|
79
|
+
_:sk_3 odrl:rightOperand 14 .
|
|
80
|
+
} .
|
|
81
|
+
genid:423c1420-b028-620c-fcd2-78f08f0da0ca dpv:isMitigatedByMeasure genid:6eda9020-28eb-8740-c9c2-4d0139e1499c .
|
|
46
82
|
genid:e4304204-5fbc-1dc2-cb50-da7597604550 a risk:RiskSource .
|
|
47
83
|
genid:e4304204-5fbc-1dc2-cb50-da7597604550 a risk:PolicyRisk .
|
|
48
84
|
genid:e4304204-5fbc-1dc2-cb50-da7597604550 dct:source :PermShareData .
|
|
@@ -60,6 +96,17 @@ genid:dbffbd20-c09d-995c-7973-d378be8f6d4c :scoreRaw 97 .
|
|
|
60
96
|
genid:dbffbd20-c09d-995c-7973-d378be8f6d4c :violatesNeed :Need_NoSharingWithoutConsent .
|
|
61
97
|
genid:dbffbd20-c09d-995c-7973-d378be8f6d4c dct:description "Risk: user data sharing is permitted without an explicit consent constraint. Clause C3: Provider may share user data with partners for business purposes." .
|
|
62
98
|
:ProcessContext1 dpv:hasRisk genid:dbffbd20-c09d-995c-7973-d378be8f6d4c .
|
|
99
|
+
genid:1beecfb8-c205-dae0-e5f6-2f2aa3dc178c a dpv:RiskMitigationMeasure .
|
|
100
|
+
genid:1beecfb8-c205-dae0-e5f6-2f2aa3dc178c dct:description "Add an explicit consent constraint before data sharing." .
|
|
101
|
+
genid:1beecfb8-c205-dae0-e5f6-2f2aa3dc178c dpv:mitigatesRisk genid:dbffbd20-c09d-995c-7973-d378be8f6d4c .
|
|
102
|
+
genid:1beecfb8-c205-dae0-e5f6-2f2aa3dc178c :suggestAdd {
|
|
103
|
+
:PermShareData odrl:constraint _:sk_4 .
|
|
104
|
+
_:sk_4 a odrl:Constraint .
|
|
105
|
+
_:sk_4 odrl:leftOperand tosl:consent .
|
|
106
|
+
_:sk_4 odrl:operator odrl:eq .
|
|
107
|
+
_:sk_4 odrl:rightOperand true .
|
|
108
|
+
} .
|
|
109
|
+
genid:dbffbd20-c09d-995c-7973-d378be8f6d4c dpv:isMitigatedByMeasure genid:1beecfb8-c205-dae0-e5f6-2f2aa3dc178c .
|
|
63
110
|
genid:f83f5ee8-215f-977e-4e89-f9812cda0c04 a risk:RiskSource .
|
|
64
111
|
genid:f83f5ee8-215f-977e-4e89-f9812cda0c04 a risk:PolicyRisk .
|
|
65
112
|
genid:f83f5ee8-215f-977e-4e89-f9812cda0c04 dct:source :ProhibitExportData .
|
|
@@ -76,7 +123,19 @@ genid:ee944cc3-a770-063a-274c-98e4f8af162c :scoreRaw 70 .
|
|
|
76
123
|
genid:ee944cc3-a770-063a-274c-98e4f8af162c :violatesNeed :Need_DataPortability .
|
|
77
124
|
genid:ee944cc3-a770-063a-274c-98e4f8af162c dct:description "Risk: portability is restricted because exporting user data is prohibited. Clause C4: Users are not permitted to export their data." .
|
|
78
125
|
:ProcessContext1 dpv:hasRisk genid:ee944cc3-a770-063a-274c-98e4f8af162c .
|
|
79
|
-
genid:
|
|
126
|
+
genid:0e1f48a8-1550-a59e-0559-5f70ca9b3ac4 a dpv:RiskMitigationMeasure .
|
|
127
|
+
genid:0e1f48a8-1550-a59e-0559-5f70ca9b3ac4 dct:description "Add a permission allowing data export (or remove the prohibition) to support portability." .
|
|
128
|
+
genid:0e1f48a8-1550-a59e-0559-5f70ca9b3ac4 dpv:mitigatesRisk genid:ee944cc3-a770-063a-274c-98e4f8af162c .
|
|
129
|
+
genid:0e1f48a8-1550-a59e-0559-5f70ca9b3ac4 :suggestAdd {
|
|
130
|
+
:Policy1 odrl:permission _:sk_5 .
|
|
131
|
+
_:sk_5 a odrl:Permission .
|
|
132
|
+
_:sk_5 odrl:assigner :Provider .
|
|
133
|
+
_:sk_5 odrl:assignee :ConsumerExample .
|
|
134
|
+
_:sk_5 odrl:action tosl:exportData .
|
|
135
|
+
_:sk_5 odrl:target :UserData .
|
|
136
|
+
} .
|
|
137
|
+
genid:ee944cc3-a770-063a-274c-98e4f8af162c dpv:isMitigatedByMeasure genid:0e1f48a8-1550-a59e-0559-5f70ca9b3ac4 .
|
|
138
|
+
genid:59bf9d7c-6868-401e-bb47-667826cd85bc :score 100 .
|
|
80
139
|
genid:423c1420-b028-620c-fcd2-78f08f0da0ca :score 85 .
|
|
81
140
|
genid:dbffbd20-c09d-995c-7973-d378be8f6d4c :score 97 .
|
|
82
141
|
genid:ee944cc3-a770-063a-274c-98e4f8af162c :score 70 .
|
|
@@ -89,7 +148,12 @@ genid:dbffbd20-c09d-995c-7973-d378be8f6d4c dpv:hasRiskLevel risk:HighRisk .
|
|
|
89
148
|
genid:ee944cc3-a770-063a-274c-98e4f8af162c dpv:hasSeverity risk:ModerateSeverity .
|
|
90
149
|
genid:ee944cc3-a770-063a-274c-98e4f8af162c dpv:hasRiskLevel risk:ModerateRisk .
|
|
91
150
|
(:Agreement1 :ConsumerExample 0) log:outputString "\n=== Ranked DPV Risk Report ===\nAgreement: Example Agreement\nProfile: Example consumer profile\n\n" .
|
|
92
|
-
(:Agreement1 :ConsumerExample 1 900 genid:59bf9d7c-6868-401e-bb47-667826cd85bc) log:outputString "score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause C1\n Risk: account/data removal is permitted without notice safeguards (no notice constraint and no duty to inform). Clause C1: Provider may remove the user account (and associated data) at its discretion.\n\n" .
|
|
93
|
-
(:Agreement1 :ConsumerExample 1 915 genid:423c1420-b028-620c-fcd2-78f08f0da0ca) log:outputString "score=85 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause C2\n Risk: terms may change with notice (3 days) below consumer requirement (14 days). Clause C2: Provider may change terms by informing users at least 3 days in advance.\n\n" .
|
|
94
|
-
(:Agreement1 :ConsumerExample 1 903 genid:dbffbd20-c09d-995c-7973-d378be8f6d4c) log:outputString "score=97 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause C3\n Risk: user data sharing is permitted without an explicit consent constraint. Clause C3: Provider may share user data with partners for business purposes.\n\n" .
|
|
95
|
-
(:Agreement1 :ConsumerExample 1 930 genid:ee944cc3-a770-063a-274c-98e4f8af162c) log:outputString "score=70 (https://w3id.org/dpv/risk#ModerateRisk, https://w3id.org/dpv/risk#ModerateSeverity) clause C4\n Risk: portability is restricted because exporting user data is prohibited. Clause C4: Users are not permitted to export their data.\n\n" .
|
|
151
|
+
(:Agreement1 :ConsumerExample 1 900 "C1" 0 genid:59bf9d7c-6868-401e-bb47-667826cd85bc) log:outputString "score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause C1\n Risk: account/data removal is permitted without notice safeguards (no notice constraint and no duty to inform). Clause C1: Provider may remove the user account (and associated data) at its discretion.\n\n" .
|
|
152
|
+
(:Agreement1 :ConsumerExample 1 915 "C2" 0 genid:423c1420-b028-620c-fcd2-78f08f0da0ca) log:outputString "score=85 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause C2\n Risk: terms may change with notice (3 days) below consumer requirement (14 days). Clause C2: Provider may change terms by informing users at least 3 days in advance.\n\n" .
|
|
153
|
+
(:Agreement1 :ConsumerExample 1 903 "C3" 0 genid:dbffbd20-c09d-995c-7973-d378be8f6d4c) log:outputString "score=97 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause C3\n Risk: user data sharing is permitted without an explicit consent constraint. Clause C3: Provider may share user data with partners for business purposes.\n\n" .
|
|
154
|
+
(:Agreement1 :ConsumerExample 1 930 "C4" 0 genid:ee944cc3-a770-063a-274c-98e4f8af162c) log:outputString "score=70 (https://w3id.org/dpv/risk#ModerateRisk, https://w3id.org/dpv/risk#ModerateSeverity) clause C4\n Risk: portability is restricted because exporting user data is prohibited. Clause C4: Users are not permitted to export their data.\n\n" .
|
|
155
|
+
(:Agreement1 :ConsumerExample 1 900 "C1" 1 genid:59bf9d7c-6868-401e-bb47-667826cd85bc genid:f2f8e420-4979-6bb4-9d7a-724cdbeeeef4) log:outputString " - mitigation for clause C1: Add a notice constraint (minimum noticeDays) before account removal.\n" .
|
|
156
|
+
(:Agreement1 :ConsumerExample 1 900 "C1" 1 genid:59bf9d7c-6868-401e-bb47-667826cd85bc genid:4d551ac7-50e7-79bc-bbc6-d35022c24650) log:outputString " - mitigation for clause C1: Add a duty to inform the consumer prior to account removal.\n" .
|
|
157
|
+
(:Agreement1 :ConsumerExample 1 915 "C2" 1 genid:423c1420-b028-620c-fcd2-78f08f0da0ca genid:6eda9020-28eb-8740-c9c2-4d0139e1499c) log:outputString " - mitigation for clause C2: Increase minimum noticeDays in the inform duty to meet the consumer requirement.\n" .
|
|
158
|
+
(:Agreement1 :ConsumerExample 1 903 "C3" 1 genid:dbffbd20-c09d-995c-7973-d378be8f6d4c genid:1beecfb8-c205-dae0-e5f6-2f2aa3dc178c) log:outputString " - mitigation for clause C3: Add an explicit consent constraint before data sharing.\n" .
|
|
159
|
+
(:Agreement1 :ConsumerExample 1 930 "C4" 1 genid:ee944cc3-a770-063a-274c-98e4f8af162c genid:0e1f48a8-1550-a59e-0559-5f70ca9b3ac4) log:outputString " - mitigation for clause C4: Add a permission allowing data export (or remove the prohibition) to support portability.\n" .
|
package/examples/reifies.n3
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
|
2
1
|
@prefix : <http://www.example.org/> .
|
|
3
2
|
@prefix log: <http://www.w3.org/2000/10/swap/log#> .
|
|
4
3
|
|
|
5
|
-
_:b
|
|
4
|
+
_:b log:nameOf { :Socrates a :Human . } .
|
|
6
5
|
_:b :is true .
|
|
7
6
|
:employee38 :familyName "Smith" .
|
|
8
7
|
_:id log:nameOf { :employee38 :jobTitle "Assistant Designer" . } .
|
package/examples/triple-term.n3
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
@prefix : <http://www.example.org/> .
|
|
2
|
-
@prefix
|
|
3
|
-
@prefix
|
|
2
|
+
@prefix skolem: <https://eyereasoner.github.io/.well-known/genid/3ce038d5-ea5f-5c1e-8635-dcdabec19d5f#> .
|
|
3
|
+
@prefix log: <http://www.w3.org/2000/10/swap/log#> .
|
|
4
4
|
|
|
5
5
|
skolem:e38 :familyName "Smith" .
|
|
6
|
-
_:anno
|
|
6
|
+
_:anno log:nameOf { skolem:e38 :jobTitle "Designer" . } .
|
|
7
7
|
_:anno :accordingTo _:e22 .
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
@prefix : <http://example.org/> .
|
|
2
|
+
@prefix math: <http://www.w3.org/2000/10/swap/math#> .
|
|
3
|
+
@prefix log: <http://www.w3.org/2000/10/swap/log#> .
|
|
4
|
+
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
|
|
5
|
+
|
|
6
|
+
# --- Sensor Data ---
|
|
7
|
+
:turbine1 :vibration "0.42"^^xsd:decimal.
|
|
8
|
+
:turbine1 :temperature "78"^^xsd:decimal.
|
|
9
|
+
:turbine1 :rpm "1650"^^xsd:decimal.
|
|
10
|
+
:turbine1 :gearboxStatus :degraded.
|
|
11
|
+
|
|
12
|
+
# --- Threshold Values ---
|
|
13
|
+
:highVibrationThreshold :value "0.35"^^xsd:decimal.
|
|
14
|
+
:highTemperatureThreshold :value "75"^^xsd:decimal.
|
|
15
|
+
:criticalRPM :value "1800"^^xsd:decimal.
|
|
16
|
+
|
|
17
|
+
# --- Rule: Vibration Anomaly ---
|
|
18
|
+
{
|
|
19
|
+
?T :vibration ?V.
|
|
20
|
+
:highVibrationThreshold :value ?VT.
|
|
21
|
+
?V math:greaterThan ?VT.
|
|
22
|
+
} => {
|
|
23
|
+
?T :hasAnomaly :highVibration.
|
|
24
|
+
}.
|
|
25
|
+
|
|
26
|
+
# --- Rule: Temperature Anomaly ---
|
|
27
|
+
{
|
|
28
|
+
?T :temperature ?Temp.
|
|
29
|
+
:highTemperatureThreshold :value ?TT.
|
|
30
|
+
?Temp math:greaterThan ?TT.
|
|
31
|
+
} => {
|
|
32
|
+
?T :hasAnomaly :highTemperature.
|
|
33
|
+
}.
|
|
34
|
+
|
|
35
|
+
# --- Rule: Combined Anomalies Trigger Urgent Inspection ---
|
|
36
|
+
{
|
|
37
|
+
?T :hasAnomaly :highVibration.
|
|
38
|
+
?T :hasAnomaly :highTemperature.
|
|
39
|
+
} => {
|
|
40
|
+
?T :requires :urgentInspection.
|
|
41
|
+
}.
|
|
42
|
+
|
|
43
|
+
# --- Rule: Gearbox Status Triggers Maintenance ---
|
|
44
|
+
{
|
|
45
|
+
?T :gearboxStatus :degraded.
|
|
46
|
+
} => {
|
|
47
|
+
?T :requires :gearboxMaintenance.
|
|
48
|
+
}.
|
|
49
|
+
|
|
50
|
+
# --- Query: Detected Anomalies ---
|
|
51
|
+
{
|
|
52
|
+
?T :hasAnomaly ?Anomaly.
|
|
53
|
+
} log:query {
|
|
54
|
+
?T :hasAnomaly ?Anomaly.
|
|
55
|
+
}.
|
|
56
|
+
|
|
57
|
+
# --- Query: Required Actions ---
|
|
58
|
+
{
|
|
59
|
+
?T :requires ?Action.
|
|
60
|
+
} log:query {
|
|
61
|
+
?T :requires ?Action.
|
|
62
|
+
}.
|
|
63
|
+
|
package/eyeling.js
CHANGED
|
@@ -3834,7 +3834,10 @@ function main() {
|
|
|
3834
3834
|
// Named list nodes keep identity; list:* builtins can traverse them.
|
|
3835
3835
|
engine.materializeRdfLists(triples, frules.concat(qrules || []), brules);
|
|
3836
3836
|
|
|
3837
|
-
|
|
3837
|
+
// Keep non-ground top-level facts too (e.g., universally quantified N3 vars)
|
|
3838
|
+
// so they can participate in rule matching. Derived/output facts remain
|
|
3839
|
+
// ground-gated in the engine.
|
|
3840
|
+
const facts = triples.slice();
|
|
3838
3841
|
|
|
3839
3842
|
// If requested, print log:outputString values (ordered by subject key) and exit.
|
|
3840
3843
|
// Note: log:outputString values may depend on derived facts, so we must saturate first.
|
|
@@ -7103,7 +7106,9 @@ function reasonStream(n3Text, opts = {}) {
|
|
|
7103
7106
|
materializeRdfLists(triples, frules.concat(logQueryRules || []), brules);
|
|
7104
7107
|
|
|
7105
7108
|
// facts becomes the saturated closure because pushFactIndexed(...) appends into it
|
|
7106
|
-
|
|
7109
|
+
// Keep non-ground top-level facts (e.g., universally-quantified N3 variables)
|
|
7110
|
+
// so they can participate in rule matching. Derived/output facts remain ground-gated elsewhere.
|
|
7111
|
+
const facts = triples.slice();
|
|
7107
7112
|
|
|
7108
7113
|
let derived = [];
|
|
7109
7114
|
let queryTriples = [];
|
package/lib/cli.js
CHANGED
|
@@ -173,7 +173,10 @@ function main() {
|
|
|
173
173
|
// Named list nodes keep identity; list:* builtins can traverse them.
|
|
174
174
|
engine.materializeRdfLists(triples, frules.concat(qrules || []), brules);
|
|
175
175
|
|
|
176
|
-
|
|
176
|
+
// Keep non-ground top-level facts too (e.g., universally quantified N3 vars)
|
|
177
|
+
// so they can participate in rule matching. Derived/output facts remain
|
|
178
|
+
// ground-gated in the engine.
|
|
179
|
+
const facts = triples.slice();
|
|
177
180
|
|
|
178
181
|
// If requested, print log:outputString values (ordered by subject key) and exit.
|
|
179
182
|
// Note: log:outputString values may depend on derived facts, so we must saturate first.
|
package/lib/engine.js
CHANGED
|
@@ -2637,7 +2637,9 @@ function reasonStream(n3Text, opts = {}) {
|
|
|
2637
2637
|
materializeRdfLists(triples, frules.concat(logQueryRules || []), brules);
|
|
2638
2638
|
|
|
2639
2639
|
// facts becomes the saturated closure because pushFactIndexed(...) appends into it
|
|
2640
|
-
|
|
2640
|
+
// Keep non-ground top-level facts (e.g., universally-quantified N3 variables)
|
|
2641
|
+
// so they can participate in rule matching. Derived/output facts remain ground-gated elsewhere.
|
|
2642
|
+
const facts = triples.slice();
|
|
2641
2643
|
|
|
2642
2644
|
let derived = [];
|
|
2643
2645
|
let queryTriples = [];
|
package/package.json
CHANGED
package/test/api.test.js
CHANGED
|
@@ -1012,6 +1012,17 @@ ex:w a ex:Woman .
|
|
|
1012
1012
|
/(?:ex:w|<http:\/\/example\.org\/ns#w>)\s+(?:rdfs:label|<http:\/\/www\.w3\.org\/2000\/01\/rdf-schema#label>)\s+"human being"\s*\./,
|
|
1013
1013
|
],
|
|
1014
1014
|
},
|
|
1015
|
+
{
|
|
1016
|
+
name: '58 regression: top-level variable fact can satisfy a ground forward-rule premise',
|
|
1017
|
+
opt: { proofComments: false },
|
|
1018
|
+
input: `@prefix : <http://example.org/#>.
|
|
1019
|
+
|
|
1020
|
+
?X :p :o.
|
|
1021
|
+
|
|
1022
|
+
{ :s :p :o } => { :test :is true }.
|
|
1023
|
+
`,
|
|
1024
|
+
expect: [/:(?:test)\s+:(?:is)\s+true\s*\./],
|
|
1025
|
+
},
|
|
1015
1026
|
];
|
|
1016
1027
|
|
|
1017
1028
|
let passed = 0;
|