From 3f305f112beb21d43974619b516d71811af30447 Mon Sep 17 00:00:00 2001 From: Nicola Stoira <nicola.stoira@accenture.com> Date: Mon, 22 Jan 2024 10:33:28 +0100 Subject: [PATCH] Regenerate shacl file --- shacl_2024-1.ttl | 4702 +++++++++++++++++++++++----------------------- 1 file changed, 2351 insertions(+), 2351 deletions(-) diff --git a/shacl_2024-1.ttl b/shacl_2024-1.ttl index dcd58cb..a60c0ca 100644 --- a/shacl_2024-1.ttl +++ b/shacl_2024-1.ttl @@ -96,14 +96,14 @@ constraints:sphnAccessDevice a sh:NodeShape ; sh:property [ sh:class sphn:Software ; sh:minCount 0 ; sh:path sphn:hasSoftware ], - [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class sphn:Terminology ] ) ; - sh:path sphn:hasProductCode ], [ sh:class snomed:105789008 ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasTypeCode ] ; + sh:path sphn:hasTypeCode ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:or ( [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] ) ; + sh:path sphn:hasProductCode ] ; sh:targetClass sphn:AccessDevice . constraints:sphnAccessDevicePresence a sh:NodeShape ; @@ -113,10 +113,6 @@ constraints:sphnAccessDevicePresence a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasAdministrativeCase ], - [ sh:class sphn:SubjectPseudoIdentifier ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], [ sh:class sphn:AccessDevice ; sh:maxCount 1 ; sh:minCount 1 ; @@ -125,22 +121,26 @@ constraints:sphnAccessDevicePresence a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasEndDateTime ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasStartDateTime ], [ sh:class sphn:BodySite ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasRestingPoint ], + sh:path sphn:hasInsertionPoint ], + [ sh:class sphn:SubjectPseudoIdentifier ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ], [ sh:class sphn:BodySite ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasInsertionPoint ], + sh:path sphn:hasRestingPoint ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDataProvider ], + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasStartDateTime ], [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ] ; @@ -234,22 +234,29 @@ constraints:sphnAccessDevice_Warning_Naming a sh:NodeShape ; constraints:sphnAdministrativeCase a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:CareHandling ; + sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasCareHandling ], + sh:path sphn:hasIdentifier ], [ sh:class sphn:Location ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasOriginLocation ], + [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:datatype xsd:string ; + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasIdentifier ], + sh:path sphn:hasDischargeDateTime ], [ sh:class sphn:Location ; sh:maxCount 1 ; sh:minCount 0 ; @@ -258,17 +265,10 @@ constraints:sphnAdministrativeCase a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasAdmissionDateTime ], - [ sh:datatype xsd:dateTime ; + [ sh:class sphn:CareHandling ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasDischargeDateTime ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ] ; + sh:path sphn:hasCareHandling ] ; sh:targetClass sphn:AdministrativeCase . constraints:sphnAdministrativeCase_Warning_Naming a sh:NodeShape ; @@ -287,31 +287,31 @@ constraints:sphnAdministrativeCase_Warning_Naming a sh:NodeShape ; constraints:sphnAdministrativeSex a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:SourceSystem ; + sh:property [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasRecordDateTime ], + [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], - [ sh:maxCount 1 ; + [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; sh:minCount 1 ; - sh:or ( [ sh:class snomed:248153007 ] [ sh:class snomed:32570681000036106 ] [ sh:class snomed:248152002 ] ) ; - sh:path sphn:hasCode ], + sh:path sphn:hasDataProvider ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasRecordDateTime ], - [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; + [ sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ] ; + sh:or ( [ sh:class snomed:248152002 ] [ sh:class snomed:32570681000036106 ] [ sh:class snomed:248153007 ] ) ; + sh:path sphn:hasCode ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?class as ?value) WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/248153007>, <http://snomed.info/id/32570681000036106>, <http://snomed.info/id/248152002> )) . + FILTER( ?values IN ( <http://snomed.info/id/248152002>, <http://snomed.info/id/32570681000036106>, <http://snomed.info/id/248153007> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ] ; @@ -320,14 +320,6 @@ constraints:sphnAdministrativeSex a sh:NodeShape ; constraints:sphnAdministrativeSex_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-AdministrativeSex-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -335,51 +327,59 @@ constraints:sphnAdministrativeSex_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-AdministrativeSex-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:AdministrativeSex . constraints:sphnAdverseEvent a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:maxCount 1 ; + sh:property [ sh:class sphn:AdverseEvent_consequences ; + sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class sphn:Terminology ] ) ; - sh:path sphn:hasSeverityCode ], + sh:path sphn:hasConsequences ], [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasIntervention ], - [ sh:class sphn:AdverseEvent_outcome ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasOutcome ], [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], - [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:class sphn:AdministrativeCase ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:AdverseEvent_consequences ; + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasConsequences ], + sh:path sphn:hasOnsetDateTime ], [ sh:class sphn:Code ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasCode ], - [ sh:datatype xsd:dateTime ; + [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ], + [ sh:class sphn:AdministrativeCase ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasAdministrativeCase ], + [ sh:class sphn:AdverseEvent_outcome ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasOnsetDateTime ] ; + sh:path sphn:hasOutcome ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:or ( [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] ) ; + sh:path sphn:hasSeverityCode ] ; sh:targetClass sphn:AdverseEvent . constraints:sphnAdverseEvent_Warning_Codes a sh:NodeShape ; @@ -441,39 +441,39 @@ constraints:sphnAdverseEvent_Warning_Naming a sh:NodeShape ; constraints:sphnAdverseEvent_consequences a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type rdfs:label ) ; - sh:property [ sh:in ( sphn-individual:Death sphn-individual:LifeThreatening sphn-individual:PermanentDamageOrDisability sphn-individual:HospitalisationOrProlongation sphn-individual:CongenitalAbnormality sphn-individual:TemporarilySeriousImpactMedicallyImportant sphn-individual:NoneOfTheConsequencesMentioned ) ; + sh:property [ sh:in ( sphn-individual:CongenitalAbnormality sphn-individual:NoneOfTheConsequencesMentioned sphn-individual:Death sphn-individual:PermanentDamageOrDisability sphn-individual:TemporarilySeriousImpactMedicallyImportant sphn-individual:LifeThreatening sphn-individual:HospitalisationOrProlongation ) ; sh:path [ sh:inversePath rdf:type ] ] ; sh:targetClass sphn:AdverseEvent_consequences . constraints:sphnAdverseEvent_outcome a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type rdfs:label ) ; - sh:property [ sh:in ( sphn-individual:Fatal sphn-individual:NotRecovered sphn-individual:Recovering sphn-individual:RecoveringWithSequelae sphn-individual:Recovered ) ; + sh:property [ sh:in ( sphn-individual:RecoveringWithSequelae sphn-individual:Recovered sphn-individual:Recovering sphn-individual:NotRecovered sphn-individual:Fatal ) ; sh:path [ sh:inversePath rdf:type ] ] ; sh:targetClass sphn:AdverseEvent_outcome . constraints:sphnAge a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( sphn:hasQuantity rdf:type ) ; - sh:property [ sh:maxCount 1 ; + sh:property [ sh:class sphn:SubjectPseudoIdentifier ; + sh:maxCount 1 ; sh:minCount 1 ; - sh:or ( [ sh:class ucum:a ] [ sh:class ucum:d ] [ sh:class ucum:mo ] [ sh:class ucum:wk ] [ sh:class ucum:h ] [ sh:class ucum:min ] ) ; - sh:path ( sphn:hasQuantity sphn:hasUnit sphn:hasCode ) ], + sh:path sphn:hasSubjectPseudoIdentifier ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDeterminationDateTime ], - [ sh:class sphn:SubjectPseudoIdentifier ; - sh:maxCount 1 ; + [ sh:class sphn:SourceSystem ; sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], + sh:path sphn:hasSourceSystem ], + [ sh:maxCount 1 ; + sh:minCount 1 ; + sh:or ( [ sh:class ucum:min ] [ sh:class ucum:wk ] [ sh:class ucum:mo ] [ sh:class ucum:h ] [ sh:class ucum:d ] [ sh:class ucum:a ] ) ; + sh:path ( sphn:hasQuantity sphn:hasUnit sphn:hasCode ) ], [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasQuantity ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ] ; + sh:path sphn:hasQuantity ] ; sh:targetClass sphn:Age . constraints:sphnAge_Warning_Naming a sh:NodeShape ; @@ -493,7 +493,7 @@ constraints:sphnAllergen a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:minCount 1 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class snomed:138875005 ] [ sh:class sphn-atc:ATC ] ) ; + sh:or ( [ sh:class snomed:138875005 ] [ sh:class sphn-atc:ATC ] [ sh:class sphn:Code ] ) ; sh:path sphn:hasCode ] ; sh:targetClass sphn:Allergen . @@ -513,65 +513,65 @@ constraints:sphnAllergen_Warning_Naming a sh:NodeShape ; constraints:sphnAllergy a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:maxCount 1 ; + sh:property [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class snomed:782197009 ] [ sh:class snomed:609328004 ] ) ; - sh:path sphn:hasReactionTypeCode ], + sh:path sphn:hasLastReactionDateTime ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:or ( [ sh:class snomed:723509005 ] [ sh:class snomed:723505004 ] [ sh:class snomed:723507007 ] ) ; + sh:path sphn:hasSeverityCode ], [ sh:class sphn:Allergen ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasAllergen ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDataProvider ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; + [ sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasFirstRecordDateTime ], + sh:or ( [ sh:class snomed:782197009 ] [ sh:class snomed:609328004 ] ) ; + sh:path sphn:hasReactionTypeCode ], [ sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class snomed:723509005 ] [ sh:class snomed:723507007 ] [ sh:class snomed:723505004 ] ) ; - sh:path sphn:hasSeverityCode ], + sh:or ( [ sh:class snomed:415684004 ] [ sh:class snomed:723510000 ] [ sh:class snomed:410605003 ] [ sh:class snomed:723511001 ] ) ; + sh:path sphn:hasVerificationStatusCode ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:or ( [ sh:class snomed:415684004 ] [ sh:class snomed:723510000 ] [ sh:class snomed:410605003 ] [ sh:class snomed:723511001 ] ) ; - sh:path sphn:hasVerificationStatusCode ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasLastReactionDateTime ] ; + sh:path sphn:hasFirstRecordDateTime ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; - sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasVerificationStatusCode> as ?path) (?class as ?value) + sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasReactionTypeCode> as ?path) (?class as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasVerificationStatusCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/415684004>, <http://snomed.info/id/723510000>, <http://snomed.info/id/410605003>, <http://snomed.info/id/723511001> )) . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasReactionTypeCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . + FILTER( ?values IN ( <http://snomed.info/id/782197009>, <http://snomed.info/id/609328004> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ], [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; - sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasReactionTypeCode> as ?path) (?class as ?value) + sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasSeverityCode> as ?path) (?class as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasReactionTypeCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/782197009>, <http://snomed.info/id/609328004> )) . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasSeverityCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . + FILTER( ?values IN ( <http://snomed.info/id/723509005>, <http://snomed.info/id/723505004>, <http://snomed.info/id/723507007> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ], [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; - sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasSeverityCode> as ?path) (?class as ?value) + sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasVerificationStatusCode> as ?path) (?class as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasSeverityCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/723509005>, <http://snomed.info/id/723507007>, <http://snomed.info/id/723505004> )) . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasVerificationStatusCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . + FILTER( ?values IN ( <http://snomed.info/id/415684004>, <http://snomed.info/id/723510000>, <http://snomed.info/id/410605003>, <http://snomed.info/id/723511001> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ] ; @@ -580,54 +580,63 @@ constraints:sphnAllergy a sh:NodeShape ; constraints:sphnAllergyEpisode a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:class sphn:AdministrativeCase ; + sh:property [ sh:class sphn:BodySite ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], + sh:path sphn:hasBodySite ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasDateTime ], - [ sh:class sphn:Allergen ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasAllergen ], - [ sh:class sphn:Exposure ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasExposure ], [ sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class snomed:24484000 ] [ sh:class snomed:6736007 ] [ sh:class snomed:255604002 ] ) ; + sh:or ( [ sh:class snomed:6736007 ] [ sh:class snomed:255604002 ] [ sh:class snomed:24484000 ] ) ; sh:path sphn:hasSeverityCode ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:or ( [ sh:class snomed:415684004 ] [ sh:class snomed:410592001 ] [ sh:class snomed:410605003 ] ) ; sh:path sphn:hasCertaintyCode ], + [ sh:class sphn:Allergen ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasAllergen ], [ sh:class snomed:404684003 ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasManifestationCode ], - [ sh:class sphn:SubjectPseudoIdentifier ; + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], + sh:path sphn:hasDataProvider ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasDuration ], - [ sh:class sphn:BodySite ; + [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasBodySite ], - [ sh:class sphn:DataProvider ; + sh:path sphn:hasAdministrativeCase ], + [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ] ; + sh:path sphn:hasSubjectPseudoIdentifier ], + [ sh:class sphn:Exposure ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasExposure ] ; sh:sparql [ a sh:SPARQLConstraint ; + sh:message "No descendents (all subclasses) of the specified codes are allowed" ; + sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasSeverityCode> as ?path) (?class as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasSeverityCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . + FILTER( ?values IN ( <http://snomed.info/id/6736007>, <http://snomed.info/id/255604002>, <http://snomed.info/id/24484000> )) . + FILTER (?class NOT IN ( ?values ) ) . + FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} + }""" ], + [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCertaintyCode> as ?path) (?class as ?value) WHERE { @@ -643,16 +652,7 @@ constraints:sphnAllergyEpisode a sh:NodeShape ; WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasExposure>/rdf:type ?class. FILTER(?class IN (<https://biomedit.ch/rdf/sphn-schema/sphn#TobaccoExposure>)) - }""" ], - [ a sh:SPARQLConstraint ; - sh:message "No descendents (all subclasses) of the specified codes are allowed" ; - sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasSeverityCode> as ?path) (?class as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasSeverityCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/24484000>, <http://snomed.info/id/6736007>, <http://snomed.info/id/255604002> )) . - FILTER (?class NOT IN ( ?values ) ) . - FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} - }""" ] ; + }""" ] ; sh:targetClass sphn:AllergyEpisode . constraints:sphnAllergyEpisode_Warning_Naming a sh:NodeShape ; @@ -660,17 +660,17 @@ constraints:sphnAllergyEpisode_Warning_Naming a sh:NodeShape ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCertaintyCode> as ?path) (?code as ?value) + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasManifestationCode> as ?path) (?code as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCertaintyCode> ?code . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasManifestationCode> ?code . FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ], [ a sh:SPARQLConstraint ; sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasManifestationCode> as ?path) (?code as ?value) + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasSeverityCode> as ?path) (?code as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasManifestationCode> ?code . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasSeverityCode> ?code . FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ], [ a sh:SPARQLConstraint ; @@ -685,9 +685,9 @@ constraints:sphnAllergyEpisode_Warning_Naming a sh:NodeShape ; [ a sh:SPARQLConstraint ; sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasSeverityCode> as ?path) (?code as ?value) + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCertaintyCode> as ?path) (?code as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasSeverityCode> ?code . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCertaintyCode> ?code . FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:AllergyEpisode . @@ -695,6 +695,14 @@ constraints:sphnAllergyEpisode_Warning_Naming a sh:NodeShape ; constraints:sphnAllergy_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasSeverityCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasSeverityCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Allergy-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -706,25 +714,17 @@ constraints:sphnAllergy_Warning_Naming a sh:NodeShape ; [ a sh:SPARQLConstraint ; sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasReactionTypeCode> as ?path) (?code as ?value) + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasVerificationStatusCode> as ?path) (?code as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasReactionTypeCode> ?code . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasVerificationStatusCode> ?code . FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ], [ a sh:SPARQLConstraint ; sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasVerificationStatusCode> as ?path) (?code as ?value) + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasReactionTypeCode> as ?path) (?code as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasVerificationStatusCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasSeverityCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasSeverityCode> ?code . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasReactionTypeCode> ?code . FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:Allergy . @@ -732,17 +732,10 @@ constraints:sphnAllergy_Warning_Naming a sh:NodeShape ; constraints:sphnAntimicrobialSusceptibilityLabTest a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:AntimicrobialSusceptibilityResult ; - sh:minCount 1 ; - sh:path sphn:hasResult ], - [ sh:class sphn:LabAnalyzer ; + sh:property [ sh:class sphn:LabAnalyzer ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasTestKit ], - [ sh:maxCount 1 ; - sh:minCount 1 ; - sh:or ( [ sh:class sphn:Substance ] [ sh:class sphn:Drug ] ) ; - sh:path sphn:hasChemicalAgent ], [ sh:class snomed:14788002 ; sh:maxCount 1 ; sh:minCount 1 ; @@ -750,42 +743,49 @@ constraints:sphnAntimicrobialSusceptibilityLabTest a sh:NodeShape ; [ sh:class sphn:LabAnalyzer ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasInstrument ] ; + sh:path sphn:hasInstrument ], + [ sh:maxCount 1 ; + sh:minCount 1 ; + sh:or ( [ sh:class sphn:Drug ] [ sh:class sphn:Substance ] ) ; + sh:path sphn:hasChemicalAgent ], + [ sh:class sphn:AntimicrobialSusceptibilityResult ; + sh:minCount 1 ; + sh:path sphn:hasResult ] ; sh:targetClass sphn:AntimicrobialSusceptibilityLabTest . constraints:sphnAntimicrobialSusceptibilityLabTestEvent a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; + sh:property [ sh:class sphn:AntimicrobialSusceptibilityLabTest ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ], + sh:path sphn:hasLabTest ], [ sh:class sphn:Isolate ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSample ], - [ sh:class sphn:AdministrativeCase ; + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], + sh:path sphn:hasReportDateTime ], + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasDateTime ], [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], - [ sh:class sphn:AntimicrobialSusceptibilityLabTest ; - sh:minCount 1 ; - sh:path sphn:hasLabTest ], - [ sh:datatype xsd:dateTime ; + [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasDateTime ], - [ sh:class sphn:SubjectPseudoIdentifier ; + sh:path sphn:hasAdministrativeCase ], + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:datatype xsd:dateTime ; + sh:path sphn:hasDataProvider ], + [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasReportDateTime ] ; + sh:minCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ] ; sh:targetClass sphn:AntimicrobialSusceptibilityLabTestEvent . constraints:sphnAntimicrobialSusceptibilityLabTestEvent_Warning_Naming a sh:NodeShape ; @@ -837,20 +837,20 @@ constraints:sphnAntimicrobialSusceptibilityResult a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasQuantity ], - [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:or ( [ sh:class snomed:30714006 ] [ sh:class snomed:131196009 ] [ sh:class snomed:1255965005 ] ) ; - sh:path sphn:hasCode ], [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasStandardGuideline ] ; + sh:path sphn:hasStandardGuideline ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:or ( [ sh:class snomed:1255965005 ] [ sh:class snomed:30714006 ] [ sh:class snomed:131196009 ] ) ; + sh:path sphn:hasCode ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?class as ?value) WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/30714006>, <http://snomed.info/id/131196009>, <http://snomed.info/id/1255965005> )) . + FILTER( ?values IN ( <http://snomed.info/id/1255965005>, <http://snomed.info/id/30714006>, <http://snomed.info/id/131196009> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ] ; @@ -859,6 +859,14 @@ constraints:sphnAntimicrobialSusceptibilityResult a sh:NodeShape ; constraints:sphnAntimicrobialSusceptibilityResult_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-AntimicrobialSusceptibilityResult-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -866,14 +874,6 @@ constraints:sphnAntimicrobialSusceptibilityResult_Warning_Naming a sh:NodeShape WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-AntimicrobialSusceptibilityResult-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:AntimicrobialSusceptibilityResult . @@ -884,13 +884,28 @@ constraints:sphnAssay a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasStartDateTime ], + [ sh:minCount 0 ; + sh:or ( [ sh:class sphn:DataFile ] [ sh:class sphn:TimeSeriesDataFile ] ) ; + sh:path sphn:hasDataFile ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:minCount 0 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; + [ sh:minCount 0 ; + sh:or ( [ sh:class sphn:TumorSpecimen ] [ sh:class sphn:Sample ] [ sh:class sphn:Isolate ] ) ; + sh:path sphn:hasSample ], + [ sh:class sphn:AdministrativeCase ; + sh:minCount 0 ; + sh:path sphn:hasAdministrativeCase ], + [ sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ], + sh:or ( [ sh:class sphn:Terminology ] [ sh:class obi:0000070 ] [ sh:class sphn:Code ] ) ; + sh:path sphn:hasCode ], + [ sh:minCount 0 ; + sh:or ( [ sh:class sphn:SampleProcessing ] [ sh:class sphn:LibraryPreparation ] ) ; + sh:path sphn:hasPredecessor ], [ sh:class sphn:StandardOperatingProcedure ; sh:maxCount 1 ; sh:minCount 0 ; @@ -899,25 +914,10 @@ constraints:sphnAssay a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasIdentifier ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:class sphn:AdministrativeCase ; - sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], - [ sh:minCount 0 ; - sh:or ( [ sh:class sphn:Sample ] [ sh:class sphn:Isolate ] [ sh:class sphn:TumorSpecimen ] ) ; - sh:path sphn:hasSample ], - [ sh:maxCount 1 ; + [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; sh:minCount 1 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class obi:0000070 ] [ sh:class sphn:Terminology ] ) ; - sh:path sphn:hasCode ], - [ sh:minCount 0 ; - sh:or ( [ sh:class sphn:TimeSeriesDataFile ] [ sh:class sphn:DataFile ] ) ; - sh:path sphn:hasDataFile ], - [ sh:minCount 0 ; - sh:or ( [ sh:class sphn:SampleProcessing ] [ sh:class sphn:LibraryPreparation ] ) ; - sh:path sphn:hasPredecessor ] ; + sh:path sphn:hasDataProvider ] ; sh:target [ a sh:SPARQLTarget ; sh:select """SELECT ?this WHERE { @@ -1009,14 +1009,10 @@ constraints:sphnAssay_Warning_Naming a sh:NodeShape ; constraints:sphnAssessment a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:SubjectPseudoIdentifier ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:datatype xsd:string ; + sh:property [ sh:class snomed:254291000 ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasName ], + sh:path sphn:hasCode ], [ sh:class sphn:AssessmentResult ; sh:maxCount 1 ; sh:minCount 0 ; @@ -1024,6 +1020,10 @@ constraints:sphnAssessment a sh:NodeShape ; [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], + [ sh:class sphn:SubjectPseudoIdentifier ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ], [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1031,14 +1031,14 @@ constraints:sphnAssessment a sh:NodeShape ; [ sh:class sphn:AssessmentComponent ; sh:minCount 0 ; sh:path sphn:hasComponent ], - [ sh:class snomed:254291000 ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasCode ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ] ; + sh:path sphn:hasDataProvider ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasName ] ; sh:target [ a sh:SPARQLTarget ; sh:select """SELECT ?this WHERE { @@ -1054,18 +1054,18 @@ constraints:sphnAssessment a sh:NodeShape ; constraints:sphnAssessmentComponent a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasName ], - [ sh:class sphn:AssessmentResult ; + sh:property [ sh:class sphn:AssessmentResult ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasResult ], [ sh:class snomed:363787002 ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasCode ] ; + sh:path sphn:hasCode ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasName ] ; sh:targetClass sphn:AssessmentComponent . constraints:sphnAssessmentComponent_Warning_Naming a sh:NodeShape ; @@ -1092,33 +1092,33 @@ constraints:sphnAssessmentComponent_Warning_Naming a sh:NodeShape ; constraints:sphnAssessmentEvent a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:SubjectPseudoIdentifier ; + sh:property [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:Performer ; + sh:path sphn:hasDataProvider ], + [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasPerformer ], - [ sh:class sphn:SourceSystem ; sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], + sh:path sphn:hasAdministrativeCase ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDateTime ], - [ sh:class sphn:AdministrativeCase ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasAdministrativeCase ], [ sh:maxCount 1 ; sh:minCount 1 ; - sh:or ( [ sh:class sphn:TumorStageAssessment ] [ sh:class sphn:Assessment ] [ sh:class sphn:TumorGradeAssessment ] ) ; + sh:or ( [ sh:class sphn:TumorGradeAssessment ] [ sh:class sphn:Assessment ] [ sh:class sphn:TumorStageAssessment ] ) ; sh:path sphn:hasAssessment ], - [ sh:class sphn:DataProvider ; + [ sh:class sphn:Performer ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasPerformer ], + [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ] ; + sh:path sphn:hasSubjectPseudoIdentifier ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ] ; sh:target [ a sh:SPARQLTarget ; sh:select """SELECT ?this WHERE { @@ -1157,14 +1157,14 @@ constraints:sphnAssessmentEvent_Warning_Naming a sh:NodeShape ; constraints:sphnAssessmentResult a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:Quantity ; + sh:property [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:or ( [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] ) ; + sh:path sphn:hasCode ], + [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasQuantity ], - [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class sphn:Terminology ] ) ; - sh:path sphn:hasCode ], [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 0 ; @@ -1261,37 +1261,37 @@ constraints:sphnAssessment_Warning_Naming a sh:NodeShape ; constraints:sphnBilledDiagnosis a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:class sphn:SubjectPseudoIdentifier ; - sh:maxCount 1 ; + sh:property [ sh:class sphn:SourceSystem ; sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], + sh:path sphn:hasSourceSystem ], [ sh:class sphn:Code ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasCode ], - [ sh:class sphn:BilledDiagnosis_rank ; + [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasRank ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], + sh:path sphn:hasAdministrativeCase ], [ sh:class sphn:Age ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasSubjectAge ], - [ sh:class sphn:AdministrativeCase ; + [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], + sh:minCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ], + [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasRecordDateTime ] ; + sh:path sphn:hasRecordDateTime ], + [ sh:class sphn:BilledDiagnosis_rank ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasRank ] ; sh:targetClass sphn:BilledDiagnosis . constraints:sphnBilledDiagnosis_Warning_Naming a sh:NodeShape ; @@ -1310,52 +1310,52 @@ constraints:sphnBilledDiagnosis_Warning_Naming a sh:NodeShape ; constraints:sphnBilledDiagnosis_rank a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type rdfs:label ) ; - sh:property [ sh:in ( sphn-individual:Principal sphn-individual:Secondary sphn-individual:Complementary ) ; + sh:property [ sh:in ( sphn-individual:Complementary sphn-individual:Principal sphn-individual:Secondary ) ; sh:path [ sh:inversePath rdf:type ] ] ; sh:targetClass sphn:BilledDiagnosis_rank . constraints:sphnBilledProcedure a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:class sphn:SubjectPseudoIdentifier ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:DataProvider ; + sh:property [ sh:class chop:CHOP ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ], + sh:path sphn:hasCode ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasStartDateTime ], - [ sh:class chop:CHOP ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasCode ], - [ sh:datatype xsd:dateTime ; + [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasEndDateTime ], - [ sh:class sphn:BodySite ; + sh:path sphn:hasAdministrativeCase ], + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasBodySite ], - [ sh:class sphn:AdministrativeCase ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ], + [ sh:class sphn:BilledProcedure_rank ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], + sh:path sphn:hasRank ], [ sh:class sphn:Intent ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasIntent ], - [ sh:class sphn:BilledProcedure_rank ; + [ sh:class sphn:BodySite ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasRank ] ; + sh:path sphn:hasBodySite ], + [ sh:class sphn:SubjectPseudoIdentifier ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasEndDateTime ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) @@ -1397,33 +1397,33 @@ constraints:sphnBilledProcedure_rank a sh:NodeShape ; constraints:sphnBiobanksample a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:datatype xsd:string ; + sh:property [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasIdentifier ], - [ sh:datatype xsd:string ; - sh:maxCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ], + [ sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasBiobankName ], + sh:or ( [ sh:class sphn:TumorSpecimen ] [ sh:class sphn:Sample ] [ sh:class sphn:Isolate ] ) ; + sh:path sphn:hasSample ], [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasAdministrativeCase ], - [ sh:maxCount 1 ; + [ sh:datatype xsd:string ; + sh:maxCount 1 ; sh:minCount 1 ; - sh:or ( [ sh:class sphn:Sample ] [ sh:class sphn:Isolate ] [ sh:class sphn:TumorSpecimen ] ) ; - sh:path sphn:hasSample ], + sh:path sphn:hasIdentifier ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasBiobankName ], [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], - [ sh:class sphn:SubjectPseudoIdentifier ; + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ] ; + sh:path sphn:hasDataProvider ] ; sh:targetClass sphn:Biobanksample . constraints:sphnBiobanksample_Warning_Naming a sh:NodeShape ; @@ -1442,10 +1442,14 @@ constraints:sphnBiobanksample_Warning_Naming a sh:NodeShape ; constraints:sphnBirth a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:DataProvider ; + sh:property [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], + sh:minCount 0 ; + sh:path sphn:hasAdministrativeCase ], + [ sh:class sphn:Country ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasCountry ], [ sh:class sphn:MedicalDevice ; sh:minCount 0 ; sh:path sphn:hasMedicalDevice ], @@ -1453,29 +1457,25 @@ constraints:sphnBirth a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasGestationalAge ], - [ sh:class sphn:SubjectPseudoIdentifier ; + [ sh:class sphn:BirthDate ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasDate ], + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], + sh:path sphn:hasDataProvider ], [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], - [ sh:class sphn:Country ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasCountry ], [ sh:class snomed:118215003 ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasDeliveryModeCode ], - [ sh:class sphn:BirthDate ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasDate ], - [ sh:class sphn:AdministrativeCase ; + [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ] ; + sh:minCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "For sphn:hasMedicalDevice, instances of sphn:AccessDevice, sphn:LabAnalyzer, sphn:Implant are not allowed" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> @@ -1489,37 +1489,37 @@ constraints:sphnBirth a sh:NodeShape ; constraints:sphnBirthDate a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:SubjectPseudoIdentifier ; + sh:property [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], + [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:datatype xsd:gYear ; + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasYear ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], + sh:path sphn:hasDataProvider ], [ sh:datatype xsd:gDay ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasDay ], - [ sh:class sphn:Comparator ; + [ sh:datatype xsd:gYear ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasYear ], + [ sh:datatype xsd:time ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasComparator ], + sh:path sphn:hasTime ], [ sh:datatype xsd:gMonth ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasMonth ], - [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:datatype xsd:time ; + [ sh:class sphn:Comparator ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasTime ] ; + sh:path sphn:hasComparator ] ; sh:targetClass sphn:BirthDate . constraints:sphnBirthDate_Warning_Naming a sh:NodeShape ; @@ -1558,90 +1558,90 @@ constraints:sphnBirth_Warning_Naming a sh:NodeShape ; constraints:sphnBloodPressure a sh:NodeShape ; sh:closed false ; - sh:ignoredProperties ( sphn:hasSystolicPressure sphn:hasMeanPressure rdf:type sphn:hasDiastolicPressure ) ; - sh:property [ sh:class ucum:mmsblHgsbr ; + sh:ignoredProperties ( sphn:hasDiastolicPressure rdf:type sphn:hasMeanPressure sphn:hasSystolicPressure ) ; + sh:property [ sh:class sphn:TimeSeriesDataFile ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path ( sphn:hasMeanPressure sphn:hasUnit sphn:hasCode ) ], + sh:path sphn:hasDataFile ], [ sh:class ucum:mmsblHgsbr ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path ( sphn:hasSystolicPressure sphn:hasUnit sphn:hasCode ) ], - [ sh:class sphn:Quantity ; + sh:path ( sphn:hasDiastolicPressure sphn:hasUnit sphn:hasCode ) ], + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasSystolicPressure ], - [ sh:class ucum:mmsblHgsbr ; + sh:path sphn:hasDateTime ], + [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path ( sphn:hasDiastolicPressure sphn:hasUnit sphn:hasCode ) ], - [ sh:class sphn:Quantity ; + sh:path sphn:hasDiastolicPressure ], + [ sh:class ucum:mmsblHgsbr ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasMeanPressure ], - [ sh:datatype xsd:dateTime ; + sh:path ( sphn:hasMeanPressure sphn:hasUnit sphn:hasCode ) ], + [ sh:class ucum:mmsblHgsbr ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasDateTime ], + sh:path ( sphn:hasSystolicPressure sphn:hasUnit sphn:hasCode ) ], [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasDiastolicPressure ], - [ sh:class sphn:TimeSeriesDataFile ; + sh:path sphn:hasSystolicPressure ], + [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasDataFile ] ; + sh:path sphn:hasMeanPressure ] ; sh:targetClass sphn:BloodPressure . constraints:sphnBloodPressureMeasurement a sh:NodeShape ; sh:closed false ; - sh:ignoredProperties ( sphn:hasBodySite rdf:type ) ; - sh:property [ sh:class sphn:Performer ; - sh:maxCount 1 ; + sh:ignoredProperties ( rdf:type sphn:hasBodySite ) ; + sh:property [ sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasPerformer ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; + sh:or ( [ sh:class snomed:46973005 ] [ sh:class snomed:716777001 ] ) ; + sh:path sphn:hasMethodCode ], + [ sh:class sphn:SourceSystem ; sh:minCount 1 ; - sh:path sphn:hasStartDateTime ], + sh:path sphn:hasSourceSystem ], [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasAdministrativeCase ], - [ sh:class sphn:SubjectPseudoIdentifier ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:SourceSystem ; + [ sh:class sphn:BloodPressure ; sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:class sphn:BodySite ; + sh:path sphn:hasResult ], + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasBodySite ], + sh:path sphn:hasEndDateTime ], + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasStartDateTime ], [ sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class sphn:MedicalDevice ] [ sh:class sphn:Implant ] ) ; + sh:or ( [ sh:class sphn:Implant ] [ sh:class sphn:MedicalDevice ] ) ; sh:path sphn:hasMedicalDevice ], - [ sh:maxCount 1 ; + [ sh:class sphn:Performer ; + sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class snomed:46973005 ] [ sh:class snomed:716777001 ] ) ; - sh:path sphn:hasMethodCode ], + sh:path sphn:hasPerformer ], + [ sh:class sphn:BodySite ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasBodySite ], [ sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class snomed:8205005 ] [ sh:class snomed:113257007 ] [ sh:class snomed:344001 ] [ sh:class snomed:40983000 ] [ sh:class snomed:68367000 ] [ sh:class snomed:7569003 ] ) ; + sh:or ( [ sh:class snomed:344001 ] [ sh:class snomed:113257007 ] [ sh:class snomed:40983000 ] [ sh:class snomed:8205005 ] [ sh:class snomed:68367000 ] [ sh:class snomed:7569003 ] ) ; sh:path ( sphn:hasBodySite sphn:hasCode ) ], - [ sh:class sphn:BloodPressure ; - sh:minCount 1 ; - sh:path sphn:hasResult ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDataProvider ], - [ sh:datatype xsd:dateTime ; + [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasEndDateTime ] ; + sh:minCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) @@ -1663,6 +1663,14 @@ constraints:sphnBloodPressureMeasurement a sh:NodeShape ; constraints:sphnBloodPressureMeasurement_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this ("<https://biomedit.ch/rdf/sphn-schema/sphn#hasBodySite>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode>" as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasBodySite>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-BloodPressureMeasurement-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -1678,14 +1686,6 @@ constraints:sphnBloodPressureMeasurement_Warning_Naming a sh:NodeShape ; WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> ?code . FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this ("<https://biomedit.ch/rdf/sphn-schema/sphn#hasBodySite>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode>" as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasBodySite>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:BloodPressureMeasurement . @@ -1705,91 +1705,83 @@ constraints:sphnBloodPressure_Warning_Naming a sh:NodeShape ; constraints:sphnBodyHeight a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:Quantity ; + sh:property [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasDateTime ], + [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasQuantity ], [ sh:class sphn:DataDetermination ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasDataDetermination ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasDateTime ] ; + sh:path sphn:hasDataDetermination ] ; sh:targetClass sphn:BodyHeight . constraints:sphnBodyHeightMeasurement a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:datatype xsd:dateTime ; + sh:property [ sh:class sphn:MedicalDevice ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasEndDateTime ], - [ sh:class sphn:AdministrativeCase ; + sh:path sphn:hasMedicalDevice ], + [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], + sh:minCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ], [ sh:class sphn:BodyHeight ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasResult ], - [ sh:class sphn:SubjectPseudoIdentifier ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], [ sh:class sphn:Performer ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasPerformer ], + [ sh:class sphn:AdministrativeCase ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasAdministrativeCase ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], [ sh:class snomed:128927009 ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasMethodCode ], - [ sh:class sphn:MedicalDevice ; + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasMedicalDevice ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], + sh:path sphn:hasEndDateTime ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasStartDateTime ] ; + sh:path sphn:hasStartDateTime ], + [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ] ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; - sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> ?hasStartDateTime . - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasEndDateTime> ?hasEndDateTime . - FILTER (?hasStartDateTime > ?hasEndDateTime) - }""" ], - [ a sh:SPARQLConstraint ; sh:message "For sphn:hasMedicalDevice, instances of sphn:AccessDevice, sphn:LabAnalyzer, sphn:Implant are not allowed" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMedicalDevice> as ?path) (?class as ?value) WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMedicalDevice>/rdf:type ?class. FILTER(?class IN (<https://biomedit.ch/rdf/sphn-schema/sphn#AccessDevice>, <https://biomedit.ch/rdf/sphn-schema/sphn#LabAnalyzer>, <https://biomedit.ch/rdf/sphn-schema/sphn#Implant>)) - }""" ] ; + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; + sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> ?hasStartDateTime . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasEndDateTime> ?hasEndDateTime . + FILTER (?hasStartDateTime > ?hasEndDateTime) + }""" ] ; sh:targetClass sphn:BodyHeightMeasurement . constraints:sphnBodyHeightMeasurement_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-BodyHeightMeasurement-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -1797,6 +1789,14 @@ constraints:sphnBodyHeightMeasurement_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-BodyHeightMeasurement-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:BodyHeightMeasurement . @@ -1816,21 +1816,25 @@ constraints:sphnBodyHeight_Warning_Naming a sh:NodeShape ; constraints:sphnBodyMassIndex a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( sphn:hasQuantity rdf:type ) ; - sh:property [ sh:class sphn:AdministrativeCase ; + sh:property [ sh:class sphn:Quantity ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasQuantity ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], + [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasAdministrativeCase ], - [ sh:class sphn:Quantity ; + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasQuantity ], + sh:minCount 0 ; + sh:path sphn:hasDeterminationDateTime ], [ sh:class ucum:kgperm2 ; sh:maxCount 1 ; sh:minCount 1 ; sh:path ( sphn:hasQuantity sphn:hasUnit sphn:hasCode ) ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1838,11 +1842,7 @@ constraints:sphnBodyMassIndex a sh:NodeShape ; [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasDeterminationDateTime ] ; + sh:path sphn:hasDataProvider ] ; sh:targetClass sphn:BodyMassIndex . constraints:sphnBodyMassIndex_Warning_Naming a sh:NodeShape ; @@ -1861,13 +1861,10 @@ constraints:sphnBodyMassIndex_Warning_Naming a sh:NodeShape ; constraints:sphnBodyPosition a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:class snomed:9851009 ; + sh:property [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasCode ], + sh:path sphn:hasSubjectPseudoIdentifier ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; @@ -1875,19 +1872,22 @@ constraints:sphnBodyPosition a sh:NodeShape ; [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasStartDateTime ], + sh:path sphn:hasEndDateTime ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasEndDateTime ], + sh:path sphn:hasStartDateTime ], + [ sh:class snomed:9851009 ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasCode ], [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasAdministrativeCase ], - [ sh:class sphn:SubjectPseudoIdentifier ; - sh:maxCount 1 ; + [ sh:class sphn:SourceSystem ; sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ] ; + sh:path sphn:hasSourceSystem ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) @@ -1922,27 +1922,19 @@ constraints:sphnBodyPosition_Warning_Naming a sh:NodeShape ; constraints:sphnBodySite a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:Laterality ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasLaterality ], - [ sh:class snomed:123037004 ; + sh:property [ sh:class snomed:123037004 ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasCode ] ; + sh:path sphn:hasCode ], + [ sh:class sphn:Laterality ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasLaterality ] ; sh:targetClass sphn:BodySite . constraints:sphnBodySite_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-BodySite-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -1950,43 +1942,51 @@ constraints:sphnBodySite_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-BodySite-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:BodySite . constraints:sphnBodySurfaceArea a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( sphn:hasQuantity rdf:type ) ; - sh:property [ sh:class sphn:AdministrativeCase ; + sh:property [ sh:class ucum:m2 ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path ( sphn:hasQuantity sphn:hasUnit sphn:hasCode ) ], + [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasAdministrativeCase ], - [ sh:class sphn:BodySurfaceArea_calculationMethod ; + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasCalculationMethod ], - [ sh:class sphn:DataProvider ; + sh:path sphn:hasDeterminationDateTime ], + [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:class ucum:m2 ; + sh:path sphn:hasSubjectPseudoIdentifier ], + [ sh:class sphn:BodySurfaceArea_calculationMethod ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:path ( sphn:hasQuantity sphn:hasUnit sphn:hasCode ) ], + sh:minCount 0 ; + sh:path sphn:hasCalculationMethod ], [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasQuantity ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:class sphn:SubjectPseudoIdentifier ; + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasDeterminationDateTime ] ; + sh:path sphn:hasDataProvider ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ] ; sh:targetClass sphn:BodySurfaceArea . constraints:sphnBodySurfaceArea_Warning_Naming a sh:NodeShape ; @@ -2005,93 +2005,101 @@ constraints:sphnBodySurfaceArea_Warning_Naming a sh:NodeShape ; constraints:sphnBodySurfaceArea_calculationMethod a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type rdfs:label ) ; - sh:property [ sh:in ( sphn-individual:Other sphn-individual:DuBois sphn-individual:Mosteller ) ; + sh:property [ sh:in ( sphn-individual:DuBois sphn-individual:Other sphn-individual:Mosteller ) ; sh:path [ sh:inversePath rdf:type ] ] ; sh:targetClass sphn:BodySurfaceArea_calculationMethod . constraints:sphnBodyTemperature a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:dateTime ; + sh:property [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasDateTime ], + sh:path sphn:hasQuantity ], [ sh:class sphn:TimeSeriesDataFile ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasDataFile ], - [ sh:class sphn:Quantity ; + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasQuantity ] ; + sh:path sphn:hasDateTime ] ; sh:targetClass sphn:BodyTemperature . constraints:sphnBodyTemperatureMeasurement a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:AdministrativeCase ; - sh:maxCount 1 ; + sh:property [ sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], + sh:or ( [ sh:class sphn:Implant ] [ sh:class sphn:MedicalDevice ] ) ; + sh:path sphn:hasMedicalDevice ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class snomed:128927009 ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasMethodCode ], - [ sh:class sphn:Performer ; + [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasPerformer ], - [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:or ( [ sh:class sphn:MedicalDevice ] [ sh:class sphn:Implant ] ) ; - sh:path sphn:hasMedicalDevice ], + sh:path sphn:hasAdministrativeCase ], [ sh:class sphn:BodySite ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasBodySite ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:datatype xsd:dateTime ; + [ sh:class sphn:Performer ; sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasPerformer ], + [ sh:class sphn:BodyTemperature ; sh:minCount 1 ; - sh:path sphn:hasStartDateTime ], + sh:path sphn:hasResult ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDataProvider ], - [ sh:class sphn:BodyTemperature ; - sh:minCount 1 ; - sh:path sphn:hasResult ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasEndDateTime ] ; + sh:path sphn:hasEndDateTime ], + [ sh:class snomed:128927009 ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasMethodCode ], + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasStartDateTime ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ] ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; - sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> ?hasStartDateTime . - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasEndDateTime> ?hasEndDateTime . - FILTER (?hasStartDateTime > ?hasEndDateTime) - }""" ], - [ a sh:SPARQLConstraint ; sh:message "For sphn:hasMedicalDevice, instances of sphn:AccessDevice, sphn:LabAnalyzer are not allowed" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMedicalDevice> as ?path) (?class as ?value) WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMedicalDevice>/rdf:type ?class. FILTER(?class IN (<https://biomedit.ch/rdf/sphn-schema/sphn#AccessDevice>, <https://biomedit.ch/rdf/sphn-schema/sphn#LabAnalyzer>)) - }""" ] ; + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; + sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> ?hasStartDateTime . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasEndDateTime> ?hasEndDateTime . + FILTER (?hasStartDateTime > ?hasEndDateTime) + }""" ] ; sh:targetClass sphn:BodyTemperatureMeasurement . constraints:sphnBodyTemperatureMeasurement_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-BodyTemperatureMeasurement-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -2099,14 +2107,6 @@ constraints:sphnBodyTemperatureMeasurement_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-BodyTemperatureMeasurement-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:BodyTemperatureMeasurement . @@ -2126,62 +2126,62 @@ constraints:sphnBodyTemperature_Warning_Naming a sh:NodeShape ; constraints:sphnBodyWeight a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:DataDetermination ; + sh:property [ sh:class sphn:Quantity ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasDataDetermination ], + sh:minCount 1 ; + sh:path sphn:hasQuantity ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasDateTime ], - [ sh:class sphn:Quantity ; + [ sh:class sphn:DataDetermination ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasQuantity ] ; + sh:minCount 0 ; + sh:path sphn:hasDataDetermination ] ; sh:targetClass sphn:BodyWeight . constraints:sphnBodyWeightMeasurement a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:class sphn:MedicalDevice ; + sh:property [ sh:class sphn:MedicalDevice ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasMedicalDevice ], [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasStartDateTime ], + [ sh:class sphn:Performer ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasEndDateTime ], + sh:path sphn:hasPerformer ], + [ sh:class sphn:AdministrativeCase ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasAdministrativeCase ], [ sh:class sphn:BodyWeight ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasResult ], - [ sh:class sphn:SubjectPseudoIdentifier ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:datatype xsd:dateTime ; + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasStartDateTime ], - [ sh:class sphn:Performer ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasPerformer ], + sh:path sphn:hasDataProvider ], [ sh:class snomed:128927009 ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasMethodCode ], - [ sh:class sphn:AdministrativeCase ; + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], + sh:path sphn:hasEndDateTime ], [ sh:class sphn:SourceSystem ; sh:minCount 1 ; - sh:path sphn:hasSourceSystem ] ; + sh:path sphn:hasSourceSystem ], + [ sh:class sphn:SubjectPseudoIdentifier ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "For sphn:hasMedicalDevice, instances of sphn:AccessDevice, sphn:LabAnalyzer, sphn:Implant are not allowed" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> @@ -2203,6 +2203,14 @@ constraints:sphnBodyWeightMeasurement a sh:NodeShape ; constraints:sphnBodyWeightMeasurement_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-BodyWeightMeasurement-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -2210,14 +2218,6 @@ constraints:sphnBodyWeightMeasurement_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-BodyWeightMeasurement-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:BodyWeightMeasurement . @@ -2237,14 +2237,29 @@ constraints:sphnBodyWeight_Warning_Naming a sh:NodeShape ; constraints:sphnCardiacIndex a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( sphn:hasQuantity rdf:type ) ; - sh:property [ sh:datatype xsd:dateTime ; + sh:property [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasDeterminationDateTime ], + [ sh:class snomed:63075001 ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasMethodCode ], + [ sh:class sphn:AdministrativeCase ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasAdministrativeCase ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], + [ sh:class sphn:Quantity ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasQuantity ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; @@ -2252,35 +2267,12 @@ constraints:sphnCardiacIndex a sh:NodeShape ; [ sh:class ucum:Lperminperm2 ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path ( sphn:hasQuantity sphn:hasUnit sphn:hasCode ) ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:class snomed:63075001 ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasMethodCode ], - [ sh:class sphn:Quantity ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasQuantity ], - [ sh:class sphn:AdministrativeCase ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ] ; + sh:path ( sphn:hasQuantity sphn:hasUnit sphn:hasCode ) ] ; sh:targetClass sphn:CardiacIndex . constraints:sphnCardiacIndex_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-CardiacIndex-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -2288,20 +2280,28 @@ constraints:sphnCardiacIndex_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-CardiacIndex-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:CardiacIndex . constraints:sphnCardiacOutput a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:TimeSeriesDataFile ; + sh:property [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasDataFile ], - [ sh:datatype xsd:dateTime ; + sh:path sphn:hasDateTime ], + [ sh:class sphn:TimeSeriesDataFile ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasDateTime ], + sh:path sphn:hasDataFile ], [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; @@ -2311,28 +2311,32 @@ constraints:sphnCardiacOutput a sh:NodeShape ; constraints:sphnCardiacOutputMeasurement a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class snomed:128927009 ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasMethodCode ], - [ sh:datatype xsd:dateTime ; + sh:property [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasStartDateTime ], [ sh:class sphn:CardiacOutput ; sh:minCount 1 ; sh:path sphn:hasResult ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], + [ sh:class sphn:Performer ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasPerformer ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasEndDateTime ], - [ sh:class sphn:Performer ; + [ sh:class snomed:128927009 ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasPerformer ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], + sh:path sphn:hasMethodCode ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:or ( [ sh:class sphn:Implant ] [ sh:class sphn:MedicalDevice ] ) ; + sh:path sphn:hasMedicalDevice ], [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; @@ -2341,30 +2345,26 @@ constraints:sphnCardiacOutputMeasurement a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:or ( [ sh:class sphn:MedicalDevice ] [ sh:class sphn:Implant ] ) ; - sh:path sphn:hasMedicalDevice ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDataProvider ] ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; - sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> ?hasStartDateTime . - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasEndDateTime> ?hasEndDateTime . - FILTER (?hasStartDateTime > ?hasEndDateTime) - }""" ], - [ a sh:SPARQLConstraint ; sh:message "For sphn:hasMedicalDevice, instances of sphn:AccessDevice, sphn:LabAnalyzer are not allowed" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMedicalDevice> as ?path) (?class as ?value) WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMedicalDevice>/rdf:type ?class. FILTER(?class IN (<https://biomedit.ch/rdf/sphn-schema/sphn#AccessDevice>, <https://biomedit.ch/rdf/sphn-schema/sphn#LabAnalyzer>)) - }""" ] ; + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; + sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> ?hasStartDateTime . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasEndDateTime> ?hasEndDateTime . + FILTER (?hasStartDateTime > ?hasEndDateTime) + }""" ] ; sh:targetClass sphn:CardiacOutputMeasurement . constraints:sphnCardiacOutputMeasurement_Warning_Naming a sh:NodeShape ; @@ -2404,19 +2404,19 @@ constraints:sphnCardiacOutput_Warning_Naming a sh:NodeShape ; constraints:sphnCareHandling a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:SourceSystem ; + sh:property [ sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:maxCount 1 ; + sh:or ( [ sh:class snomed:304903009 ] [ sh:class snomed:371883000 ] [ sh:class snomed:394656005 ] ) ; + sh:path sphn:hasTypeCode ], + [ sh:class sphn:SourceSystem ; sh:minCount 1 ; - sh:or ( [ sh:class snomed:371883000 ] [ sh:class snomed:394656005 ] [ sh:class snomed:304903009 ] ) ; - sh:path sphn:hasTypeCode ] ; + sh:path sphn:hasSourceSystem ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> as ?path) (?class as ?value) WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/371883000>, <http://snomed.info/id/394656005>, <http://snomed.info/id/304903009> )) . + FILTER( ?values IN ( <http://snomed.info/id/304903009>, <http://snomed.info/id/371883000>, <http://snomed.info/id/394656005> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ] ; @@ -2425,6 +2425,14 @@ constraints:sphnCareHandling a sh:NodeShape ; constraints:sphnCareHandling_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-CareHandling-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -2432,14 +2440,6 @@ constraints:sphnCareHandling_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-CareHandling-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:CareHandling . @@ -2453,11 +2453,11 @@ constraints:sphnChromosomalLocation a sh:NodeShape ; [ sh:class sphn:Code ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasEndCytobandCode ], + sh:path sphn:hasStartCytobandCode ], [ sh:class sphn:Code ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasStartCytobandCode ] ; + sh:path sphn:hasEndCytobandCode ] ; sh:targetClass sphn:ChromosomalLocation . constraints:sphnChromosomalLocation_Warning_Naming a sh:NodeShape ; @@ -2518,54 +2518,54 @@ constraints:sphnCircumference a sh:NodeShape ; constraints:sphnCircumferenceMeasurement a sh:NodeShape ; sh:closed false ; - sh:ignoredProperties ( sphn:hasBodySite rdf:type ) ; + sh:ignoredProperties ( rdf:type sphn:hasBodySite ) ; sh:property [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasStartDateTime ], - [ sh:class sphn:BodySite ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasBodySite ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasEndDateTime ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:class sphn:MedicalDevice ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasMedicalDevice ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:DataProvider ; + [ sh:class sphn:Circumference ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:class snomed:128927009 ; + sh:path sphn:hasResult ], + [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasMethodCode ], - [ sh:class sphn:Circumference ; + sh:path sphn:hasAdministrativeCase ], + [ sh:class sphn:MedicalDevice ; sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasMedicalDevice ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:or ( [ sh:class snomed:33673004 ] [ sh:class snomed:29836001 ] [ sh:class snomed:69536005 ] [ sh:class snomed:45048000 ] ) ; + sh:path ( sphn:hasBodySite sphn:hasCode ) ], + [ sh:class sphn:SourceSystem ; sh:minCount 1 ; - sh:path sphn:hasResult ], + sh:path sphn:hasSourceSystem ], [ sh:class sphn:Performer ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasPerformer ], - [ sh:class sphn:AdministrativeCase ; + [ sh:class sphn:BodySite ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], - [ sh:maxCount 1 ; + sh:path sphn:hasBodySite ], + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasEndDateTime ], + [ sh:class snomed:128927009 ; + sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class snomed:33673004 ] [ sh:class snomed:29836001 ] [ sh:class snomed:45048000 ] [ sh:class snomed:69536005 ] ) ; - sh:path ( sphn:hasBodySite sphn:hasCode ) ] ; + sh:path sphn:hasMethodCode ], + [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) @@ -2576,19 +2576,19 @@ constraints:sphnCircumferenceMeasurement a sh:NodeShape ; }""" ], [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; - sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasBodySite>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?class as ?value) + sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasBodySite> as ?path) (?class as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasBodySite>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/33673004>, <http://snomed.info/id/29836001>, <http://snomed.info/id/45048000>, <http://snomed.info/id/69536005> )) . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasBodySite>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . + FILTER( ?values IN ( <https://biomedit.ch/rdf/sphn-schema/sphn#BodySite> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ], [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; - sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasBodySite> as ?path) (?class as ?value) + sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasBodySite>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?class as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasBodySite>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <https://biomedit.ch/rdf/sphn-schema/sphn#BodySite> )) . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasBodySite>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . + FILTER( ?values IN ( <http://snomed.info/id/33673004>, <http://snomed.info/id/29836001>, <http://snomed.info/id/69536005>, <http://snomed.info/id/45048000> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ], @@ -2616,17 +2616,17 @@ constraints:sphnCircumferenceMeasurement_Warning_Naming a sh:NodeShape ; [ a sh:SPARQLConstraint ; sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> as ?path) (?code as ?value) + SELECT ?this ("<https://biomedit.ch/rdf/sphn-schema/sphn#hasBodySite>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode>" as ?path) (?code as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> ?code . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasBodySite>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ], [ a sh:SPARQLConstraint ; sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this ("<https://biomedit.ch/rdf/sphn-schema/sphn#hasBodySite>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode>" as ?path) (?code as ?value) + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> as ?path) (?code as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasBodySite>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> ?code . FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:CircumferenceMeasurement . @@ -2651,23 +2651,23 @@ constraints:sphnCivilStatus a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasEventDateTime ], - [ sh:class sphn:SubjectPseudoIdentifier ; - sh:maxCount 1 ; + [ sh:class sphn:SourceSystem ; sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], + sh:path sphn:hasSourceSystem ], [ sh:maxCount 1 ; sh:minCount 1 ; - sh:or ( [ sh:class snomed:266945001 ] [ sh:class snomed:14012001 ] [ sh:class snomed:20295000 ] [ sh:class snomed:87915002 ] [ sh:class snomed:33553000 ] [ sh:class snomed:125681006 ] ) ; + sh:or ( [ sh:class snomed:14012001 ] [ sh:class snomed:125681006 ] [ sh:class snomed:33553000 ] [ sh:class snomed:20295000 ] [ sh:class snomed:266945001 ] [ sh:class snomed:87915002 ] ) ; sh:path sphn:hasCode ], - [ sh:class sphn:SourceSystem ; + [ sh:class sphn:SubjectPseudoIdentifier ; + sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasSourceSystem ] ; + sh:path sphn:hasSubjectPseudoIdentifier ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?class as ?value) WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/266945001>, <http://snomed.info/id/14012001>, <http://snomed.info/id/20295000>, <http://snomed.info/id/87915002>, <http://snomed.info/id/33553000>, <http://snomed.info/id/125681006> )) . + FILTER( ?values IN ( <http://snomed.info/id/14012001>, <http://snomed.info/id/125681006>, <http://snomed.info/id/33553000>, <http://snomed.info/id/20295000>, <http://snomed.info/id/266945001>, <http://snomed.info/id/87915002> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ] ; @@ -2700,11 +2700,11 @@ constraints:sphnCode a sh:NodeShape ; sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasCodingSystemAndVersion ], + sh:path sphn:hasIdentifier ], [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasIdentifier ], + sh:path sphn:hasCodingSystemAndVersion ], [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 0 ; @@ -2727,7 +2727,7 @@ constraints:sphnCode_Warning_Naming a sh:NodeShape ; constraints:sphnComparator a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type rdfs:label ) ; - sh:property [ sh:in ( sphn-individual:LessThan sphn-individual:LessThanOrEqual sphn-individual:GreaterThanOrEqual sphn-individual:GreaterThan ) ; + sh:property [ sh:in ( sphn-individual:LessThanOrEqual sphn-individual:GreaterThanOrEqual sphn-individual:LessThan sphn-individual:GreaterThan ) ; sh:path [ sh:inversePath rdf:type ] ] ; sh:targetClass sphn:Comparator . @@ -2738,44 +2738,44 @@ constraints:sphnConsent a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasTemplateIdentifier ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:or ( [ sh:class snomed:385645004 ] [ sh:class snomed:443390004 ] [ sh:class snomed:225795001 ] ) ; + sh:path sphn:hasStatusCode ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDataProvider ], - [ sh:class sphn:SubjectPseudoIdentifier ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:maxCount 1 ; - sh:minCount 1 ; - sh:or ( [ sh:class snomed:60132005 ] [ sh:class snomed:410529002 ] [ sh:class snomed:69658003 ] ) ; - sh:path sphn:hasTypeCode ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDateTime ], + [ sh:class sphn:SubjectPseudoIdentifier ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ], [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:or ( [ sh:class snomed:385645004 ] [ sh:class snomed:225795001 ] [ sh:class snomed:443390004 ] ) ; - sh:path sphn:hasStatusCode ], - [ sh:class sphn:SourceSystem ; sh:minCount 1 ; - sh:path sphn:hasSourceSystem ] ; + sh:or ( [ sh:class snomed:69658003 ] [ sh:class snomed:60132005 ] [ sh:class snomed:410529002 ] ) ; + sh:path sphn:hasTypeCode ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; - sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStatusCode> as ?path) (?class as ?value) + sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> as ?path) (?class as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasStatusCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/385645004>, <http://snomed.info/id/225795001>, <http://snomed.info/id/443390004> )) . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . + FILTER( ?values IN ( <http://snomed.info/id/69658003>, <http://snomed.info/id/60132005>, <http://snomed.info/id/410529002> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ], [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; - sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> as ?path) (?class as ?value) + sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStatusCode> as ?path) (?class as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/60132005>, <http://snomed.info/id/410529002>, <http://snomed.info/id/69658003> )) . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasStatusCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . + FILTER( ?values IN ( <http://snomed.info/id/385645004>, <http://snomed.info/id/443390004>, <http://snomed.info/id/225795001> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ] ; @@ -2791,6 +2791,14 @@ constraints:sphnConsent_Warning_Naming a sh:NodeShape ; ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> ?code . FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStatusCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasStatusCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) + }""" ], [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Consent-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> @@ -2799,31 +2807,20 @@ constraints:sphnConsent_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-Consent-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStatusCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasStatusCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:Consent . constraints:sphnCopyNumberVariation a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type sphn:hasTotalCopyNumber ) ; - sh:property [ sh:class sphn:GenomicPosition ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasGenomicPosition ], - [ sh:class ucum:cblcopycbr ; + sh:property [ sh:class ucum:cblcopycbr ; sh:maxCount 1 ; sh:minCount 0 ; sh:path ( sphn:hasTotalCopyNumber sphn:hasUnit sphn:hasCode ) ], - [ sh:class sphn:Gene ; - sh:minCount 0 ; - sh:path sphn:hasAffectedGenomicFeature ], + [ sh:maxCount 1 ; + sh:minCount 1 ; + sh:or ( [ sh:class so:0001742 ] [ sh:class so:0001743 ] ) ; + sh:path sphn:hasTypeCode ], [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; @@ -2832,10 +2829,13 @@ constraints:sphnCopyNumberVariation a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasChromosomalLocation ], - [ sh:maxCount 1 ; - sh:minCount 1 ; - sh:or ( [ sh:class so:0001742 ] [ sh:class so:0001743 ] ) ; - sh:path sphn:hasTypeCode ] ; + [ sh:class sphn:Gene ; + sh:minCount 0 ; + sh:path sphn:hasAffectedGenomicFeature ], + [ sh:class sphn:GenomicPosition ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasGenomicPosition ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> as ?path) (?class as ?value) @@ -2946,14 +2946,14 @@ constraints:sphnDataDetermination a sh:NodeShape ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:maxCount 1 ; sh:minCount 1 ; - sh:or ( [ sh:class snomed:258104002 ] [ sh:class snomed:258090004 ] [ sh:class snomed:263760002 ] [ sh:class snomed:414135002 ] [ sh:class snomed:87982008 ] ) ; + sh:or ( [ sh:class snomed:258090004 ] [ sh:class snomed:263760002 ] [ sh:class snomed:258104002 ] [ sh:class snomed:87982008 ] [ sh:class snomed:414135002 ] ) ; sh:path sphn:hasMethodCode ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> as ?path) (?class as ?value) WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/258104002>, <http://snomed.info/id/258090004>, <http://snomed.info/id/263760002>, <http://snomed.info/id/414135002>, <http://snomed.info/id/87982008> )) . + FILTER( ?values IN ( <http://snomed.info/id/258090004>, <http://snomed.info/id/263760002>, <http://snomed.info/id/258104002>, <http://snomed.info/id/87982008>, <http://snomed.info/id/414135002> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ] ; @@ -2983,40 +2983,40 @@ constraints:sphnDataDetermination_Warning_Naming a sh:NodeShape ; constraints:sphnDataFile a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:SourceSystem ; + sh:property [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], + sh:path sphn:hasDataProvider ], + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasCreationDateTime ], [ sh:class sphn:Hash ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasHash ], - [ sh:class sphn:DataFile_encoding ; + [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasEncoding ], - [ sh:datatype xsd:dateTime ; + sh:path sphn:hasUniformResourceIdentifier ], + [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasCreationDateTime ], - [ sh:class edam:format_1915 ; + sh:path sphn:hasName ], + [ sh:class sphn:DataFile_encoding ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasFormatCode ], - [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; + sh:path sphn:hasEncoding ], + [ sh:class sphn:SourceSystem ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:datatype xsd:string ; + sh:path sphn:hasSourceSystem ], + [ sh:class edam:format_1915 ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasName ], + sh:path sphn:hasFormatCode ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:minCount 0 ; - sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:datatype xsd:string ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasUniformResourceIdentifier ] ; + sh:path sphn:hasSubjectPseudoIdentifier ] ; sh:target [ a sh:SPARQLTarget ; sh:select """SELECT ?this WHERE { @@ -3055,54 +3055,54 @@ constraints:sphnDataFile_Warning_Naming a sh:NodeShape ; constraints:sphnDataFile_encoding a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type rdfs:label ) ; - sh:property [ sh:in ( sphn-individual:UTF16 sphn-individual:ASCII sphn-individual:UTF8 sphn-individual:ISO88591 ) ; + sh:property [ sh:in ( sphn-individual:UTF8 sphn-individual:UTF16 sphn-individual:ASCII sphn-individual:ISO88591 ) ; sh:path [ sh:inversePath rdf:type ] ] ; sh:targetClass sphn:DataFile_encoding . constraints:sphnDataProcessing a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:dateTime ; + sh:property [ sh:class sphn:StandardOperatingProcedure ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasStartDateTime ], + sh:path sphn:hasStandardOperatingProcedure ], + [ sh:minCount 0 ; + sh:or ( [ sh:class sphn:DataFile ] [ sh:class sphn:TimeSeriesDataFile ] ) ; + sh:path sphn:hasInput ], + [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:minCount 0 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:minCount 0 ; - sh:or ( [ sh:class sphn:TimeSeriesDataFile ] [ sh:class sphn:DataFile ] ) ; - sh:path sphn:hasOutput ], - [ sh:class sphn:QualityControlMetric ; + [ sh:class sphn:Software ; + sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasQualityControlMetric ], - [ sh:minCount 0 ; - sh:or ( [ sh:class sphn:TimeSeriesDataFile ] [ sh:class sphn:DataFile ] ) ; - sh:path sphn:hasInput ], + sh:path sphn:hasSoftware ], [ sh:maxCount 1 ; sh:minCount 1 ; - sh:or ( [ sh:class edam:operation_0004 ] [ sh:class sphn:Code ] [ sh:class obi:0200000 ] [ sh:class sphn:Terminology ] ) ; + sh:or ( [ sh:class obi:0200000 ] [ sh:class edam:operation_0004 ] [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] ) ; sh:path sphn:hasCode ], [ sh:minCount 0 ; sh:or ( [ sh:class sphn:Assay ] [ sh:class sphn:DataProcessing ] ) ; sh:path sphn:hasPredecessor ], - [ sh:class sphn:Software ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasSoftware ], - [ sh:class sphn:StandardOperatingProcedure ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasStandardOperatingProcedure ], [ sh:class sphn:AdministrativeCase ; sh:minCount 0 ; sh:path sphn:hasAdministrativeCase ], - [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; + [ sh:minCount 0 ; + sh:or ( [ sh:class sphn:DataFile ] [ sh:class sphn:TimeSeriesDataFile ] ) ; + sh:path sphn:hasOutput ], + [ sh:class sphn:SourceSystem ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ] ; + sh:path sphn:hasSourceSystem ], + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasStartDateTime ], + [ sh:class sphn:QualityControlMetric ; + sh:minCount 0 ; + sh:path sphn:hasQualityControlMetric ] ; sh:target [ a sh:SPARQLTarget ; sh:select """SELECT ?this WHERE { @@ -3223,22 +3223,22 @@ constraints:sphnDataProvider_Warning_Naming a sh:NodeShape ; constraints:sphnDataProvider_category a sh:NodeShape ; sh:closed false ; - sh:ignoredProperties ( rdf:type rdfs:label ) ; - sh:property [ sh:in ( sphn-individual:ServiceProvider sphn-individual:ExternalLaboratory sphn-individual:Hospital sphn-individual:Company sphn-individual:University sphn-individual:ResearchOrganization sphn-individual:PrivatePractice sphn-individual:Pharmacy sphn-individual:HealthInsurance sphn-individual:FederalOffice ) ; + sh:ignoredProperties ( rdfs:label rdf:type ) ; + sh:property [ sh:in ( sphn-individual:ServiceProvider sphn-individual:PrivatePractice sphn-individual:HealthInsurance sphn-individual:ResearchOrganization sphn-individual:University sphn-individual:Pharmacy sphn-individual:Company sphn-individual:Hospital sphn-individual:FederalOffice sphn-individual:ExternalLaboratory ) ; sh:path [ sh:inversePath rdf:type ] ] ; sh:targetClass sphn:DataProvider_category . constraints:sphnDataRelease a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:DataProvider ; + sh:property [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:datatype xsd:dateTime ; + sh:path sphn:hasExtractionDateTime ], + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasExtractionDateTime ] ; + sh:path sphn:hasDataProvider ] ; sh:targetClass sphn:DataRelease . constraints:sphnDataRelease_Warning_Naming a sh:NodeShape ; @@ -3257,69 +3257,69 @@ constraints:sphnDataRelease_Warning_Naming a sh:NodeShape ; constraints:sphnDeath a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:AdministrativeCase ; - sh:maxCount 1 ; + sh:property [ sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], + sh:or ( [ sh:class sphn:Code ] [ sh:class snomed:64572001 ] ) ; + sh:path sphn:hasConditionCode ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:or ( [ sh:class sphn:Code ] [ sh:class snomed:419620001 ] ) ; sh:path sphn:hasCircumstanceCode ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:class sphn:SubjectPseudoIdentifier ; + [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class snomed:64572001 ] ) ; - sh:path sphn:hasConditionCode ], + sh:path sphn:hasAdministrativeCase ], + [ sh:class sphn:DeathDate ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasDate ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasReportDateTime ], - [ sh:class sphn:DataProvider ; + [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:class sphn:DeathDate ; + sh:path sphn:hasSubjectPseudoIdentifier ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasDate ] ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ] ; sh:targetClass sphn:Death . constraints:sphnDeathDate a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:datatype xsd:gMonth ; + sh:property [ sh:datatype xsd:time ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasMonth ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], + sh:path sphn:hasTime ], [ sh:datatype xsd:gYear ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasYear ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], [ sh:datatype xsd:gDay ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasDay ], + [ sh:datatype xsd:gMonth ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasMonth ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:datatype xsd:time ; + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasTime ] ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ] ; sh:targetClass sphn:DeathDate . constraints:sphnDeathDate_Warning_Naming a sh:NodeShape ; @@ -3373,32 +3373,32 @@ constraints:sphnDepartment_Warning_Naming a sh:NodeShape ; constraints:sphnDiagnosis a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:Age ; + sh:property [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasSubjectAge ], + sh:path sphn:hasAdministrativeCase ], + [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasRecordDateTime ], - [ sh:class sphn:AdministrativeCase ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], + [ sh:minCount 1 ; + sh:or ( [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] ) ; + sh:path sphn:hasCode ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], + sh:path sphn:hasSubjectPseudoIdentifier ], [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], - [ sh:minCount 1 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class sphn:Terminology ] ) ; - sh:path sphn:hasCode ] ; + [ sh:class sphn:Age ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasSubjectAge ] ; sh:target [ a sh:SPARQLTarget ; sh:select """SELECT ?this WHERE { @@ -3490,23 +3490,23 @@ constraints:sphnDiagnosis_Warning_Naming a sh:NodeShape ; constraints:sphnDrug a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:class sphn:Quantity ; - sh:maxCount 1 ; + sh:property [ sh:class sphn:Substance ; sh:minCount 0 ; - sh:path sphn:hasQuantity ], + sh:path sphn:hasInactiveIngredient ], + [ sh:class sphn:Substance ; + sh:minCount 0 ; + sh:path sphn:hasActiveIngredient ], [ sh:class sphn:DrugArticle ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasArticle ], - [ sh:class sphn:Substance ; - sh:minCount 0 ; - sh:path sphn:hasActiveIngredient ], - [ sh:class sphn:Substance ; + [ sh:class sphn:Quantity ; + sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasInactiveIngredient ] ; + sh:path sphn:hasQuantity ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ] ; sh:targetClass sphn:Drug . constraints:sphnDrugAdministrationEvent a sh:NodeShape ; @@ -3520,58 +3520,58 @@ constraints:sphnDrugAdministrationEvent a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasDuration ], - [ sh:datatype xsd:dateTime ; + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasStartDateTime ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasEndDateTime ], + sh:path sphn:hasDataProvider ], [ sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class snomed:441308009 ] [ sh:class snomed:182844005 ] [ sh:class snomed:182845006 ] [ sh:class snomed:395007004 ] [ sh:class snomed:182872003 ] [ sh:class snomed:74964007 ] [ sh:class snomed:31438003 ] [ sh:class snomed:395009001 ] [ sh:class snomed:419620001 ] [ sh:class snomed:182846007 ] [ sh:class snomed:399307001 ] ) ; + sh:or ( [ sh:class snomed:441308009 ] [ sh:class snomed:31438003 ] [ sh:class snomed:182844005 ] [ sh:class snomed:74964007 ] [ sh:class snomed:395009001 ] [ sh:class snomed:399307001 ] [ sh:class snomed:182872003 ] [ sh:class snomed:419620001 ] [ sh:class snomed:395007004 ] [ sh:class snomed:182845006 ] [ sh:class snomed:182846007 ] ) ; sh:path sphn:hasReasonToStopCode ], [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasAdministrativeCase ], - [ sh:class snomed:284009009 ; + [ sh:class sphn:TimePattern ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasAdministrationRouteCode ], - [ sh:class sphn:DataProvider ; + sh:path sphn:hasTimePattern ], + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ], + sh:path sphn:hasStartDateTime ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:TimePattern ; + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasTimePattern ], + sh:path sphn:hasEndDateTime ], [ sh:class sphn:SourceSystem ; sh:minCount 1 ; - sh:path sphn:hasSourceSystem ] ; + sh:path sphn:hasSourceSystem ], + [ sh:class snomed:284009009 ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasAdministrationRouteCode ] ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; - sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> ?hasStartDateTime . - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasEndDateTime> ?hasEndDateTime . - FILTER (?hasStartDateTime > ?hasEndDateTime) - }""" ], - [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasReasonToStopCode> as ?path) (?class as ?value) WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasReasonToStopCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/441308009>, <http://snomed.info/id/182844005>, <http://snomed.info/id/182845006>, <http://snomed.info/id/395007004>, <http://snomed.info/id/182872003>, <http://snomed.info/id/74964007>, <http://snomed.info/id/31438003>, <http://snomed.info/id/395009001>, <http://snomed.info/id/419620001>, <http://snomed.info/id/182846007>, <http://snomed.info/id/399307001> )) . + FILTER( ?values IN ( <http://snomed.info/id/441308009>, <http://snomed.info/id/31438003>, <http://snomed.info/id/182844005>, <http://snomed.info/id/74964007>, <http://snomed.info/id/395009001>, <http://snomed.info/id/399307001>, <http://snomed.info/id/182872003>, <http://snomed.info/id/419620001>, <http://snomed.info/id/395007004>, <http://snomed.info/id/182845006>, <http://snomed.info/id/182846007> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} - }""" ] ; + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; + sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> ?hasStartDateTime . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasEndDateTime> ?hasEndDateTime . + FILTER (?hasStartDateTime > ?hasEndDateTime) + }""" ] ; sh:targetClass sphn:DrugAdministrationEvent . constraints:sphnDrugAdministrationEvent_Warning_Naming a sh:NodeShape ; @@ -3579,9 +3579,9 @@ constraints:sphnDrugAdministrationEvent_Warning_Naming a sh:NodeShape ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasAdministrationRouteCode> as ?path) (?code as ?value) + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasReasonToStopCode> as ?path) (?code as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasAdministrationRouteCode> ?code . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasReasonToStopCode> ?code . FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ], [ a sh:SPARQLConstraint ; @@ -3596,9 +3596,9 @@ constraints:sphnDrugAdministrationEvent_Warning_Naming a sh:NodeShape ; [ a sh:SPARQLConstraint ; sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasReasonToStopCode> as ?path) (?code as ?value) + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasAdministrationRouteCode> as ?path) (?code as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasReasonToStopCode> ?code . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasAdministrationRouteCode> ?code . FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:DrugAdministrationEvent . @@ -3606,21 +3606,21 @@ constraints:sphnDrugAdministrationEvent_Warning_Naming a sh:NodeShape ; constraints:sphnDrugArticle a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; + sh:property [ sh:class sphn:PharmaceuticalDoseForm ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasName ], + sh:path sphn:hasManufacturedDoseForm ], [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], - [ sh:class sphn:PharmaceuticalDoseForm ; + [ sh:class sphn:Code ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasManufacturedDoseForm ], - [ sh:class sphn:Code ; + sh:path sphn:hasCode ], + [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasCode ] ; + sh:path sphn:hasName ] ; sh:targetClass sphn:DrugArticle . constraints:sphnDrugArticle_Warning_Naming a sh:NodeShape ; @@ -3639,43 +3639,47 @@ constraints:sphnDrugArticle_Warning_Naming a sh:NodeShape ; constraints:sphnDrugPrescription a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:Quantity ; + sh:property [ sh:class sphn:Intent ; + sh:minCount 0 ; + sh:path sphn:hasIntent ], + [ sh:class sphn:SubjectPseudoIdentifier ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ], + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasFrequency ], + sh:path sphn:hasRecordDateTime ], + [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ], [ sh:class sphn:Drug ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDrug ], - [ sh:class snomed:284009009 ; + [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasAdministrationRouteCode ], + sh:path sphn:hasFrequency ], + [ sh:minCount 0 ; + sh:or ( [ sh:class sphn:OncologyDiagnosis ] [ sh:class sphn:Diagnosis ] [ sh:class sphn:BilledDiagnosis ] [ sh:class sphn:NursingDiagnosis ] ) ; + sh:path sphn:hasIndicationToStart ], [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasAdministrativeCase ], - [ sh:class sphn:Intent ; + [ sh:class snomed:284009009 ; + sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasIntent ], - [ sh:class sphn:DataProvider ; + sh:path sphn:hasAdministrationRouteCode ], + [ sh:class sphn:TimePattern ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:minCount 0 ; - sh:or ( [ sh:class sphn:NursingDiagnosis ] [ sh:class sphn:OncologyDiagnosis ] [ sh:class sphn:BilledDiagnosis ] [ sh:class sphn:Diagnosis ] ) ; - sh:path sphn:hasIndicationToStart ], + sh:minCount 0 ; + sh:path sphn:hasTimePattern ], [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasRecordDateTime ], - [ sh:class sphn:SubjectPseudoIdentifier ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3683,11 +3687,7 @@ constraints:sphnDrugPrescription a sh:NodeShape ; [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasLastAdministrationDateTime ], - [ sh:class sphn:TimePattern ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasTimePattern ] ; + sh:path sphn:hasLastAdministrationDateTime ] ; sh:targetClass sphn:DrugPrescription . constraints:sphnDrugPrescription_Warning_Naming a sh:NodeShape ; @@ -3755,45 +3755,26 @@ constraints:sphnElectrocardiogram_Warning_Naming a sh:NodeShape ; constraints:sphnElectrocardiographicProcedure a sh:NodeShape ; sh:closed false ; - sh:ignoredProperties ( rdf:type sphn:hasSubjectPhysiologicState sphn:hasIntent ) ; + sh:ignoredProperties ( rdf:type sphn:hasIntent sphn:hasSubjectPhysiologicState ) ; sh:property [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:or ( [ sh:class snomed:360156006 ] [ sh:class snomed:261004008 ] ) ; - sh:path ( sphn:hasIntent sphn:hasCode ) ], - [ sh:class sphn:PhysiologicState ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasSubjectPhysiologicState ], - [ sh:class sphn:Quantity ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasNumberOfLeads ], - [ sh:maxCount 1 ; sh:minCount 0 ; sh:or ( [ sh:class snomed:128976003 ] [ sh:class snomed:128975004 ] ) ; sh:path ( sphn:hasSubjectPhysiologicState sphn:hasCode ) ], - [ sh:class sphn:SubjectPseudoIdentifier ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasAdministrativeCase ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasEndDateTime ], [ sh:class snomed:29303009 ; sh:minCount 1 ; sh:path sphn:hasCode ], - [ sh:class sphn:Electrocardiogram ; + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:or ( [ sh:class snomed:360156006 ] [ sh:class snomed:261004008 ] ) ; + sh:path ( sphn:hasIntent sphn:hasCode ) ], + [ sh:class sphn:PhysiologicState ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasOutput ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], + sh:path sphn:hasSubjectPhysiologicState ], [ sh:class sphn:BodySite ; sh:minCount 0 ; sh:path sphn:hasBodySite ], @@ -3801,24 +3782,34 @@ constraints:sphnElectrocardiographicProcedure a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasStartDateTime ], + [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ], [ sh:class sphn:Intent ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasIntent ], - [ sh:class sphn:DataProvider ; + [ sh:class sphn:Electrocardiogram ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasOutput ], + [ sh:class sphn:Quantity ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasNumberOfLeads ], + [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ] ; + sh:path sphn:hasSubjectPseudoIdentifier ], + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasEndDateTime ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ] ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "No descendents (all subclasses) of the specified codes are allowed" ; - sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasIntent>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?class as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasIntent>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/360156006>, <http://snomed.info/id/261004008> )) . - FILTER (?class NOT IN ( ?values ) ) . - FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} - }""" ], - [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasIntent> as ?path) (?class as ?value) WHERE { @@ -3844,6 +3835,15 @@ constraints:sphnElectrocardiographicProcedure a sh:NodeShape ; FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ], + [ a sh:SPARQLConstraint ; + sh:message "No descendents (all subclasses) of the specified codes are allowed" ; + sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasIntent>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?class as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasIntent>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . + FILTER( ?values IN ( <http://snomed.info/id/360156006>, <http://snomed.info/id/261004008> )) . + FILTER (?class NOT IN ( ?values ) ) . + FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} + }""" ], [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasSubjectPhysiologicState>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?class as ?value) @@ -3865,6 +3865,14 @@ constraints:sphnElectrocardiographicProcedure_Warning_Naming a sh:NodeShape ; ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasIntent>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this ("<https://biomedit.ch/rdf/sphn-schema/sphn#hasSubjectPhysiologicState>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode>" as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasSubjectPhysiologicState>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) + }""" ], [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-ElectrocardiographicProcedure-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> @@ -3881,34 +3889,19 @@ constraints:sphnElectrocardiographicProcedure_Warning_Naming a sh:NodeShape ; WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this ("<https://biomedit.ch/rdf/sphn-schema/sphn#hasSubjectPhysiologicState>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode>" as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasSubjectPhysiologicState>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:ElectrocardiographicProcedure . constraints:sphnExcludedDisorder a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:minCount 1 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class sphn:Terminology ] ) ; - sh:path sphn:hasCode ], - [ sh:class sphn:SourceSystem ; + sh:property [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasRecordDateTime ], - [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; @@ -3916,7 +3909,14 @@ constraints:sphnExcludedDisorder a sh:NodeShape ; [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ] ; + sh:path sphn:hasAdministrativeCase ], + [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ], + [ sh:minCount 1 ; + sh:or ( [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] ) ; + sh:path sphn:hasCode ] ; sh:targetClass sphn:ExcludedDisorder . constraints:sphnExcludedDisorder_Warning_Codes a sh:NodeShape ; @@ -3981,33 +3981,41 @@ constraints:sphnExposure a sh:NodeShape ; sh:property [ sh:class snomed:138875005 ; sh:minCount 0 ; sh:path sphn:hasRouteCode ], - [ sh:class snomed:138875005 ; + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasAgentCode ], + sh:path sphn:hasEndDateTime ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasRecordDateTime ], + sh:path sphn:hasStartDateTime ], [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasAdministrativeCase ], + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasRecordDateTime ], + [ sh:class sphn:Quantity ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasQuantity ], [ sh:class snomed:138875005 ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasDegreeCode ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], + sh:path sphn:hasAgentCode ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:Quantity ; + [ sh:class snomed:138875005 ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasQuantity ], + sh:path sphn:hasDegreeCode ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; @@ -4015,15 +4023,7 @@ constraints:sphnExposure a sh:NodeShape ; [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasStartDateTime ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasEndDateTime ] ; + sh:path sphn:hasDataProvider ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) @@ -4047,36 +4047,36 @@ constraints:sphnExposure a sh:NodeShape ; constraints:sphnExposure_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Exposure-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasDegreeCode> as ?path) (?code as ?value) + PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> + SELECT ?this (?class as ?path) (?this as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasDegreeCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) + ?this rdf:type ?class . + FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-Exposure-.*$")) }""" ], [ a sh:SPARQLConstraint ; sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasAgentCode> as ?path) (?code as ?value) + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasDegreeCode> as ?path) (?code as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasAgentCode> ?code . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasDegreeCode> ?code . FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ], [ a sh:SPARQLConstraint ; - sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Exposure-.*$'" ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> - SELECT ?this (?class as ?path) (?this as ?value) + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasRouteCode> as ?path) (?code as ?value) WHERE { - ?this rdf:type ?class . - FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-Exposure-.*$")) + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasRouteCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ], [ a sh:SPARQLConstraint ; sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasRouteCode> as ?path) (?code as ?value) + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasAgentCode> as ?path) (?code as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasRouteCode> ?code . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasAgentCode> ?code . FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:target [ a sh:SPARQLTarget ; @@ -4094,11 +4094,7 @@ constraints:sphnExposure_Warning_Naming a sh:NodeShape ; constraints:sphnFluidBalance a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:Quantity ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasQuantity ], - [ sh:class sphn:DataProvider ; + sh:property [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDataProvider ], @@ -4106,6 +4102,13 @@ constraints:sphnFluidBalance a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasStartDateTime ], + [ sh:class sphn:Quantity ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasQuantity ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4114,16 +4117,13 @@ constraints:sphnFluidBalance a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasAdministrativeCase ], - [ sh:class sphn:FluidInputOutput ; - sh:minCount 0 ; - sh:path sphn:hasFluidInputOutput ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ] ; + sh:path sphn:hasSubjectPseudoIdentifier ], + [ sh:class sphn:FluidInputOutput ; + sh:minCount 0 ; + sh:path sphn:hasFluidInputOutput ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) @@ -4150,10 +4150,18 @@ constraints:sphnFluidBalance_Warning_Naming a sh:NodeShape ; constraints:sphnFluidInputOutput a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( sphn:hasSubstance rdf:type ) ; - sh:property [ sh:datatype xsd:dateTime ; + sh:property [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasEndDateTime ], + sh:path sphn:hasDataProvider ], + [ sh:class snomed:33463005 ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path ( sphn:hasSubstance sphn:hasCode ) ], + [ sh:class sphn:Substance ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasSubstance ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4161,26 +4169,18 @@ constraints:sphnFluidInputOutput a sh:NodeShape ; [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], + [ sh:class sphn:SubjectPseudoIdentifier ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ], [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasAdministrativeCase ], - [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:class snomed:33463005 ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path ( sphn:hasSubstance sphn:hasCode ) ], - [ sh:class sphn:Substance ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasSubstance ], - [ sh:class sphn:SubjectPseudoIdentifier ; + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ] ; + sh:path sphn:hasEndDateTime ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) @@ -4215,29 +4215,29 @@ constraints:sphnFluidInputOutput_Warning_Naming a sh:NodeShape ; constraints:sphnFollowUp a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:dateTime ; + sh:property [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasDateTime ], + sh:minCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ], + [ sh:class sphn:VitalStatus ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasResult ], [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], - [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:or ( [ sh:class snomed:281036007 ] [ sh:class snomed:386473003 ] ) ; - sh:path sphn:hasCode ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDataProvider ], - [ sh:class sphn:VitalStatus ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasResult ], - [ sh:class sphn:SubjectPseudoIdentifier ; + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:or ( [ sh:class snomed:281036007 ] [ sh:class snomed:386473003 ] ) ; + sh:path sphn:hasCode ], + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ] ; + sh:minCount 0 ; + sh:path sphn:hasDateTime ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?class as ?value) @@ -4278,7 +4278,7 @@ constraints:sphnGene a sh:NodeShape ; sh:path sphn:hasTranscript ], [ sh:maxCount 1 ; sh:minCount 1 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class sphn:Terminology ] ) ; + sh:or ( [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] ) ; sh:path sphn:hasCode ], [ sh:class sphn:Organism ; sh:maxCount 1 ; @@ -4295,13 +4295,13 @@ constraints:sphnGenePanel a sh:NodeShape ; sh:property [ sh:class sphn:DataFile ; sh:minCount 0 ; sh:path sphn:hasDataFile ], + [ sh:class sphn:Gene ; + sh:minCount 1 ; + sh:path sphn:hasFocusGene ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:class sphn:Gene ; - sh:minCount 1 ; - sh:path sphn:hasFocusGene ] ; + sh:path sphn:hasDataProvider ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "For sphn:hasDataFile, instances of sphn:TimeSeriesDataFile are not allowed" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> @@ -4429,27 +4429,27 @@ constraints:sphnGeneticVariation_Warning_Naming a sh:NodeShape ; constraints:sphnGenomicDeletion a sh:NodeShape ; sh:closed false ; - sh:ignoredProperties ( sphn:hasSequenceLength rdf:type ) ; - sh:property [ sh:class ucum:cblbase_paircbr ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path ( sphn:hasSequenceLength sphn:hasUnit sphn:hasCode ) ], - [ sh:class sphn:Quantity ; + sh:ignoredProperties ( rdf:type sphn:hasSequenceLength ) ; + sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasSequenceLength ], - [ sh:datatype xsd:string ; + sh:path sphn:hasGenomicSequence ], + [ sh:class sphn:ChromosomalLocation ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasGenomicSequence ], + sh:path sphn:hasChromosomalLocation ], [ sh:class sphn:GenomicPosition ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasGenomicPosition ], - [ sh:class sphn:ChromosomalLocation ; + [ sh:class ucum:cblbase_paircbr ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path ( sphn:hasSequenceLength sphn:hasUnit sphn:hasCode ) ], + [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasChromosomalLocation ] ; + sh:path sphn:hasSequenceLength ] ; sh:targetClass sphn:GenomicDeletion . constraints:sphnGenomicDeletion_Warning_Naming a sh:NodeShape ; @@ -4467,27 +4467,27 @@ constraints:sphnGenomicDeletion_Warning_Naming a sh:NodeShape ; constraints:sphnGenomicInsertion a sh:NodeShape ; sh:closed false ; - sh:ignoredProperties ( sphn:hasSequenceLength rdf:type ) ; - sh:property [ sh:datatype xsd:string ; + sh:ignoredProperties ( rdf:type sphn:hasSequenceLength ) ; + sh:property [ sh:class sphn:GenomicPosition ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasGenomicSequence ], - [ sh:class ucum:cblbase_paircbr ; + sh:path sphn:hasGenomicPosition ], + [ sh:class sphn:ChromosomalLocation ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path ( sphn:hasSequenceLength sphn:hasUnit sphn:hasCode ) ], + sh:path sphn:hasChromosomalLocation ], [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasSequenceLength ], - [ sh:class sphn:GenomicPosition ; + [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasGenomicPosition ], - [ sh:class sphn:ChromosomalLocation ; + sh:path sphn:hasGenomicSequence ], + [ sh:class ucum:cblbase_paircbr ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasChromosomalLocation ] ; + sh:path ( sphn:hasSequenceLength sphn:hasUnit sphn:hasCode ) ] ; sh:targetClass sphn:GenomicInsertion . constraints:sphnGenomicInsertion_Warning_Naming a sh:NodeShape ; @@ -4510,14 +4510,14 @@ constraints:sphnGenomicPosition a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasEnd ], - [ sh:class sphn:GenomicPosition_coordinateConvention ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasCoordinateConvention ], [ sh:class sphn:ReferenceSequence ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasReference ], + [ sh:class sphn:GenomicPosition_coordinateConvention ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasCoordinateConvention ], [ sh:datatype xsd:double ; sh:maxCount 1 ; sh:minCount 1 ; @@ -4540,36 +4540,36 @@ constraints:sphnGenomicPosition_Warning_Naming a sh:NodeShape ; constraints:sphnGenomicPosition_coordinateConvention a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type rdfs:label ) ; - sh:property [ sh:in ( sphn-individual:InterResidueCoordinates sphn-individual:ResidueCoordinates ) ; + sh:property [ sh:in ( sphn-individual:ResidueCoordinates sphn-individual:InterResidueCoordinates ) ; sh:path [ sh:inversePath rdf:type ] ] ; sh:targetClass sphn:GenomicPosition_coordinateConvention . constraints:sphnGestationalAgeAtBirth a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( sphn:hasQuantity rdf:type ) ; - sh:property [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:class sphn:AdministrativeCase ; + sh:property [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasAdministrativeCase ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasQuantity ], - [ sh:class sphn:DataProvider ; + [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ], + sh:path sphn:hasSubjectPseudoIdentifier ], [ sh:class ucum:d ; sh:maxCount 1 ; sh:minCount 1 ; sh:path ( sphn:hasQuantity sphn:hasUnit sphn:hasCode ) ], - [ sh:class sphn:SubjectPseudoIdentifier ; + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ] ; + sh:path sphn:hasDataProvider ] ; sh:targetClass sphn:GestationalAgeAtBirth . constraints:sphnGestationalAgeAtBirth_Warning_Naming a sh:NodeShape ; @@ -4588,14 +4588,14 @@ constraints:sphnGestationalAgeAtBirth_Warning_Naming a sh:NodeShape ; constraints:sphnHash a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; + sh:property [ sh:class sphn:Hash_algorithm ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasStringValue ], - [ sh:class sphn:Hash_algorithm ; + sh:path sphn:hasAlgorithm ], + [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasAlgorithm ] ; + sh:path sphn:hasStringValue ] ; sh:targetClass sphn:Hash . constraints:sphnHash_Warning_Naming a sh:NodeShape ; @@ -4614,29 +4614,17 @@ constraints:sphnHash_Warning_Naming a sh:NodeShape ; constraints:sphnHash_algorithm a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type rdfs:label ) ; - sh:property [ sh:in ( sphn-individual:MD5 sphn-individual:SHA256 sphn-individual:SHA512 ) ; + sh:property [ sh:in ( sphn-individual:SHA256 sphn-individual:SHA512 sphn-individual:MD5 ) ; sh:path [ sh:inversePath rdf:type ] ] ; sh:targetClass sphn:Hash_algorithm . constraints:sphnHealthcareEncounter a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasIdentifier ], - [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:class sphn:SubjectPseudoIdentifier ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:Location ; + sh:property [ sh:class sphn:Location ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasTargetLocation ], + sh:path sphn:hasOriginLocation ], [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], @@ -4648,10 +4636,14 @@ constraints:sphnHealthcareEncounter a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasCurrentLocation ], - [ sh:datatype xsd:dateTime ; + [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasEndDateTime ], + sh:minCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ], + [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ], [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; @@ -4659,11 +4651,19 @@ constraints:sphnHealthcareEncounter a sh:NodeShape ; [ sh:class sphn:Location ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasOriginLocation ], + sh:path sphn:hasTargetLocation ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasIdentifier ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasStartDateTime ] ; + sh:path sphn:hasStartDateTime ], + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasEndDateTime ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) @@ -4690,18 +4690,18 @@ constraints:sphnHealthcareEncounter_Warning_Naming a sh:NodeShape ; constraints:sphnHealthcarePrimaryInformationSystem a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasName ], - [ sh:class snomed:706593004 ; + sh:property [ sh:class snomed:706593004 ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasCode ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasDataProvider ] ; + sh:path sphn:hasDataProvider ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasName ] ; sh:targetClass sphn:HealthcarePrimaryInformationSystem . constraints:sphnHealthcarePrimaryInformationSystem_Warning_Naming a sh:NodeShape ; @@ -4728,82 +4728,82 @@ constraints:sphnHealthcarePrimaryInformationSystem_Warning_Naming a sh:NodeShape constraints:sphnHeartRate a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:maxCount 1 ; + sh:property [ sh:class sphn:TimeSeriesDataFile ; + sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class snomed:271636001 ] [ sh:class snomed:61086009 ] ) ; - sh:path sphn:hasRegularityCode ], + sh:path sphn:hasDataFile ], [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasQuantity ], - [ sh:class sphn:TimeSeriesDataFile ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasDataFile ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasDateTime ] ; + sh:path sphn:hasDateTime ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:or ( [ sh:class snomed:61086009 ] [ sh:class snomed:271636001 ] ) ; + sh:path sphn:hasRegularityCode ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasRegularityCode> as ?path) (?class as ?value) WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasRegularityCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/271636001>, <http://snomed.info/id/61086009> )) . + FILTER( ?values IN ( <http://snomed.info/id/61086009>, <http://snomed.info/id/271636001> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ] ; sh:targetClass sphn:HeartRate . -constraints:sphnHeartRateMeasurement a sh:NodeShape ; - sh:closed false ; - sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:Performer ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasPerformer ], - [ sh:class sphn:SubjectPseudoIdentifier ; - sh:maxCount 1 ; +constraints:sphnHeartRateMeasurement a sh:NodeShape ; + sh:closed false ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:class sphn:HeartRate ; sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:DataProvider ; + sh:path sphn:hasResult ], + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], + sh:path sphn:hasStartDateTime ], + [ sh:class sphn:PhysiologicState ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasSubjectPhysiologicState ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:or ( [ sh:class sphn:Implant ] [ sh:class sphn:MedicalDevice ] ) ; + sh:path sphn:hasMedicalDevice ], + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasEndDateTime ], [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasAdministrativeCase ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], [ sh:class sphn:BodySite ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasBodySite ], - [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:or ( [ sh:class sphn:MedicalDevice ] [ sh:class sphn:Implant ] ) ; - sh:path sphn:hasMedicalDevice ], - [ sh:class sphn:PhysiologicState ; + [ sh:class sphn:Performer ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasSubjectPhysiologicState ], + sh:path sphn:hasPerformer ], [ sh:class snomed:128927009 ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasMethodCode ], - [ sh:datatype xsd:dateTime ; + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasStartDateTime ], - [ sh:class sphn:HeartRate ; - sh:minCount 1 ; - sh:path sphn:hasResult ], - [ sh:datatype xsd:dateTime ; + sh:path sphn:hasDataProvider ], + [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasEndDateTime ] ; + sh:minCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) @@ -4825,14 +4825,6 @@ constraints:sphnHeartRateMeasurement a sh:NodeShape ; constraints:sphnHeartRateMeasurement_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-HeartRateMeasurement-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -4840,12 +4832,28 @@ constraints:sphnHeartRateMeasurement_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-HeartRateMeasurement-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:HeartRateMeasurement . constraints:sphnHeartRate_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasRegularityCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasRegularityCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-HeartRate-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -4853,14 +4861,6 @@ constraints:sphnHeartRate_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-HeartRate-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasRegularityCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasRegularityCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:HeartRate . @@ -4871,28 +4871,28 @@ constraints:sphnHomeAddress a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasStartDateTime ], + [ sh:class sphn:Country ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasCountry ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDataProvider ], - [ sh:class sphn:SubjectPseudoIdentifier ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasEndDateTime ], [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], [ sh:class sphn:SwissSocioEconomicPosition ; sh:minCount 0 ; sh:path sphn:hasSwissSocioEconomicPosition ], - [ sh:class sphn:Country ; + [ sh:class sphn:SubjectPseudoIdentifier ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ], + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasCountry ] ; + sh:path sphn:hasEndDateTime ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) @@ -4919,39 +4919,39 @@ constraints:sphnHomeAddress_Warning_Naming a sh:NodeShape ; constraints:sphnImagingProcedure a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:class sphn:BodySite ; + sh:property [ sh:class sphn:AdministrativeCase ; + sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasBodySite ], - [ sh:class snomed:363679005 ; + sh:path sphn:hasAdministrativeCase ], + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasCode ], - [ sh:class sphn:SubjectPseudoIdentifier ; + sh:path sphn:hasStartDateTime ], + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasEndDateTime ], + [ sh:class sphn:SourceSystem ; sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], + sh:path sphn:hasSourceSystem ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDataProvider ], - [ sh:class sphn:AdministrativeCase ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasStartDateTime ], [ sh:class sphn:Intent ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasIntent ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; + [ sh:class sphn:BodySite ; sh:minCount 0 ; - sh:path sphn:hasEndDateTime ] ; + sh:path sphn:hasBodySite ], + [ sh:class snomed:363679005 ; + sh:minCount 1 ; + sh:path sphn:hasCode ], + [ sh:class sphn:SubjectPseudoIdentifier ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) @@ -4965,14 +4965,6 @@ constraints:sphnImagingProcedure a sh:NodeShape ; constraints:sphnImagingProcedure_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-ImagingProcedure-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -4980,63 +4972,71 @@ constraints:sphnImagingProcedure_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-ImagingProcedure-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:ImagingProcedure . constraints:sphnImplant a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:maxCount 1 ; + sh:property [ sh:class sphn:Software ; + sh:minCount 0 ; + sh:path sphn:hasSoftware ], + [ sh:maxCount 1 ; sh:minCount 1 ; sh:or ( [ sh:class snomed:14106009 ] [ sh:class snomed:40388003 ] ) ; sh:path sphn:hasTypeCode ], - [ sh:class sphn:Software ; - sh:minCount 0 ; - sh:path sphn:hasSoftware ], [ sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class sphn:Terminology ] ) ; + sh:or ( [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] ) ; sh:path sphn:hasProductCode ] ; sh:targetClass sphn:Implant . constraints:sphnImplantPresence a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:SourceSystem ; + sh:property [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ], + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasRecordDateTime ], + [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasStartDateTime ], [ sh:class sphn:Implant ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasMedicalDevice ], - [ sh:class sphn:AdministrativeCase ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasEndDateTime ], [ sh:class sphn:BodySite ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasBodySite ], - [ sh:datatype xsd:dateTime ; + [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasRecordDateTime ], + sh:path sphn:hasAdministrativeCase ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasStartDateTime ], - [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ] ; + sh:path sphn:hasEndDateTime ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) @@ -5106,6 +5106,14 @@ constraints:sphnImplant_Warning_Codes a sh:NodeShape ; constraints:sphnImplant_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Implant-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -5113,36 +5121,24 @@ constraints:sphnImplant_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-Implant-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:Implant . constraints:sphnInhaledOxygenConcentration a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( sphn:hasQuantity rdf:type ) ; - sh:property [ sh:class sphn:DataProvider ; + sh:property [ sh:class ucum:percent ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:class ucum:percent ; + sh:path ( sphn:hasQuantity sphn:hasUnit sphn:hasCode ) ], + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path ( sphn:hasQuantity sphn:hasUnit sphn:hasCode ) ], - [ sh:class sphn:DrugAdministrationEvent ; + sh:path sphn:hasDateTime ], + [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasOxygenFlowRate ], - [ sh:class sphn:SubjectPseudoIdentifier ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], + sh:path sphn:hasAdministrativeCase ], [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], @@ -5150,22 +5146,26 @@ constraints:sphnInhaledOxygenConcentration a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasQuantity ], - [ sh:class sphn:AdministrativeCase ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDateTime ], [ sh:class sphn:DataDetermination ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasDataDetermination ], [ sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class sphn:MedicalDevice ] [ sh:class sphn:AccessDevice ] ) ; - sh:path sphn:hasOxygenEquipment ] ; + sh:or ( [ sh:class sphn:AccessDevice ] [ sh:class sphn:MedicalDevice ] ) ; + sh:path sphn:hasOxygenEquipment ], + [ sh:class sphn:SubjectPseudoIdentifier ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ], + [ sh:class sphn:DrugAdministrationEvent ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasOxygenFlowRate ], + [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "For sphn:hasOxygenEquipment, instances of sphn:LabAnalyzer, sphn:Implant are not allowed" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> @@ -5196,29 +5196,29 @@ constraints:sphnInsuranceStatus a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasStartDateTime ], - [ sh:class sphn:AdministrativeCase ; + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], + sh:minCount 1 ; + sh:path sphn:hasDataProvider ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasEndDateTime ], + [ sh:class sphn:AdministrativeCase ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasAdministrativeCase ], [ sh:class sphn:InsuranceStatus_coverageType ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasCoverageType ], - [ sh:class sphn:DataProvider ; + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ] ; + sh:minCount 0 ; + sh:path sphn:hasStartDateTime ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) @@ -5245,7 +5245,7 @@ constraints:sphnInsuranceStatus_Warning_Naming a sh:NodeShape ; constraints:sphnInsuranceStatus_coverageType a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type rdfs:label ) ; - sh:property [ sh:in ( sphn-individual:Foreign sphn-individual:Other sphn-individual:Private sphn-individual:General sphn-individual:SemiPrivate sphn-individual:None ) ; + sh:property [ sh:in ( sphn-individual:SemiPrivate sphn-individual:None sphn-individual:Private sphn-individual:Foreign sphn-individual:Other sphn-individual:General ) ; sh:path [ sh:inversePath rdf:type ] ] ; sh:targetClass sphn:InsuranceStatus_coverageType . @@ -5261,14 +5261,6 @@ constraints:sphnIntent a sh:NodeShape ; constraints:sphnIntent_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Intent-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -5276,6 +5268,14 @@ constraints:sphnIntent_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-Intent-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:Intent . @@ -5286,22 +5286,22 @@ constraints:sphnInterpretation a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasDateTime ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], + [ sh:minCount 1 ; + sh:or ( [ sh:class sphn:Result ] [ sh:class sphn:SemanticMapping ] [ sh:class sphn:AllergyEpisode ] [ sh:class sphn:BodyMassIndex ] [ sh:class sphn:TherapeuticArea ] [ sh:class sphn:ReferenceSequence ] [ sh:class sphn:Diagnosis ] [ sh:class sphn:CivilStatus ] [ sh:class sphn:DataFile ] [ sh:class sphn:Laterality ] [ sh:class sphn:PhysiologicState ] [ sh:class sphn:DrugAdministrationEvent ] [ sh:class sphn:Intent ] [ sh:class sphn:NutritionIntake ] [ sh:class sphn:GestationalAgeAtBirth ] [ sh:class sphn:VariantDescriptor ] [ sh:class sphn:FluidBalance ] [ sh:class sphn:BodySurfaceArea ] [ sh:class sphn:Birth ] [ sh:class sphn:DataDetermination ] [ sh:class sphn:Electrocardiogram ] [ sh:class sphn:FollowUp ] [ sh:class sphn:ExcludedDisorder ] [ sh:class sphn:ImplantPresence ] [ sh:class sphn:InsuranceStatus ] [ sh:class sphn:GenePanel ] [ sh:class sphn:Biobanksample ] [ sh:class sphn:Terminology ] [ sh:class sphn:Transplant ] [ sh:class sphn:SubjectPseudoIdentifier ] [ sh:class sphn:Organism ] [ sh:class sphn:HealthcareEncounter ] [ sh:class sphn:AssessmentEvent ] [ sh:class sphn:BodyPosition ] [ sh:class sphn:PharmaceuticalDoseForm ] [ sh:class sphn:DataRelease ] [ sh:class sphn:Consent ] [ sh:class sphn:Performer ] [ sh:class sphn:HealthcarePrimaryInformationSystem ] [ sh:class sphn:SequencingRun ] [ sh:class sphn:Protein ] [ sh:class sphn:DataProvider ] [ sh:class sphn:DeathDate ] [ sh:class sphn:AdministrativeCase ] [ sh:class sphn:DrugPrescription ] [ sh:class sphn:FluidInputOutput ] [ sh:class sphn:Nationality ] [ sh:class sphn:BirthDate ] [ sh:class sphn:GenomicPosition ] [ sh:class sphn:LabTest ] [ sh:class sphn:DrugArticle ] [ sh:class sphn:Chromosome ] [ sh:class sphn:Transcript ] [ sh:class sphn:TimePattern ] [ sh:class sphn:Location ] [ sh:class sphn:QualityControlMetric ] [ sh:class sphn:AssessmentComponent ] [ sh:class sphn:Substance ] [ sh:class sphn:ReferenceRange ] [ sh:class sphn:Age ] [ sh:class sphn:DataProcessing ] [ sh:class sphn:Assessment ] [ sh:class sphn:SourceData ] [ sh:class sphn:Department ] [ sh:class sphn:HomeAddress ] [ sh:class sphn:Drug ] [ sh:class sphn:AdministrativeSex ] [ sh:class sphn:SampleProcessing ] [ sh:class sphn:Death ] [ sh:class sphn:Software ] [ sh:class sphn:Hash ] [ sh:class sphn:StandardOperatingProcedure ] [ sh:class sphn:Sample ] [ sh:class sphn:Code ] [ sh:class sphn:GeneticVariation ] [ sh:class sphn:Quantity ] [ sh:class sphn:Exposure ] [ sh:class sphn:MedicalDevice ] [ sh:class sphn:VariantNotation ] [ sh:class sphn:MedicalProcedure ] [ sh:class sphn:BodySite ] [ sh:class sphn:Gene ] [ sh:class sphn:TransplantPresence ] [ sh:class sphn:InhaledOxygenConcentration ] [ sh:class sphn:CardiacIndex ] [ sh:class sphn:Unit ] [ sh:class sphn:Allergen ] [ sh:class sphn:LabTestEvent ] [ sh:class sphn:Measurement ] [ sh:class sphn:SwissSocioEconomicPosition ] [ sh:class sphn:Allergy ] [ sh:class sphn:AccessDevicePresence ] [ sh:class sphn:ProblemCondition ] [ sh:class sphn:ChromosomalLocation ] [ sh:class sphn:CareHandling ] [ sh:class sphn:Interpretation ] [ sh:class sphn:Country ] [ sh:class sphn:SequencingInstrument ] [ sh:class sphn:ValueSet ] [ sh:class sphn:Assay ] [ sh:class sphn:ReferenceValue ] [ sh:class sphn:AdverseEvent ] [ sh:class sphn:ResuscitationDirective ] [ sh:class sphn:SourceSystem ] ) ; + sh:path sphn:hasOutput ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDataProvider ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], [ sh:minCount 0 ; - sh:or ( [ sh:class sphn:SubjectPseudoIdentifier ] [ sh:class sphn:VariantNotation ] [ sh:class sphn:ExcludedDisorder ] [ sh:class sphn:ReferenceValue ] [ sh:class sphn:Age ] [ sh:class sphn:DataDetermination ] [ sh:class sphn:Assay ] [ sh:class sphn:SourceData ] [ sh:class sphn:StandardOperatingProcedure ] [ sh:class sphn:DeathDate ] [ sh:class sphn:FluidInputOutput ] [ sh:class sphn:ProblemCondition ] [ sh:class sphn:MedicalDevice ] [ sh:class sphn:Performer ] [ sh:class sphn:QualityControlMetric ] [ sh:class sphn:Hash ] [ sh:class sphn:DataFile ] [ sh:class sphn:CardiacIndex ] [ sh:class sphn:PhysiologicState ] [ sh:class sphn:Department ] [ sh:class sphn:GeneticVariation ] [ sh:class sphn:BodyPosition ] [ sh:class sphn:Assessment ] [ sh:class sphn:Diagnosis ] [ sh:class sphn:FollowUp ] [ sh:class sphn:Chromosome ] [ sh:class sphn:Unit ] [ sh:class sphn:SampleProcessing ] [ sh:class sphn:Software ] [ sh:class sphn:AdverseEvent ] [ sh:class sphn:Gene ] [ sh:class sphn:NutritionIntake ] [ sh:class sphn:TherapeuticArea ] [ sh:class sphn:Allergen ] [ sh:class sphn:AllergyEpisode ] [ sh:class sphn:BodySite ] [ sh:class sphn:AssessmentComponent ] [ sh:class sphn:SequencingRun ] [ sh:class sphn:PharmaceuticalDoseForm ] [ sh:class sphn:Protein ] [ sh:class sphn:Country ] [ sh:class sphn:Result ] [ sh:class sphn:TransplantPresence ] [ sh:class sphn:LabTest ] [ sh:class sphn:AssessmentEvent ] [ sh:class sphn:InhaledOxygenConcentration ] [ sh:class sphn:SourceSystem ] [ sh:class sphn:Location ] [ sh:class sphn:BodyMassIndex ] [ sh:class sphn:DataProvider ] [ sh:class sphn:HealthcareEncounter ] [ sh:class sphn:Electrocardiogram ] [ sh:class sphn:Quantity ] [ sh:class sphn:Allergy ] [ sh:class sphn:ReferenceRange ] [ sh:class sphn:ImplantPresence ] [ sh:class sphn:GenePanel ] [ sh:class sphn:HomeAddress ] [ sh:class sphn:Substance ] [ sh:class sphn:Interpretation ] [ sh:class sphn:AdministrativeCase ] [ sh:class sphn:AccessDevicePresence ] [ sh:class sphn:Sample ] [ sh:class sphn:CivilStatus ] [ sh:class sphn:Code ] [ sh:class sphn:MedicalProcedure ] [ sh:class sphn:Drug ] [ sh:class sphn:DataRelease ] [ sh:class sphn:SemanticMapping ] [ sh:class sphn:TimePattern ] [ sh:class sphn:Laterality ] [ sh:class sphn:ChromosomalLocation ] [ sh:class sphn:Transplant ] [ sh:class sphn:DrugArticle ] [ sh:class sphn:VariantDescriptor ] [ sh:class sphn:SequencingInstrument ] [ sh:class sphn:HealthcarePrimaryInformationSystem ] [ sh:class sphn:Exposure ] [ sh:class sphn:CareHandling ] [ sh:class sphn:DataProcessing ] [ sh:class sphn:DrugAdministrationEvent ] [ sh:class sphn:Transcript ] [ sh:class sphn:InsuranceStatus ] [ sh:class sphn:Intent ] [ sh:class sphn:GenomicPosition ] [ sh:class sphn:Nationality ] [ sh:class sphn:Biobanksample ] [ sh:class sphn:Death ] [ sh:class sphn:AdministrativeSex ] [ sh:class sphn:Consent ] [ sh:class sphn:ResuscitationDirective ] [ sh:class sphn:SwissSocioEconomicPosition ] [ sh:class sphn:Terminology ] [ sh:class sphn:BirthDate ] [ sh:class sphn:BodySurfaceArea ] [ sh:class sphn:DrugPrescription ] [ sh:class sphn:LabTestEvent ] [ sh:class sphn:FluidBalance ] [ sh:class sphn:Measurement ] [ sh:class sphn:ReferenceSequence ] [ sh:class sphn:Organism ] [ sh:class sphn:ValueSet ] [ sh:class sphn:Birth ] [ sh:class sphn:GestationalAgeAtBirth ] ) ; + sh:or ( [ sh:class sphn:Result ] [ sh:class sphn:SemanticMapping ] [ sh:class sphn:AllergyEpisode ] [ sh:class sphn:BodyMassIndex ] [ sh:class sphn:TherapeuticArea ] [ sh:class sphn:ReferenceSequence ] [ sh:class sphn:Diagnosis ] [ sh:class sphn:CivilStatus ] [ sh:class sphn:DataFile ] [ sh:class sphn:Laterality ] [ sh:class sphn:PhysiologicState ] [ sh:class sphn:DrugAdministrationEvent ] [ sh:class sphn:Intent ] [ sh:class sphn:NutritionIntake ] [ sh:class sphn:GestationalAgeAtBirth ] [ sh:class sphn:VariantDescriptor ] [ sh:class sphn:FluidBalance ] [ sh:class sphn:BodySurfaceArea ] [ sh:class sphn:Birth ] [ sh:class sphn:DataDetermination ] [ sh:class sphn:Electrocardiogram ] [ sh:class sphn:FollowUp ] [ sh:class sphn:ExcludedDisorder ] [ sh:class sphn:ImplantPresence ] [ sh:class sphn:InsuranceStatus ] [ sh:class sphn:GenePanel ] [ sh:class sphn:Biobanksample ] [ sh:class sphn:Terminology ] [ sh:class sphn:Transplant ] [ sh:class sphn:SubjectPseudoIdentifier ] [ sh:class sphn:Organism ] [ sh:class sphn:HealthcareEncounter ] [ sh:class sphn:AssessmentEvent ] [ sh:class sphn:BodyPosition ] [ sh:class sphn:PharmaceuticalDoseForm ] [ sh:class sphn:DataRelease ] [ sh:class sphn:Consent ] [ sh:class sphn:Performer ] [ sh:class sphn:HealthcarePrimaryInformationSystem ] [ sh:class sphn:SequencingRun ] [ sh:class sphn:Protein ] [ sh:class sphn:DataProvider ] [ sh:class sphn:DeathDate ] [ sh:class sphn:AdministrativeCase ] [ sh:class sphn:DrugPrescription ] [ sh:class sphn:FluidInputOutput ] [ sh:class sphn:Nationality ] [ sh:class sphn:BirthDate ] [ sh:class sphn:GenomicPosition ] [ sh:class sphn:LabTest ] [ sh:class sphn:DrugArticle ] [ sh:class sphn:Chromosome ] [ sh:class sphn:Transcript ] [ sh:class sphn:TimePattern ] [ sh:class sphn:Location ] [ sh:class sphn:QualityControlMetric ] [ sh:class sphn:AssessmentComponent ] [ sh:class sphn:Substance ] [ sh:class sphn:ReferenceRange ] [ sh:class sphn:Age ] [ sh:class sphn:DataProcessing ] [ sh:class sphn:Assessment ] [ sh:class sphn:SourceData ] [ sh:class sphn:Department ] [ sh:class sphn:HomeAddress ] [ sh:class sphn:Drug ] [ sh:class sphn:AdministrativeSex ] [ sh:class sphn:SampleProcessing ] [ sh:class sphn:Death ] [ sh:class sphn:Software ] [ sh:class sphn:Hash ] [ sh:class sphn:StandardOperatingProcedure ] [ sh:class sphn:Sample ] [ sh:class sphn:Code ] [ sh:class sphn:GeneticVariation ] [ sh:class sphn:Quantity ] [ sh:class sphn:Exposure ] [ sh:class sphn:MedicalDevice ] [ sh:class sphn:VariantNotation ] [ sh:class sphn:MedicalProcedure ] [ sh:class sphn:BodySite ] [ sh:class sphn:Gene ] [ sh:class sphn:TransplantPresence ] [ sh:class sphn:InhaledOxygenConcentration ] [ sh:class sphn:CardiacIndex ] [ sh:class sphn:Unit ] [ sh:class sphn:Allergen ] [ sh:class sphn:LabTestEvent ] [ sh:class sphn:Measurement ] [ sh:class sphn:SwissSocioEconomicPosition ] [ sh:class sphn:Allergy ] [ sh:class sphn:AccessDevicePresence ] [ sh:class sphn:ProblemCondition ] [ sh:class sphn:ChromosomalLocation ] [ sh:class sphn:CareHandling ] [ sh:class sphn:Interpretation ] [ sh:class sphn:Country ] [ sh:class sphn:SequencingInstrument ] [ sh:class sphn:ValueSet ] [ sh:class sphn:Assay ] [ sh:class sphn:ReferenceValue ] [ sh:class sphn:AdverseEvent ] [ sh:class sphn:ResuscitationDirective ] [ sh:class sphn:SourceSystem ] ) ; sh:path sphn:hasInput ], [ sh:datatype xsd:string ; sh:minCount 0 ; - sh:path sphn:hasStandardGuideline ], - [ sh:minCount 1 ; - sh:or ( [ sh:class sphn:SubjectPseudoIdentifier ] [ sh:class sphn:VariantNotation ] [ sh:class sphn:ExcludedDisorder ] [ sh:class sphn:ReferenceValue ] [ sh:class sphn:Age ] [ sh:class sphn:DataDetermination ] [ sh:class sphn:Assay ] [ sh:class sphn:SourceData ] [ sh:class sphn:StandardOperatingProcedure ] [ sh:class sphn:DeathDate ] [ sh:class sphn:FluidInputOutput ] [ sh:class sphn:ProblemCondition ] [ sh:class sphn:MedicalDevice ] [ sh:class sphn:Performer ] [ sh:class sphn:QualityControlMetric ] [ sh:class sphn:Hash ] [ sh:class sphn:DataFile ] [ sh:class sphn:CardiacIndex ] [ sh:class sphn:PhysiologicState ] [ sh:class sphn:Department ] [ sh:class sphn:GeneticVariation ] [ sh:class sphn:BodyPosition ] [ sh:class sphn:Assessment ] [ sh:class sphn:Diagnosis ] [ sh:class sphn:FollowUp ] [ sh:class sphn:Chromosome ] [ sh:class sphn:Unit ] [ sh:class sphn:SampleProcessing ] [ sh:class sphn:Software ] [ sh:class sphn:AdverseEvent ] [ sh:class sphn:Gene ] [ sh:class sphn:NutritionIntake ] [ sh:class sphn:TherapeuticArea ] [ sh:class sphn:Allergen ] [ sh:class sphn:AllergyEpisode ] [ sh:class sphn:BodySite ] [ sh:class sphn:AssessmentComponent ] [ sh:class sphn:SequencingRun ] [ sh:class sphn:PharmaceuticalDoseForm ] [ sh:class sphn:Protein ] [ sh:class sphn:Country ] [ sh:class sphn:Result ] [ sh:class sphn:TransplantPresence ] [ sh:class sphn:LabTest ] [ sh:class sphn:AssessmentEvent ] [ sh:class sphn:InhaledOxygenConcentration ] [ sh:class sphn:SourceSystem ] [ sh:class sphn:Location ] [ sh:class sphn:BodyMassIndex ] [ sh:class sphn:DataProvider ] [ sh:class sphn:HealthcareEncounter ] [ sh:class sphn:Electrocardiogram ] [ sh:class sphn:Quantity ] [ sh:class sphn:Allergy ] [ sh:class sphn:ReferenceRange ] [ sh:class sphn:ImplantPresence ] [ sh:class sphn:GenePanel ] [ sh:class sphn:HomeAddress ] [ sh:class sphn:Substance ] [ sh:class sphn:Interpretation ] [ sh:class sphn:AdministrativeCase ] [ sh:class sphn:AccessDevicePresence ] [ sh:class sphn:Sample ] [ sh:class sphn:CivilStatus ] [ sh:class sphn:Code ] [ sh:class sphn:MedicalProcedure ] [ sh:class sphn:Drug ] [ sh:class sphn:DataRelease ] [ sh:class sphn:SemanticMapping ] [ sh:class sphn:TimePattern ] [ sh:class sphn:Laterality ] [ sh:class sphn:ChromosomalLocation ] [ sh:class sphn:Transplant ] [ sh:class sphn:DrugArticle ] [ sh:class sphn:VariantDescriptor ] [ sh:class sphn:SequencingInstrument ] [ sh:class sphn:HealthcarePrimaryInformationSystem ] [ sh:class sphn:Exposure ] [ sh:class sphn:CareHandling ] [ sh:class sphn:DataProcessing ] [ sh:class sphn:DrugAdministrationEvent ] [ sh:class sphn:Transcript ] [ sh:class sphn:InsuranceStatus ] [ sh:class sphn:Intent ] [ sh:class sphn:GenomicPosition ] [ sh:class sphn:Nationality ] [ sh:class sphn:Biobanksample ] [ sh:class sphn:Death ] [ sh:class sphn:AdministrativeSex ] [ sh:class sphn:Consent ] [ sh:class sphn:ResuscitationDirective ] [ sh:class sphn:SwissSocioEconomicPosition ] [ sh:class sphn:Terminology ] [ sh:class sphn:BirthDate ] [ sh:class sphn:BodySurfaceArea ] [ sh:class sphn:DrugPrescription ] [ sh:class sphn:LabTestEvent ] [ sh:class sphn:FluidBalance ] [ sh:class sphn:Measurement ] [ sh:class sphn:ReferenceSequence ] [ sh:class sphn:Organism ] [ sh:class sphn:ValueSet ] [ sh:class sphn:Birth ] [ sh:class sphn:GestationalAgeAtBirth ] ) ; - sh:path sphn:hasOutput ] ; + sh:path sphn:hasStandardGuideline ] ; sh:target [ a sh:SPARQLTarget ; sh:select """SELECT ?this WHERE { @@ -5323,10 +5323,10 @@ constraints:sphnInterpretation_Warning_Codes a sh:NodeShape ; PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX sphn-loinc: <https://biomedit.ch/rdf/sphn-resource/loinc/> PREFIX sphn-hgnc: <https://biomedit.ch/rdf/sphn-resource/hgnc/> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasInput> as ?path) (?typeCode as ?value) + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasOutput> as ?path) (?typeCode as ?value) WHERE { { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasInput> ?oldCode . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasOutput> ?oldCode . ?oldCode rdf:type ?typeCode . ?typeCode rdfs:subClassOf+ sphn-loinc:LOINC . ?typeCode rdfs:label ?label . @@ -5334,7 +5334,7 @@ constraints:sphnInterpretation_Warning_Codes a sh:NodeShape ; } UNION { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasInput> ?oldCode . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasOutput> ?oldCode . ?oldCode rdf:type ?typeCode . { SELECT ?typeCode @@ -5348,7 +5348,7 @@ constraints:sphnInterpretation_Warning_Codes a sh:NodeShape ; } UNION { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasInput> ?oldCode . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasOutput> ?oldCode . ?oldCode rdf:type ?typeCode . ?typeCode rdfs:subClassOf+ sphn-hgnc:HGNC . ?typeCode rdfs:comment ?comment . @@ -5362,10 +5362,10 @@ constraints:sphnInterpretation_Warning_Codes a sh:NodeShape ; PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX sphn-loinc: <https://biomedit.ch/rdf/sphn-resource/loinc/> PREFIX sphn-hgnc: <https://biomedit.ch/rdf/sphn-resource/hgnc/> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasOutput> as ?path) (?typeCode as ?value) + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasInput> as ?path) (?typeCode as ?value) WHERE { { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasOutput> ?oldCode . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasInput> ?oldCode . ?oldCode rdf:type ?typeCode . ?typeCode rdfs:subClassOf+ sphn-loinc:LOINC . ?typeCode rdfs:label ?label . @@ -5373,7 +5373,7 @@ constraints:sphnInterpretation_Warning_Codes a sh:NodeShape ; } UNION { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasOutput> ?oldCode . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasInput> ?oldCode . ?oldCode rdf:type ?typeCode . { SELECT ?typeCode @@ -5387,7 +5387,7 @@ constraints:sphnInterpretation_Warning_Codes a sh:NodeShape ; } UNION { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasOutput> ?oldCode . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasInput> ?oldCode . ?oldCode rdf:type ?typeCode . ?typeCode rdfs:subClassOf+ sphn-hgnc:HGNC . ?typeCode rdfs:comment ?comment . @@ -5432,49 +5432,49 @@ constraints:sphnInterpretation_Warning_Naming a sh:NodeShape ; constraints:sphnIsolate a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:Sample_primaryContainer ; + sh:property [ sh:class sphn:Organism ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasPrimaryContainer ], + sh:path sphn:hasOrganism ], [ sh:class snomed:123038009 ; sh:minCount 0 ; sh:path sphn:hasMaterialTypeCode ], - [ sh:class sphn:DataProvider ; + [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:class sphn:Sample_fixationType ; + sh:path sphn:hasSubjectPseudoIdentifier ], + [ sh:class sphn:BodySite ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasFixationType ], + sh:path sphn:hasBodySite ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasCollectionDateTime ], - [ sh:datatype xsd:string ; + [ sh:class sphn:AdministrativeCase ; + sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasIdentifier ], - [ sh:class sphn:Organism ; + sh:path sphn:hasAdministrativeCase ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], + [ sh:class sphn:Sample_primaryContainer ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasOrganism ], + sh:path sphn:hasPrimaryContainer ], [ sh:datatype xsd:anyURI ; sh:path sphn:hasSharedIdentifier ], - [ sh:class sphn:AdministrativeCase ; + [ sh:datatype xsd:string ; + sh:minCount 0 ; + sh:path sphn:hasIdentifier ], + [ sh:class sphn:Sample_fixationType ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], - [ sh:class sphn:SubjectPseudoIdentifier ; + sh:path sphn:hasFixationType ], + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:BodySite ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasBodySite ] ; + sh:path sphn:hasDataProvider ] ; sh:targetClass sphn:Isolate . constraints:sphnIsolate_Warning_Naming a sh:NodeShape ; @@ -5503,15 +5503,15 @@ constraints:sphnLabAnalyzer a sh:NodeShape ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class sphn:Terminology ] ) ; + sh:or ( [ sh:class sphn:Code ] [ sh:class emdn:EMDN ] ) ; + sh:path sphn:hasTypeCode ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:or ( [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] ) ; sh:path sphn:hasProductCode ], [ sh:class sphn:Software ; sh:minCount 0 ; - sh:path sphn:hasSoftware ], - [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class emdn:EMDN ] ) ; - sh:path sphn:hasTypeCode ] ; + sh:path sphn:hasSoftware ] ; sh:targetClass sphn:LabAnalyzer . constraints:sphnLabAnalyzer_Warning_Codes a sh:NodeShape ; @@ -5573,17 +5573,17 @@ constraints:sphnLabAnalyzer_Warning_Naming a sh:NodeShape ; constraints:sphnLabResult a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:or ( [ sh:class sphn:ReferenceValue ] [ sh:class sphn:ReferenceRange ] ) ; - sh:path sphn:hasNumericalReference ], - [ sh:class sphn:Quantity ; + sh:property [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasQuantity ], [ sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class sphn:Terminology ] ) ; + sh:or ( [ sh:class sphn:ReferenceValue ] [ sh:class sphn:ReferenceRange ] ) ; + sh:path sphn:hasNumericalReference ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:or ( [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] ) ; sh:path sphn:hasCode ], [ sh:datatype xsd:string ; sh:maxCount 1 ; @@ -5680,17 +5680,17 @@ constraints:sphnLabResult_Warning_Naming a sh:NodeShape ; constraints:sphnLabTest a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:maxCount 1 ; - sh:minCount 1 ; - sh:or ( [ sh:class sphn-loinc:LOINC ] [ sh:class snomed:138875005 ] ) ; - sh:path sphn:hasCode ], - [ sh:class sphn:LabAnalyzer ; + sh:property [ sh:class sphn:LabAnalyzer ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasTestKit ], [ sh:class sphn:LabResult ; sh:minCount 1 ; sh:path sphn:hasResult ], + [ sh:maxCount 1 ; + sh:minCount 1 ; + sh:or ( [ sh:class sphn-loinc:LOINC ] [ sh:class snomed:138875005 ] ) ; + sh:path sphn:hasCode ], [ sh:class sphn:LabAnalyzer ; sh:maxCount 1 ; sh:minCount 0 ; @@ -5718,17 +5718,17 @@ constraints:sphnLabTest a sh:NodeShape ; constraints:sphnLabTestEvent a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:AdministrativeCase ; + sh:property [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], + sh:path sphn:hasDateTime ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:or ( [ sh:class sphn:TumorSpecimen ] [ sh:class sphn:Sample ] [ sh:class sphn:Isolate ] ) ; + sh:path sphn:hasSample ], [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasDateTime ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; @@ -5737,17 +5737,17 @@ constraints:sphnLabTestEvent a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:datatype xsd:dateTime ; + [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasReportDateTime ], - [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:or ( [ sh:class sphn:Sample ] [ sh:class sphn:Isolate ] [ sh:class sphn:TumorSpecimen ] ) ; - sh:path sphn:hasSample ], + sh:path sphn:hasAdministrativeCase ], [ sh:class sphn:LabTest ; sh:minCount 1 ; - sh:path sphn:hasLabTest ] ; + sh:path sphn:hasLabTest ], + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasReportDateTime ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "For sphn:hasLabTest, instances of sphn:AntimicrobialSusceptibilityLabTest, sphn:MicrobiologyBiomoleculePresenceLabTest, sphn:MicrobiologyMicroscopyLabTest, sphn:MicroorganismIdentificationLabTest are not allowed" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> @@ -5880,14 +5880,14 @@ constraints:sphnLaterality a sh:NodeShape ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:maxCount 1 ; sh:minCount 1 ; - sh:or ( [ sh:class snomed:24028007 ] [ sh:class snomed:7771000 ] [ sh:class snomed:66459002 ] [ sh:class snomed:51440002 ] ) ; + sh:or ( [ sh:class snomed:66459002 ] [ sh:class snomed:51440002 ] [ sh:class snomed:7771000 ] [ sh:class snomed:24028007 ] ) ; sh:path sphn:hasCode ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?class as ?value) WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/24028007>, <http://snomed.info/id/7771000>, <http://snomed.info/id/66459002>, <http://snomed.info/id/51440002> )) . + FILTER( ?values IN ( <http://snomed.info/id/66459002>, <http://snomed.info/id/51440002>, <http://snomed.info/id/7771000>, <http://snomed.info/id/24028007> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ] ; @@ -5917,60 +5917,60 @@ constraints:sphnLaterality_Warning_Naming a sh:NodeShape ; constraints:sphnLibraryPreparation a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:or ( [ sh:class sphn:Sample ] [ sh:class sphn:Isolate ] ) ; - sh:path sphn:hasOutput ], - [ sh:class sphn:QualityControlMetric ; + sh:property [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], + [ sh:class sphn:SubjectPseudoIdentifier ; sh:minCount 0 ; - sh:path sphn:hasQualityControlMetric ], + sh:path sphn:hasSubjectPseudoIdentifier ], [ sh:class sphn:GenePanel ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasGenePanel ], - [ sh:class sphn:SubjectPseudoIdentifier ; + [ sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:Quantity ; - sh:maxCount 1 ; + sh:or ( [ sh:class sphn:Sample ] [ sh:class sphn:Isolate ] ) ; + sh:path sphn:hasOutput ], + [ sh:class sphn:QualityControlMetric ; sh:minCount 0 ; - sh:path sphn:hasIntendedInsertSize ], + sh:path sphn:hasQualityControlMetric ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:or ( [ sh:class sphn:Terminology ] [ sh:class obi:0000711 ] [ sh:class sphn:Code ] ) ; + sh:path sphn:hasCode ], [ sh:class sphn:StandardOperatingProcedure ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasStandardOperatingProcedure ], - [ sh:maxCount 1 ; + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class sphn:Terminology ] ) ; - sh:path sphn:hasKitCode ], + sh:path sphn:hasStartDateTime ], + [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ], [ sh:class sphn:AdministrativeCase ; sh:minCount 0 ; sh:path sphn:hasAdministrativeCase ], [ sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class sphn:Terminology ] ) ; + sh:or ( [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] ) ; sh:path sphn:hasTargetEnrichmentKitCode ], - [ sh:class sphn:DataProvider ; + [ sh:class sphn:Quantity ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], + sh:minCount 0 ; + sh:path sphn:hasIntendedInsertSize ], [ sh:minCount 0 ; sh:or ( [ sh:class sphn:SampleProcessing ] [ sh:class sphn:LibraryPreparation ] ) ; sh:path sphn:hasPredecessor ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasStartDateTime ], + [ sh:minCount 0 ; + sh:or ( [ sh:class sphn:TumorSpecimen ] [ sh:class sphn:Sample ] [ sh:class sphn:Isolate ] ) ; + sh:path sphn:hasInput ], [ sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class obi:0000711 ] [ sh:class sphn:Code ] [ sh:class sphn:Terminology ] ) ; - sh:path sphn:hasCode ], - [ sh:minCount 0 ; - sh:or ( [ sh:class sphn:Sample ] [ sh:class sphn:Isolate ] [ sh:class sphn:TumorSpecimen ] ) ; - sh:path sphn:hasInput ] ; + sh:or ( [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] ) ; + sh:path sphn:hasKitCode ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "For sphn:hasOutput, instances of sphn:TumorSpecimen are not allowed" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> @@ -6118,14 +6118,14 @@ constraints:sphnLibraryPreparation_Warning_Naming a sh:NodeShape ; constraints:sphnLocation a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasExact ], - [ sh:class sphn:DataProvider ; + sh:property [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDataProvider ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasExact ], [ sh:class snomed:276339004 ; sh:maxCount 1 ; sh:minCount 1 ; @@ -6135,14 +6135,6 @@ constraints:sphnLocation a sh:NodeShape ; constraints:sphnLocation_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Location-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -6150,13 +6142,25 @@ constraints:sphnLocation_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-Location-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:Location . constraints:sphnMeasurement a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class snomed:128927009 ; + sh:property [ sh:class sphn:Performer ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasPerformer ], + [ sh:class snomed:128927009 ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasMethodCode ], @@ -6164,32 +6168,28 @@ constraints:sphnMeasurement a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:or ( [ sh:class sphn:MedicalDevice ] [ sh:class sphn:Implant ] ) ; - sh:path sphn:hasMedicalDevice ], - [ sh:class sphn:AdministrativeCase ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], - [ sh:class sphn:Performer ; + [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasPerformer ], + sh:path sphn:hasAdministrativeCase ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:or ( [ sh:class sphn:Implant ] [ sh:class sphn:MedicalDevice ] ) ; + sh:path sphn:hasMedicalDevice ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasStartDateTime ], + [ sh:minCount 1 ; + sh:or ( [ sh:class sphn:Result ] [ sh:class sphn:Circumference ] [ sh:class sphn:AssessmentResult ] [ sh:class sphn:RespiratoryRate ] [ sh:class sphn:OxygenSaturation ] [ sh:class sphn:HeartRate ] [ sh:class sphn:BloodPressure ] [ sh:class sphn:CardiacOutput ] [ sh:class sphn:TumorStageAssessmentResult ] [ sh:class sphn:ReferenceInterpretationResult ] [ sh:class sphn:TumorGradeAssessmentResult ] [ sh:class sphn:BodyTemperature ] [ sh:class sphn:BodyHeight ] [ sh:class sphn:BodyWeight ] ) ; + sh:path sphn:hasResult ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDataProvider ], - [ sh:minCount 1 ; - sh:or ( [ sh:class sphn:Circumference ] [ sh:class sphn:AssessmentResult ] [ sh:class sphn:CardiacOutput ] [ sh:class sphn:ReferenceInterpretationResult ] [ sh:class sphn:BodyWeight ] [ sh:class sphn:BodyTemperature ] [ sh:class sphn:HeartRate ] [ sh:class sphn:BodyHeight ] [ sh:class sphn:TumorStageAssessmentResult ] [ sh:class sphn:Result ] [ sh:class sphn:TumorGradeAssessmentResult ] [ sh:class sphn:RespiratoryRate ] [ sh:class sphn:BloodPressure ] [ sh:class sphn:OxygenSaturation ] ) ; - sh:path sphn:hasResult ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; @@ -6202,6 +6202,14 @@ constraints:sphnMeasurement a sh:NodeShape ; ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasResult>/rdf:type ?class. FILTER(?class IN (<https://biomedit.ch/rdf/sphn-schema/sphn#LabResult>, <https://biomedit.ch/rdf/sphn-schema/sphn#VitalStatus>, <https://biomedit.ch/rdf/sphn-schema/sphn#AntimicrobialSusceptibilityResult>, <https://biomedit.ch/rdf/sphn-schema/sphn#MicrobiologyBiomoleculePresenceResult>, <https://biomedit.ch/rdf/sphn-schema/sphn#MicrobiologyMicroscopyResult>, <https://biomedit.ch/rdf/sphn-schema/sphn#MicroorganismIdentificationResult>)) }""" ], + [ a sh:SPARQLConstraint ; + sh:message "For sphn:hasMedicalDevice, instances of sphn:AccessDevice, sphn:LabAnalyzer are not allowed" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMedicalDevice> as ?path) (?class as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMedicalDevice>/rdf:type ?class. + FILTER(?class IN (<https://biomedit.ch/rdf/sphn-schema/sphn#AccessDevice>, <https://biomedit.ch/rdf/sphn-schema/sphn#LabAnalyzer>)) + }""" ], [ a sh:SPARQLConstraint ; sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) @@ -6209,15 +6217,7 @@ constraints:sphnMeasurement a sh:NodeShape ; ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> ?hasStartDateTime . ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasEndDateTime> ?hasEndDateTime . FILTER (?hasStartDateTime > ?hasEndDateTime) - }""" ], - [ a sh:SPARQLConstraint ; - sh:message "For sphn:hasMedicalDevice, instances of sphn:AccessDevice, sphn:LabAnalyzer are not allowed" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMedicalDevice> as ?path) (?class as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMedicalDevice>/rdf:type ?class. - FILTER(?class IN (<https://biomedit.ch/rdf/sphn-schema/sphn#AccessDevice>, <https://biomedit.ch/rdf/sphn-schema/sphn#LabAnalyzer>)) - }""" ] ; + }""" ] ; sh:target [ a sh:SPARQLTarget ; sh:select """SELECT ?this WHERE { @@ -6233,14 +6233,6 @@ constraints:sphnMeasurement a sh:NodeShape ; constraints:sphnMeasurement_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Measurement-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -6248,6 +6240,14 @@ constraints:sphnMeasurement_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-Measurement-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:target [ a sh:SPARQLTarget ; sh:select """SELECT ?this @@ -6266,12 +6266,12 @@ constraints:sphnMedicalDevice a sh:NodeShape ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class sphn:Terminology ] ) ; - sh:path sphn:hasProductCode ], + sh:or ( [ sh:class sphn:Terminology ] [ sh:class snomed:272181003 ] [ sh:class sphn:Code ] ) ; + sh:path sphn:hasTypeCode ], [ sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class snomed:272181003 ] [ sh:class sphn:Terminology ] ) ; - sh:path sphn:hasTypeCode ], + sh:or ( [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] ) ; + sh:path sphn:hasProductCode ], [ sh:class sphn:Software ; sh:minCount 0 ; sh:path sphn:hasSoftware ] ; @@ -6405,39 +6405,39 @@ constraints:sphnMedicalDevice_Warning_Naming a sh:NodeShape ; constraints:sphnMedicalProcedure a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:DataProvider ; + sh:property [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ], + sh:path sphn:hasStartDateTime ], [ sh:minCount 1 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class sphn:Terminology ] ) ; + sh:or ( [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] ) ; sh:path sphn:hasCode ], - [ sh:class sphn:BodySite ; - sh:minCount 0 ; - sh:path sphn:hasBodySite ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:datatype xsd:dateTime ; + [ sh:class sphn:Intent ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasEndDateTime ], - [ sh:datatype xsd:dateTime ; + sh:path sphn:hasIntent ], + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasStartDateTime ], + sh:path sphn:hasDataProvider ], + [ sh:class sphn:AdministrativeCase ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasAdministrativeCase ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:AdministrativeCase ; + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], - [ sh:class sphn:Intent ; - sh:maxCount 1 ; + sh:path sphn:hasEndDateTime ], + [ sh:class sphn:BodySite ; sh:minCount 0 ; - sh:path sphn:hasIntent ] ; + sh:path sphn:hasBodySite ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) @@ -6538,13 +6538,6 @@ constraints:sphnMicrobiologyBiomoleculePresenceLabTest a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:maxCount 1 ; - sh:minCount 1 ; - sh:or ( [ sh:class sphn:Gene ] [ sh:class sphn:Protein ] ) ; - sh:path sphn:hasTargetMolecule ], - [ sh:class sphn:MicrobiologyBiomoleculePresenceResult ; - sh:minCount 1 ; - sh:path sphn:hasResult ], - [ sh:maxCount 1 ; sh:minCount 1 ; sh:or ( [ sh:class sphn-loinc:LOINC ] [ sh:class snomed:138875005 ] ) ; sh:path sphn:hasCode ], @@ -6552,6 +6545,13 @@ constraints:sphnMicrobiologyBiomoleculePresenceLabTest a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasInstrument ], + [ sh:maxCount 1 ; + sh:minCount 1 ; + sh:or ( [ sh:class sphn:Gene ] [ sh:class sphn:Protein ] ) ; + sh:path sphn:hasTargetMolecule ], + [ sh:class sphn:MicrobiologyBiomoleculePresenceResult ; + sh:minCount 1 ; + sh:path sphn:hasResult ], [ sh:class sphn:LabAnalyzer ; sh:maxCount 1 ; sh:minCount 0 ; @@ -6561,25 +6561,24 @@ constraints:sphnMicrobiologyBiomoleculePresenceLabTest a sh:NodeShape ; constraints:sphnMicrobiologyBiomoleculePresenceLabTestEvent a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasReportDateTime ], + sh:property [ sh:class sphn:MicrobiologyBiomoleculePresenceLabTest ; + sh:minCount 1 ; + sh:path sphn:hasLabTest ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDataProvider ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasDateTime ], - [ sh:class sphn:Isolate ; + sh:path sphn:hasReportDateTime ], + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasSample ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], + sh:minCount 0 ; + sh:path sphn:hasDateTime ], [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; @@ -6588,9 +6587,10 @@ constraints:sphnMicrobiologyBiomoleculePresenceLabTestEvent a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:MicrobiologyBiomoleculePresenceLabTest ; + [ sh:class sphn:Isolate ; + sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasLabTest ] ; + sh:path sphn:hasSample ] ; sh:targetClass sphn:MicrobiologyBiomoleculePresenceLabTestEvent . constraints:sphnMicrobiologyBiomoleculePresenceLabTestEvent_Warning_Naming a sh:NodeShape ; @@ -6673,28 +6673,28 @@ constraints:sphnMicrobiologyBiomoleculePresenceLabTest_Warning_Naming a sh:NodeS constraints:sphnMicrobiologyBiomoleculePresenceResult a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; + sh:property [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasStringValue ], - [ sh:class sphn:Quantity ; + sh:path sphn:hasQuantity ], + [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasQuantity ], + sh:path sphn:hasStringValue ], [ sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class snomed:260385009 ] [ sh:class snomed:10828004 ] [ sh:class snomed:373068000 ] ) ; - sh:path sphn:hasCode ], + sh:or ( [ sh:class sphn:ReferenceValue ] [ sh:class sphn:ReferenceRange ] ) ; + sh:path sphn:hasNumericalReference ], [ sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class sphn:ReferenceValue ] [ sh:class sphn:ReferenceRange ] ) ; - sh:path sphn:hasNumericalReference ] ; + sh:or ( [ sh:class snomed:10828004 ] [ sh:class snomed:260385009 ] [ sh:class snomed:373068000 ] ) ; + sh:path sphn:hasCode ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?class as ?value) WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/260385009>, <http://snomed.info/id/10828004>, <http://snomed.info/id/373068000> )) . + FILTER( ?values IN ( <http://snomed.info/id/10828004>, <http://snomed.info/id/260385009>, <http://snomed.info/id/373068000> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ] ; @@ -6724,7 +6724,14 @@ constraints:sphnMicrobiologyBiomoleculePresenceResult_Warning_Naming a sh:NodeSh constraints:sphnMicrobiologyMicroscopyLabTest a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:LabAnalyzer ; + sh:property [ sh:class sphn:MicrobiologyMicroscopyResult ; + sh:minCount 1 ; + sh:path sphn:hasResult ], + [ sh:class snomed:37926009 ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasStainingMethodCode ], + [ sh:class sphn:LabAnalyzer ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasTestKit ], @@ -6735,49 +6742,42 @@ constraints:sphnMicrobiologyMicroscopyLabTest a sh:NodeShape ; [ sh:class snomed:117259009 ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasCode ], - [ sh:class snomed:37926009 ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasStainingMethodCode ], - [ sh:class sphn:MicrobiologyMicroscopyResult ; - sh:minCount 1 ; - sh:path sphn:hasResult ] ; + sh:path sphn:hasCode ] ; sh:targetClass sphn:MicrobiologyMicroscopyLabTest . constraints:sphnMicrobiologyMicroscopyLabTestEvent a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:SubjectPseudoIdentifier ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:MicrobiologyMicroscopyLabTest ; + sh:property [ sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasLabTest ], + sh:or ( [ sh:class sphn:Sample ] [ sh:class sphn:Isolate ] ) ; + sh:path sphn:hasSample ], + [ sh:class sphn:AdministrativeCase ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasAdministrativeCase ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDataProvider ], + [ sh:class sphn:MicrobiologyMicroscopyLabTest ; + sh:minCount 1 ; + sh:path sphn:hasLabTest ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasDateTime ], - [ sh:class sphn:SourceSystem ; + [ sh:class sphn:SubjectPseudoIdentifier ; + sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], + sh:path sphn:hasSubjectPseudoIdentifier ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasReportDateTime ], - [ sh:maxCount 1 ; + [ sh:class sphn:SourceSystem ; sh:minCount 1 ; - sh:or ( [ sh:class sphn:Sample ] [ sh:class sphn:Isolate ] ) ; - sh:path sphn:hasSample ], - [ sh:class sphn:AdministrativeCase ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ] ; + sh:path sphn:hasSourceSystem ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "For sphn:hasSample, instances of sphn:TumorSpecimen are not allowed" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> @@ -6804,12 +6804,13 @@ constraints:sphnMicrobiologyMicroscopyLabTestEvent_Warning_Naming a sh:NodeShape constraints:sphnMicrobiologyMicroscopyLabTest_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-MicrobiologyMicroscopyLabTest-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) + PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> + SELECT ?this (?class as ?path) (?this as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) + ?this rdf:type ?class . + FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-MicrobiologyMicroscopyLabTest-.*$")) }""" ], [ a sh:SPARQLConstraint ; sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; @@ -6820,53 +6821,52 @@ constraints:sphnMicrobiologyMicroscopyLabTest_Warning_Naming a sh:NodeShape ; FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ], [ a sh:SPARQLConstraint ; - sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-MicrobiologyMicroscopyLabTest-.*$'" ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> - SELECT ?this (?class as ?path) (?this as ?value) + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) WHERE { - ?this rdf:type ?class . - FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-MicrobiologyMicroscopyLabTest-.*$")) + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:MicrobiologyMicroscopyLabTest . constraints:sphnMicrobiologyMicroscopyResult a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:maxCount 1 ; + sh:property [ sh:class sphn:MicrobiologyMicroscopyResult_cellMorphology ; + sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class snomed:57176003 ] [ sh:class snomed:260413007 ] [ sh:class snomed:46998006 ] [ sh:class snomed:260396001 ] ) ; + sh:path sphn:hasCellMorphology ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:or ( [ sh:class snomed:260413007 ] [ sh:class snomed:46998006 ] [ sh:class snomed:57176003 ] [ sh:class snomed:260396001 ] ) ; sh:path sphn:hasCellCountEstimateCode ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:or ( [ sh:class sphn:ReferenceValue ] [ sh:class sphn:ReferenceRange ] ) ; sh:path sphn:hasNumericalReference ], - [ sh:class sphn:Quantity ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasQuantity ], - [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:or ( [ sh:class snomed:260385009 ] [ sh:class snomed:10828004 ] [ sh:class snomed:373068000 ] ) ; - sh:path sphn:hasStainingResultCode ], [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasStringValue ], - [ sh:class sphn:MicrobiologyMicroscopyResult_cellMorphology ; + [ sh:class sphn:MicrobiologyMicroscopyResult_cellOrganization ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasCellMorphology ], - [ sh:class sphn:MicrobiologyMicroscopyResult_cellOrganization ; + sh:path sphn:hasCellOrganization ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:or ( [ sh:class snomed:10828004 ] [ sh:class snomed:373068000 ] [ sh:class snomed:260385009 ] ) ; + sh:path sphn:hasStainingResultCode ], + [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasCellOrganization ] ; + sh:path sphn:hasQuantity ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCellCountEstimateCode> as ?path) (?class as ?value) WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCellCountEstimateCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/57176003>, <http://snomed.info/id/260413007>, <http://snomed.info/id/46998006>, <http://snomed.info/id/260396001> )) . + FILTER( ?values IN ( <http://snomed.info/id/260413007>, <http://snomed.info/id/46998006>, <http://snomed.info/id/57176003>, <http://snomed.info/id/260396001> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ], @@ -6875,7 +6875,7 @@ constraints:sphnMicrobiologyMicroscopyResult a sh:NodeShape ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStainingResultCode> as ?path) (?class as ?value) WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasStainingResultCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/260385009>, <http://snomed.info/id/10828004>, <http://snomed.info/id/373068000> )) . + FILTER( ?values IN ( <http://snomed.info/id/10828004>, <http://snomed.info/id/373068000>, <http://snomed.info/id/260385009> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ] ; @@ -6891,14 +6891,6 @@ constraints:sphnMicrobiologyMicroscopyResult_Warning_Naming a sh:NodeShape ; ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasStainingResultCode> ?code . FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ], - [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCellCountEstimateCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCellCountEstimateCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) - }""" ], [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-MicrobiologyMicroscopyResult-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> @@ -6907,76 +6899,84 @@ constraints:sphnMicrobiologyMicroscopyResult_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-MicrobiologyMicroscopyResult-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCellCountEstimateCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCellCountEstimateCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:MicrobiologyMicroscopyResult . constraints:sphnMicrobiologyMicroscopyResult_cellMorphology a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type rdfs:label ) ; - sh:property [ sh:in ( sphn-individual:RodShaped sphn-individual:Other sphn-individual:Filamentous sphn-individual:Round sphn-individual:Ovoid sphn-individual:CurvedRodShaped sphn-individual:Elongated sphn-individual:Spiral ) ; + sh:property [ sh:in ( sphn-individual:Ovoid sphn-individual:Round sphn-individual:RodShaped sphn-individual:Other sphn-individual:Elongated sphn-individual:Filamentous sphn-individual:Spiral sphn-individual:CurvedRodShaped ) ; sh:path [ sh:inversePath rdf:type ] ] ; sh:targetClass sphn:MicrobiologyMicroscopyResult_cellMorphology . constraints:sphnMicrobiologyMicroscopyResult_cellOrganization a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type rdfs:label ) ; - sh:property [ sh:in ( sphn-individual:Multicellular sphn-individual:Unicellular sphn-individual:EntireCell ) ; + sh:property [ sh:in ( sphn-individual:Multicellular sphn-individual:EntireCell sphn-individual:Unicellular ) ; sh:path [ sh:inversePath rdf:type ] ] ; sh:targetClass sphn:MicrobiologyMicroscopyResult_cellOrganization . constraints:sphnMicroorganismIdentificationLabTest a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:MicroorganismIdentificationResult ; - sh:minCount 1 ; - sh:path sphn:hasResult ], - [ sh:class snomed:19851009 ; + sh:property [ sh:class snomed:19851009 ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasCode ], [ sh:class sphn:LabAnalyzer ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasTestKit ], + sh:path sphn:hasInstrument ], [ sh:class sphn:LabAnalyzer ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasInstrument ] ; + sh:path sphn:hasTestKit ], + [ sh:class sphn:MicroorganismIdentificationResult ; + sh:minCount 1 ; + sh:path sphn:hasResult ] ; sh:targetClass sphn:MicroorganismIdentificationLabTest . constraints:sphnMicroorganismIdentificationLabTestEvent a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], + sh:property [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasDateTime ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDataProvider ], - [ sh:datatype xsd:dateTime ; + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], + [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasDateTime ], - [ sh:class sphn:MicroorganismIdentificationLabTest ; + sh:path sphn:hasAdministrativeCase ], + [ sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasLabTest ], + sh:or ( [ sh:class sphn:Sample ] [ sh:class sphn:Isolate ] ) ; + sh:path sphn:hasSample ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], + [ sh:class sphn:MicroorganismIdentificationLabTest ; + sh:minCount 1 ; + sh:path sphn:hasLabTest ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasReportDateTime ], - [ sh:class sphn:AdministrativeCase ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], - [ sh:maxCount 1 ; - sh:minCount 1 ; - sh:or ( [ sh:class sphn:Sample ] [ sh:class sphn:Isolate ] ) ; - sh:path sphn:hasSample ] ; + sh:path sphn:hasReportDateTime ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "For sphn:hasSample, instances of sphn:TumorSpecimen are not allowed" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> @@ -7024,32 +7024,32 @@ constraints:sphnMicroorganismIdentificationLabTest_Warning_Naming a sh:NodeShape constraints:sphnMicroorganismIdentificationResult a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:Quantity ; + sh:property [ sh:class sphn:Organism ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasTimeToPositivity ], + sh:path sphn:hasOrganism ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:or ( [ sh:class snomed:2667000 ] [ sh:class snomed:373068000 ] [ sh:class snomed:52101004 ] ) ; + sh:path sphn:hasCode ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:or ( [ sh:class sphn:ReferenceValue ] [ sh:class sphn:ReferenceRange ] ) ; sh:path sphn:hasNumericalReference ], - [ sh:datatype xsd:string ; + [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasStringValue ], - [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:or ( [ sh:class snomed:2667000 ] [ sh:class snomed:52101004 ] [ sh:class snomed:373068000 ] ) ; - sh:path sphn:hasCode ], - [ sh:class sphn:Organism ; + sh:path sphn:hasTimeToPositivity ], + [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasOrganism ] ; + sh:path sphn:hasStringValue ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?class as ?value) WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/2667000>, <http://snomed.info/id/52101004>, <http://snomed.info/id/373068000> )) . + FILTER( ?values IN ( <http://snomed.info/id/2667000>, <http://snomed.info/id/373068000>, <http://snomed.info/id/52101004> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ] ; @@ -7079,29 +7079,29 @@ constraints:sphnMicroorganismIdentificationResult_Warning_Naming a sh:NodeShape constraints:sphnNationality a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasRecordDateTime ], - [ sh:class sphn:Country ; + sh:property [ sh:class sphn:Country ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasAssociatedCountry ], - [ sh:class sphn:SubjectPseudoIdentifier ; + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], + sh:path sphn:hasDataProvider ], [ sh:maxCount 1 ; sh:minCount 0 ; sh:or ( [ sh:class snomed:19535007 ] [ sh:class snomed:255396000 ] ) ; sh:path sphn:hasAcquistionCode ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:class sphn:DataProvider ; + [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ] ; + sh:path sphn:hasSubjectPseudoIdentifier ], + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasRecordDateTime ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasAcquistionCode> as ?path) (?class as ?value) @@ -7137,33 +7137,33 @@ constraints:sphnNationality_Warning_Naming a sh:NodeShape ; constraints:sphnNursingDiagnosis a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasRecordDateTime ], - [ sh:class sphn:SourceSystem ; + sh:property [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], + [ sh:class sphn:Code ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasCode ], + [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ], [ sh:class sphn:Age ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasSubjectAge ], - [ sh:class sphn:SubjectPseudoIdentifier ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasAdministrativeCase ], - [ sh:class sphn:Code ; + [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasCode ], - [ sh:class sphn:DataProvider ; + sh:path sphn:hasSubjectPseudoIdentifier ], + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ] ; + sh:minCount 0 ; + sh:path sphn:hasRecordDateTime ] ; sh:targetClass sphn:NursingDiagnosis . constraints:sphnNursingDiagnosis_Warning_Naming a sh:NodeShape ; @@ -7182,18 +7182,26 @@ constraints:sphnNursingDiagnosis_Warning_Naming a sh:NodeShape ; constraints:sphnNutritionIntake a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:or ( [ sh:class snomed:268472006 ] [ sh:class snomed:926364008 ] [ sh:class snomed:169741004 ] [ sh:class snomed:289002003 ] [ sh:class snomed:926365009 ] ) ; - sh:path sphn:hasModeCode ], - [ sh:class sphn:Quantity ; + sh:property [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ], + [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasEnergyQuantity ], + sh:path sphn:hasAdministrativeCase ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasStartDateTime ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:or ( [ sh:class snomed:169741004 ] [ sh:class snomed:289002003 ] [ sh:class snomed:926365009 ] [ sh:class snomed:926364008 ] [ sh:class snomed:268472006 ] ) ; + sh:path sphn:hasModeCode ], [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], @@ -7201,43 +7209,43 @@ constraints:sphnNutritionIntake a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasEndDateTime ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasStartDateTime ], - [ sh:class sphn:AdministrativeCase ; + [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], - [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], + sh:path sphn:hasEnergyQuantity ], [ sh:class sphn:Substance ; sh:minCount 0 ; sh:path sphn:hasSubstance ] ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "No descendents (all subclasses) of the specified codes are allowed" ; - sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasModeCode> as ?path) (?class as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasModeCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/268472006>, <http://snomed.info/id/926364008>, <http://snomed.info/id/169741004>, <http://snomed.info/id/289002003>, <http://snomed.info/id/926365009> )) . - FILTER (?class NOT IN ( ?values ) ) . - FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} - }""" ], - [ a sh:SPARQLConstraint ; sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> ?hasStartDateTime . ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasEndDateTime> ?hasEndDateTime . FILTER (?hasStartDateTime > ?hasEndDateTime) - }""" ] ; + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "No descendents (all subclasses) of the specified codes are allowed" ; + sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasModeCode> as ?path) (?class as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasModeCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . + FILTER( ?values IN ( <http://snomed.info/id/169741004>, <http://snomed.info/id/289002003>, <http://snomed.info/id/926365009>, <http://snomed.info/id/926364008>, <http://snomed.info/id/268472006> )) . + FILTER (?class NOT IN ( ?values ) ) . + FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} + }""" ] ; sh:targetClass sphn:NutritionIntake . constraints:sphnNutritionIntake_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasModeCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasModeCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-NutritionIntake-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -7245,54 +7253,46 @@ constraints:sphnNutritionIntake_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-NutritionIntake-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasModeCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasModeCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:NutritionIntake . constraints:sphnOncologyDiagnosis a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasRecordDateTime ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasIncidenceDateTime ], - [ sh:class sphn:BodySite ; + sh:property [ sh:class sphn:BodySite ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasBodySite ], - [ sh:class sphn:SubjectPseudoIdentifier ; + [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], + sh:minCount 0 ; + sh:path sphn:hasAdministrativeCase ], [ sh:class sphn:Age ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasSubjectAge ], - [ sh:class sphn:AdministrativeCase ; + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], + sh:path sphn:hasIncidenceDateTime ], [ sh:class sphn:Code ; sh:minCount 1 ; sh:path sphn:hasCode ], + [ sh:class sphn:SubjectPseudoIdentifier ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDataProvider ], [ sh:class sphn:SourceSystem ; sh:minCount 1 ; - sh:path sphn:hasSourceSystem ] ; + sh:path sphn:hasSourceSystem ], + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasRecordDateTime ] ; sh:targetClass sphn:OncologyDiagnosis . constraints:sphnOncologyDiagnosis_Warning_Naming a sh:NodeShape ; @@ -7311,39 +7311,39 @@ constraints:sphnOncologyDiagnosis_Warning_Naming a sh:NodeShape ; constraints:sphnOncologySurgery a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:dateTime ; + sh:property [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasEndDateTime ], - [ sh:class sphn:AdministrativeCase ; + sh:minCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ], + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], + sh:minCount 1 ; + sh:path sphn:hasDataProvider ], [ sh:minCount 1 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class sphn:Terminology ] ) ; + sh:or ( [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] ) ; sh:path sphn:hasCode ], [ sh:class sphn:BodySite ; sh:minCount 0 ; sh:path sphn:hasBodySite ], + [ sh:class sphn:Intent ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasIntent ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasStartDateTime ], + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasEndDateTime ], [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], - [ sh:class sphn:Intent ; + [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasIntent ], - [ sh:class sphn:SubjectPseudoIdentifier ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ] ; + sh:path sphn:hasAdministrativeCase ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) @@ -7412,10 +7412,11 @@ constraints:sphnOncologySurgery_Warning_Naming a sh:NodeShape ; constraints:sphnOrganSupport a sh:NodeShape ; sh:closed false ; - sh:ignoredProperties ( sphn:hasBodySite rdf:type sphn:hasIntent ) ; - sh:property [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], + sh:ignoredProperties ( rdf:type sphn:hasIntent sphn:hasBodySite ) ; + sh:property [ sh:class sphn:Intent ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasIntent ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; @@ -7426,49 +7427,48 @@ constraints:sphnOrganSupport a sh:NodeShape ; sh:path sphn:hasSubjectPseudoIdentifier ], [ sh:maxCount 1 ; sh:minCount 1 ; - sh:or ( [ sh:class snomed:108241001 ] [ sh:class snomed:1222606000 ] [ sh:class snomed:1149092001 ] [ sh:class snomed:232957001 ] [ sh:class snomed:233573008 ] ) ; + sh:or ( [ sh:class snomed:1222606000 ] [ sh:class snomed:1149092001 ] [ sh:class snomed:233573008 ] [ sh:class snomed:232957001 ] [ sh:class snomed:108241001 ] ) ; sh:path sphn:hasCode ], - [ sh:class sphn:BodySite ; - sh:minCount 0 ; - sh:path sphn:hasBodySite ], - [ sh:class snomed:399707004 ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path ( sphn:hasIntent sphn:hasCode ) ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasStartDateTime ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], [ sh:minCount 0 ; - sh:or ( [ sh:class snomed:64033007 ] [ sh:class snomed:10200004 ] [ sh:class snomed:80891009 ] [ sh:class snomed:39607008 ] ) ; + sh:or ( [ sh:class snomed:10200004 ] [ sh:class snomed:39607008 ] [ sh:class snomed:80891009 ] [ sh:class snomed:64033007 ] ) ; sh:path ( sphn:hasBodySite sphn:hasCode ) ], - [ sh:class sphn:DataProvider ; + [ sh:class snomed:399707004 ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], + sh:minCount 0 ; + sh:path ( sphn:hasIntent sphn:hasCode ) ], + [ sh:class sphn:BodySite ; + sh:minCount 0 ; + sh:path sphn:hasBodySite ], [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasAdministrativeCase ], - [ sh:class sphn:Intent ; + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasIntent ] ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; - sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasIntent> as ?path) (?class as ?value) + sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasIntent>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?class as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasIntent>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <https://biomedit.ch/rdf/sphn-schema/sphn#Intent> )) . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasIntent>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . + FILTER( ?values IN ( <http://snomed.info/id/399707004> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ], [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; - sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasIntent>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?class as ?value) + sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasIntent> as ?path) (?class as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasIntent>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/399707004> )) . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasIntent>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . + FILTER( ?values IN ( <https://biomedit.ch/rdf/sphn-schema/sphn#Intent> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ], @@ -7485,6 +7485,15 @@ constraints:sphnOrganSupport a sh:NodeShape ; constraints:sphnOrganSupport_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; + sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-OrganSupport-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> + SELECT ?this (?class as ?path) (?this as ?value) + WHERE { + ?this rdf:type ?class . + FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-OrganSupport-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?this ("<https://biomedit.ch/rdf/sphn-schema/sphn#hasBodySite>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode>" as ?path) (?code as ?value) @@ -7507,15 +7516,6 @@ constraints:sphnOrganSupport_Warning_Naming a sh:NodeShape ; WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasIntent>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; - sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-OrganSupport-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> - SELECT ?this (?class as ?path) (?this as ?value) - WHERE { - ?this rdf:type ?class . - FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-OrganSupport-.*$")) }""" ] ; sh:targetClass sphn:OrganSupport . @@ -7524,7 +7524,7 @@ constraints:sphnOrganism a sh:NodeShape ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:maxCount 1 ; sh:minCount 1 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class snomed:410607006 ] ) ; + sh:or ( [ sh:class snomed:410607006 ] [ sh:class sphn:Code ] ) ; sh:path sphn:hasCode ] ; sh:targetClass sphn:Organism . @@ -7544,90 +7544,98 @@ constraints:sphnOrganism_Warning_Naming a sh:NodeShape ; constraints:sphnOxygenSaturation a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( sphn:hasQuantity rdf:type ) ; - sh:property [ sh:class sphn:TimeSeriesDataFile ; + sh:property [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasDateTime ], + [ sh:class ucum:percent ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasDataFile ], + sh:path ( sphn:hasQuantity sphn:hasUnit sphn:hasCode ) ], [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasQuantity ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasDateTime ], - [ sh:class ucum:percent ; + [ sh:class sphn:TimeSeriesDataFile ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path ( sphn:hasQuantity sphn:hasUnit sphn:hasCode ) ] ; + sh:path sphn:hasDataFile ] ; sh:targetClass sphn:OxygenSaturation . constraints:sphnOxygenSaturationMeasurement a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:Performer ; + sh:property [ sh:class sphn:OxygenSaturation ; + sh:minCount 1 ; + sh:path sphn:hasResult ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], + [ sh:class snomed:128927009 ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasPerformer ], - [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], + sh:path sphn:hasMethodCode ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:datatype xsd:dateTime ; + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasStartDateTime ], + sh:path sphn:hasDataProvider ], + [ sh:class sphn:BodySite ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasBodySite ], [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasAdministrativeCase ], - [ sh:class sphn:OxygenSaturation ; + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasResult ], - [ sh:class snomed:128927009 ; + sh:path sphn:hasStartDateTime ], + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasMethodCode ], + sh:path sphn:hasEndDateTime ], [ sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class sphn:MedicalDevice ] [ sh:class sphn:Implant ] ) ; + sh:or ( [ sh:class sphn:Implant ] [ sh:class sphn:MedicalDevice ] ) ; sh:path sphn:hasMedicalDevice ], - [ sh:class sphn:BodySite ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasBodySite ], - [ sh:datatype xsd:dateTime ; + [ sh:class sphn:Performer ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasEndDateTime ] ; + sh:path sphn:hasPerformer ] ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "For sphn:hasMedicalDevice, instances of sphn:AccessDevice, sphn:LabAnalyzer are not allowed" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMedicalDevice> as ?path) (?class as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMedicalDevice>/rdf:type ?class. - FILTER(?class IN (<https://biomedit.ch/rdf/sphn-schema/sphn#AccessDevice>, <https://biomedit.ch/rdf/sphn-schema/sphn#LabAnalyzer>)) - }""" ], - [ a sh:SPARQLConstraint ; sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> ?hasStartDateTime . ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasEndDateTime> ?hasEndDateTime . FILTER (?hasStartDateTime > ?hasEndDateTime) - }""" ] ; + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "For sphn:hasMedicalDevice, instances of sphn:AccessDevice, sphn:LabAnalyzer are not allowed" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMedicalDevice> as ?path) (?class as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMedicalDevice>/rdf:type ?class. + FILTER(?class IN (<https://biomedit.ch/rdf/sphn-schema/sphn#AccessDevice>, <https://biomedit.ch/rdf/sphn-schema/sphn#LabAnalyzer>)) + }""" ] ; sh:targetClass sphn:OxygenSaturationMeasurement . constraints:sphnOxygenSaturationMeasurement_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-OxygenSaturationMeasurement-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -7635,14 +7643,6 @@ constraints:sphnOxygenSaturationMeasurement_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-OxygenSaturationMeasurement-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:OxygenSaturationMeasurement . @@ -7671,14 +7671,6 @@ constraints:sphnPerformer a sh:NodeShape ; constraints:sphnPerformer_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Performer-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -7686,6 +7678,14 @@ constraints:sphnPerformer_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-Performer-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:Performer . @@ -7694,7 +7694,7 @@ constraints:sphnPharmaceuticalDoseForm a sh:NodeShape ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:maxCount 1 ; sh:minCount 1 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class snomed:736542009 ] ) ; + sh:or ( [ sh:class snomed:736542009 ] [ sh:class sphn:Code ] ) ; sh:path sphn:hasCode ] ; sh:targetClass sphn:PharmaceuticalDoseForm . @@ -7744,41 +7744,41 @@ constraints:sphnPhysiologicState_Warning_Naming a sh:NodeShape ; constraints:sphnProblemCondition a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; + sh:property [ sh:class snomed:307152002 ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasStringValue ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:class sphn:AdministrativeCase ; + sh:path sphn:hasRelativeTemporalityCode ], + [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], - [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], + sh:path sphn:hasStringValue ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:or ( [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] ) ; + sh:path sphn:hasCode ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class snomed:307152002 ; + [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ], + [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasRelativeTemporalityCode ], - [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class sphn:Terminology ] ) ; - sh:path sphn:hasCode ], + sh:path sphn:hasAdministrativeCase ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasRecordDateTime ], + sh:path sphn:hasOnsetDateTime ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasOnsetDateTime ] ; + sh:path sphn:hasRecordDateTime ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ] ; sh:targetClass sphn:ProblemCondition . constraints:sphnProblemCondition_Warning_Codes a sh:NodeShape ; @@ -7827,6 +7827,14 @@ constraints:sphnProblemCondition_Warning_Codes a sh:NodeShape ; constraints:sphnProblemCondition_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasRelativeTemporalityCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasRelativeTemporalityCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-ProblemCondition-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -7834,14 +7842,6 @@ constraints:sphnProblemCondition_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-ProblemCondition-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasRelativeTemporalityCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasRelativeTemporalityCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:ProblemCondition . @@ -7854,7 +7854,7 @@ constraints:sphnProtein a sh:NodeShape ; sh:path sphn:hasOrganism ], [ sh:maxCount 1 ; sh:minCount 1 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class sphn:Terminology ] ) ; + sh:or ( [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] ) ; sh:path sphn:hasCode ] ; sh:targetClass sphn:Protein . @@ -7927,7 +7927,7 @@ constraints:sphnQualityControlMetric a sh:NodeShape ; sh:path sphn:hasQuantity ], [ sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class sphn:Terminology ] ) ; + sh:or ( [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] ) ; sh:path sphn:hasCode ] ; sh:targetClass sphn:QualityControlMetric . @@ -7990,14 +7990,14 @@ constraints:sphnQualityControlMetric_Warning_Naming a sh:NodeShape ; constraints:sphnQuantity a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:maxCount 1 ; - sh:minCount 1 ; - sh:or ( [ sh:datatype xsd:double ] [ sh:datatype xsd:string ] ) ; - sh:path sphn:hasValue ], - [ sh:class sphn:Comparator ; + sh:property [ sh:class sphn:Comparator ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasComparator ], + [ sh:maxCount 1 ; + sh:minCount 1 ; + sh:or ( [ sh:datatype xsd:double ] [ sh:datatype xsd:string ] ) ; + sh:path sphn:hasValue ], [ sh:class sphn:Unit ; sh:maxCount 1 ; sh:minCount 1 ; @@ -8020,81 +8020,73 @@ constraints:sphnQuantity_Warning_Naming a sh:NodeShape ; constraints:sphnRadiotherapyProcedure a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( sphn:hasRadiationQuantity rdf:type ) ; - sh:property [ sh:class sphn:AdministrativeCase ; + sh:property [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], - [ sh:datatype xsd:dateTime ; + sh:path sphn:hasEndDateTime ], + [ sh:class sphn:Quantity ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasStartDateTime ], + sh:minCount 0 ; + sh:path sphn:hasRadiationQuantity ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:or ( [ sh:class ucum:mCi ] [ sh:class ucum:MBq ] [ sh:class ucum:cGy ] [ sh:class ucum:Gy ] ) ; - sh:path ( sphn:hasRadiationQuantity sphn:hasUnit sphn:hasCode ) ], - [ sh:class sphn:Quantity ; + [ sh:minCount 1 ; + sh:or ( [ sh:class snomed:33195004 ] [ sh:class snomed:152198000 ] [ sh:class snomed:74964007 ] [ sh:class snomed:78080008 ] [ sh:class snomed:395096001 ] [ sh:class snomed:168524008 ] [ sh:class snomed:399315003 ] [ sh:class snomed:115959002 ] ) ; + sh:path sphn:hasCode ], + [ sh:class sphn:Intent ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasFractionsNumber ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], + sh:path sphn:hasIntent ], [ sh:class sphn:BodySite ; sh:minCount 0 ; sh:path sphn:hasBodySite ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasEndDateTime ], - [ sh:minCount 1 ; - sh:or ( [ sh:class snomed:168524008 ] [ sh:class snomed:399315003 ] [ sh:class snomed:115959002 ] [ sh:class snomed:152198000 ] [ sh:class snomed:74964007 ] [ sh:class snomed:78080008 ] [ sh:class snomed:33195004 ] [ sh:class snomed:395096001 ] ) ; - sh:path sphn:hasCode ], - [ sh:class sphn:Intent ; + sh:minCount 1 ; + sh:path sphn:hasStartDateTime ], + [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasIntent ], - [ sh:class sphn:Quantity ; + sh:path sphn:hasFractionsNumber ], + [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasRadiationQuantity ] ; + sh:path sphn:hasAdministrativeCase ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:or ( [ sh:class ucum:cGy ] [ sh:class ucum:MBq ] [ sh:class ucum:mCi ] [ sh:class ucum:Gy ] ) ; + sh:path ( sphn:hasRadiationQuantity sphn:hasUnit sphn:hasCode ) ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], + [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ] ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; - sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> ?hasStartDateTime . - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasEndDateTime> ?hasEndDateTime . - FILTER (?hasStartDateTime > ?hasEndDateTime) - }""" ], - [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?class as ?value) WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/168524008>, <http://snomed.info/id/399315003>, <http://snomed.info/id/115959002>, <http://snomed.info/id/152198000>, <http://snomed.info/id/74964007>, <http://snomed.info/id/78080008>, <http://snomed.info/id/33195004>, <http://snomed.info/id/395096001> )) . + FILTER( ?values IN ( <http://snomed.info/id/33195004>, <http://snomed.info/id/152198000>, <http://snomed.info/id/74964007>, <http://snomed.info/id/78080008>, <http://snomed.info/id/395096001>, <http://snomed.info/id/168524008>, <http://snomed.info/id/399315003>, <http://snomed.info/id/115959002> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} - }""" ] ; + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; + sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> ?hasStartDateTime . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasEndDateTime> ?hasEndDateTime . + FILTER (?hasStartDateTime > ?hasEndDateTime) + }""" ] ; sh:targetClass sphn:RadiotherapyProcedure . constraints:sphnRadiotherapyProcedure_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-RadiotherapyProcedure-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -8102,34 +8094,42 @@ constraints:sphnRadiotherapyProcedure_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-RadiotherapyProcedure-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:RadiotherapyProcedure . constraints:sphnReferenceInterpretation a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:minCount 0 ; - sh:path sphn:hasStandardGuideline ], - [ sh:class sphn:ReferenceInterpretationResult ; + sh:property [ sh:class sphn:ReferenceInterpretationResult ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasOutput ], + [ sh:datatype xsd:string ; + sh:minCount 0 ; + sh:path sphn:hasStandardGuideline ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasDateTime ], [ sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class sphn:Circumference ] [ sh:class sphn:AssessmentResult ] [ sh:class sphn:CardiacOutput ] [ sh:class sphn:ReferenceInterpretationResult ] [ sh:class sphn:LabResult ] [ sh:class sphn:BodyWeight ] [ sh:class sphn:BodyTemperature ] [ sh:class sphn:HeartRate ] [ sh:class sphn:BodyHeight ] [ sh:class sphn:TumorStageAssessmentResult ] [ sh:class sphn:Result ] [ sh:class sphn:RespiratoryRate ] [ sh:class sphn:BloodPressure ] [ sh:class sphn:OxygenSaturation ] ) ; + sh:or ( [ sh:class sphn:Result ] [ sh:class sphn:Circumference ] [ sh:class sphn:AssessmentResult ] [ sh:class sphn:RespiratoryRate ] [ sh:class sphn:OxygenSaturation ] [ sh:class sphn:HeartRate ] [ sh:class sphn:BloodPressure ] [ sh:class sphn:LabResult ] [ sh:class sphn:CardiacOutput ] [ sh:class sphn:TumorStageAssessmentResult ] [ sh:class sphn:ReferenceInterpretationResult ] [ sh:class sphn:BodyTemperature ] [ sh:class sphn:BodyHeight ] [ sh:class sphn:BodyWeight ] ) ; sh:path sphn:hasInput ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ] ; + sh:path sphn:hasDataProvider ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "For sphn:hasInput, instances of sphn:TumorGradeAssessmentResult, sphn:â TumorStageAssessmentResult, sphn:VitalStatus are not allowed" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> @@ -8152,6 +8152,14 @@ constraints:sphnReferenceInterpretationResult a sh:NodeShape ; constraints:sphnReferenceInterpretationResult_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-ReferenceInterpretationResult-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -8159,14 +8167,6 @@ constraints:sphnReferenceInterpretationResult_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-ReferenceInterpretationResult-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:ReferenceInterpretationResult . @@ -8214,7 +8214,7 @@ constraints:sphnReferenceSequence a sh:NodeShape ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:maxCount 1 ; sh:minCount 1 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class sphn:Terminology ] ) ; + sh:or ( [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] ) ; sh:path sphn:hasCode ] ; sh:targetClass sphn:ReferenceSequence . @@ -8299,26 +8299,26 @@ constraints:sphnReferenceValue_Warning_Naming a sh:NodeShape ; constraints:sphnRespiratoryRate a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type sphn:hasDataDetermination ) ; - sh:property [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasDateTime ], - [ sh:maxCount 1 ; + sh:property [ sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class snomed:263760002 ] [ sh:class snomed:258104002 ] [ sh:class snomed:87982008 ] [ sh:class snomed:258090004 ] ) ; + sh:or ( [ sh:class snomed:258104002 ] [ sh:class snomed:87982008 ] [ sh:class snomed:263760002 ] [ sh:class snomed:258090004 ] ) ; sh:path ( sphn:hasDataDetermination sphn:hasMethodCode ) ], - [ sh:class sphn:Quantity ; + [ sh:class sphn:DataDetermination ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasQuantity ], + sh:path sphn:hasDataDetermination ], [ sh:class sphn:TimeSeriesDataFile ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasDataFile ], - [ sh:class sphn:DataDetermination ; + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasDataDetermination ] ; + sh:path sphn:hasDateTime ], + [ sh:class sphn:Quantity ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasQuantity ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasDataDetermination> as ?path) (?class as ?value) @@ -8333,7 +8333,7 @@ constraints:sphnRespiratoryRate a sh:NodeShape ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasDataDetermination>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> as ?path) (?class as ?value) WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasDataDetermination>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/263760002>, <http://snomed.info/id/258104002>, <http://snomed.info/id/87982008>, <http://snomed.info/id/258090004> )) . + FILTER( ?values IN ( <http://snomed.info/id/258104002>, <http://snomed.info/id/87982008>, <http://snomed.info/id/263760002>, <http://snomed.info/id/258090004> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ] ; @@ -8342,21 +8342,28 @@ constraints:sphnRespiratoryRate a sh:NodeShape ; constraints:sphnRespiratoryRateMeasurement a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class snomed:128927009 ; + sh:property [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasMethodCode ], - [ sh:class sphn:RespiratoryRate ; - sh:minCount 1 ; - sh:path sphn:hasResult ], + sh:path sphn:hasEndDateTime ], [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasAdministrativeCase ], - [ sh:datatype xsd:dateTime ; + [ sh:class snomed:128927009 ; sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasMethodCode ], + [ sh:class sphn:RespiratoryRate ; sh:minCount 1 ; - sh:path sphn:hasStartDateTime ], + sh:path sphn:hasResult ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], + [ sh:class sphn:SubjectPseudoIdentifier ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ], [ sh:class sphn:Performer ; sh:maxCount 1 ; sh:minCount 0 ; @@ -8367,40 +8374,41 @@ constraints:sphnRespiratoryRateMeasurement a sh:NodeShape ; sh:path sphn:hasMedicalDevice ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasEndDateTime ], - [ sh:class sphn:SubjectPseudoIdentifier ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:SourceSystem ; sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], + sh:path sphn:hasStartDateTime ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDataProvider ] ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; - sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> ?hasStartDateTime . - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasEndDateTime> ?hasEndDateTime . - FILTER (?hasStartDateTime > ?hasEndDateTime) - }""" ], - [ a sh:SPARQLConstraint ; sh:message "For sphn:hasMedicalDevice, instances of sphn:AccessDevice, sphn:LabAnalyzer, sphn:Implant are not allowed" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMedicalDevice> as ?path) (?class as ?value) WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMedicalDevice>/rdf:type ?class. FILTER(?class IN (<https://biomedit.ch/rdf/sphn-schema/sphn#AccessDevice>, <https://biomedit.ch/rdf/sphn-schema/sphn#LabAnalyzer>, <https://biomedit.ch/rdf/sphn-schema/sphn#Implant>)) - }""" ] ; + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; + sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> ?hasStartDateTime . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasEndDateTime> ?hasEndDateTime . + FILTER (?hasStartDateTime > ?hasEndDateTime) + }""" ] ; sh:targetClass sphn:RespiratoryRateMeasurement . constraints:sphnRespiratoryRateMeasurement_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-RespiratoryRateMeasurement-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -8408,20 +8416,20 @@ constraints:sphnRespiratoryRateMeasurement_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-RespiratoryRateMeasurement-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:RespiratoryRateMeasurement . constraints:sphnRespiratoryRate_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this ("<https://biomedit.ch/rdf/sphn-schema/sphn#hasDataDetermination>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode>" as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasDataDetermination>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-RespiratoryRate-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -8429,42 +8437,34 @@ constraints:sphnRespiratoryRate_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-RespiratoryRate-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this ("<https://biomedit.ch/rdf/sphn-schema/sphn#hasDataDetermination>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode>" as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasDataDetermination>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasMethodCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:RespiratoryRate . constraints:sphnResuscitationDirective a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:SubjectPseudoIdentifier ; + sh:property [ sh:class snomed:365870005 ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:SourceSystem ; + sh:path sphn:hasCode ], + [ sh:class sphn:AdministrativeCase ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasAdministrativeCase ], + [ sh:class sphn:SubjectPseudoIdentifier ; + sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], + sh:path sphn:hasSubjectPseudoIdentifier ], [ sh:datatype xsd:dateTime ; sh:minCount 0 ; sh:path sphn:hasRecordDateTime ], - [ sh:class snomed:365870005 ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasCode ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasDataProvider ], - [ sh:class sphn:AdministrativeCase ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ] ; + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ] ; sh:targetClass sphn:ResuscitationDirective . constraints:sphnResuscitationDirective_Warning_Naming a sh:NodeShape ; @@ -8491,45 +8491,45 @@ constraints:sphnResuscitationDirective_Warning_Naming a sh:NodeShape ; constraints:sphnSample a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:Sample_primaryContainer ; - sh:maxCount 1 ; + sh:property [ sh:class snomed:123038009 ; sh:minCount 0 ; - sh:path sphn:hasPrimaryContainer ], - [ sh:class sphn:SubjectPseudoIdentifier ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:class sphn:BodySite ; + sh:path sphn:hasMaterialTypeCode ], + [ sh:datatype xsd:string ; + sh:minCount 0 ; + sh:path sphn:hasIdentifier ], + [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasBodySite ], + sh:path sphn:hasAdministrativeCase ], + [ sh:datatype xsd:anyURI ; + sh:path sphn:hasSharedIdentifier ], [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], - [ sh:class snomed:123038009 ; - sh:minCount 0 ; - sh:path sphn:hasMaterialTypeCode ], - [ sh:datatype xsd:anyURI ; - sh:path sphn:hasSharedIdentifier ], [ sh:class sphn:Sample_fixationType ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasFixationType ], + [ sh:class sphn:Sample_primaryContainer ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasPrimaryContainer ], + [ sh:class sphn:BodySite ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasBodySite ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasCollectionDateTime ], - [ sh:datatype xsd:string ; - sh:minCount 0 ; - sh:path sphn:hasIdentifier ], - [ sh:class sphn:AdministrativeCase ; + [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ] ; + sh:minCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ], + [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ] ; sh:target [ a sh:SPARQLTarget ; sh:select """SELECT ?this WHERE { @@ -8545,44 +8545,44 @@ constraints:sphnSample a sh:NodeShape ; constraints:sphnSampleProcessing a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:StandardOperatingProcedure ; - sh:maxCount 1 ; + sh:property [ sh:minCount 0 ; + sh:or ( [ sh:class sphn:TumorSpecimen ] [ sh:class sphn:Sample ] [ sh:class sphn:Isolate ] ) ; + sh:path sphn:hasInput ], + [ sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasStandardOperatingProcedure ], + sh:or ( [ sh:class sphn:Sample ] [ sh:class sphn:Isolate ] ) ; + sh:path sphn:hasOutput ], [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], - [ sh:class sphn:SubjectPseudoIdentifier ; + [ sh:class sphn:StandardOperatingProcedure ; + sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:maxCount 1 ; + sh:path sphn:hasStandardOperatingProcedure ], + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class sphn:Terminology ] ) ; - sh:path sphn:hasCode ], + sh:path sphn:hasStartDateTime ], + [ sh:minCount 0 ; + sh:or ( [ sh:class sphn:SampleProcessing ] [ sh:class sphn:LibraryPreparation ] ) ; + sh:path sphn:hasPredecessor ], [ sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class sphn:Sample ] [ sh:class sphn:Isolate ] ) ; - sh:path sphn:hasOutput ], + sh:or ( [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] ) ; + sh:path sphn:hasCode ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDataProvider ], - [ sh:minCount 0 ; - sh:or ( [ sh:class sphn:SampleProcessing ] [ sh:class sphn:LibraryPreparation ] ) ; - sh:path sphn:hasPredecessor ], - [ sh:class sphn:AdministrativeCase ; - sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], - [ sh:minCount 0 ; - sh:or ( [ sh:class sphn:Sample ] [ sh:class sphn:Isolate ] [ sh:class sphn:TumorSpecimen ] ) ; - sh:path sphn:hasInput ], [ sh:class sphn:QualityControlMetric ; sh:minCount 0 ; sh:path sphn:hasQualityControlMetric ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; + [ sh:class sphn:AdministrativeCase ; sh:minCount 0 ; - sh:path sphn:hasStartDateTime ] ; + sh:path sphn:hasAdministrativeCase ], + [ sh:class sphn:SubjectPseudoIdentifier ; + sh:minCount 0 ; + sh:path sphn:hasSubjectPseudoIdentifier ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "For sphn:hasOutput, instances of sphn:TumorSpecimen are not allowed" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> @@ -8682,14 +8682,6 @@ constraints:sphnSampleProcessing_Warning_Naming a sh:NodeShape ; constraints:sphnSample_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMaterialTypeCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMaterialTypeCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Sample-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -8697,6 +8689,14 @@ constraints:sphnSample_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-Sample-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasMaterialTypeCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasMaterialTypeCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:target [ a sh:SPARQLTarget ; sh:select """SELECT ?this @@ -8713,14 +8713,14 @@ constraints:sphnSample_Warning_Naming a sh:NodeShape ; constraints:sphnSample_fixationType a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type rdfs:label ) ; - sh:property [ sh:in ( sphn-individual:AllprotectTissueReagent sphn-individual:Other sphn-individual:OptimumCuttingTemperatureMedium sphn-individual:NonaldehydeWithAceticAcid sphn-individual:HeatStabilization sphn-individual:NonaldehydeBasedWithoutAceticAcid sphn-individual:SnapFreezing sphn-individual:VacuumTechnologyStabilization sphn-individual:NonbufferedFormalin sphn-individual:AlcoholBased sphn-individual:NeutralBufferedFormalin sphn-individual:PAXgeneTissue sphn-individual:AldehydeBased sphn-individual:RNALater ) ; + sh:property [ sh:in ( sphn-individual:VacuumTechnologyStabilization sphn-individual:RNALater sphn-individual:NonaldehydeWithAceticAcid sphn-individual:NeutralBufferedFormalin sphn-individual:OptimumCuttingTemperatureMedium sphn-individual:HeatStabilization sphn-individual:AldehydeBased sphn-individual:AllprotectTissueReagent sphn-individual:SnapFreezing sphn-individual:PAXgeneTissue sphn-individual:NonbufferedFormalin sphn-individual:AlcoholBased sphn-individual:Other sphn-individual:NonaldehydeBasedWithoutAceticAcid ) ; sh:path [ sh:inversePath rdf:type ] ] ; sh:targetClass sphn:Sample_fixationType . constraints:sphnSample_primaryContainer a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type rdfs:label ) ; - sh:property [ sh:in ( sphn-individual:CellPreparationTubeCitrate sphn-individual:EDTAAndGel sphn-individual:S8820ProteaseInhibitorTabletsOrEquivalent sphn-individual:Other sphn-individual:SodiumFluoridePotassiumOxalate sphn-individual:PAXgeneBloodDNA sphn-individual:ChemicalAdditivesStabilizers sphn-individual:ProteaseInhibitors sphn-individual:Hirudin sphn-individual:PAXgeneBloodRNAplus sphn-individual:CellPreparationTubeHeparin sphn-individual:PolyethyleneTubeSterile sphn-individual:PhysicalFiltrationSystem sphn-individual:SodiumEDTA sphn-individual:AcidCitrateDextrose sphn-individual:TempusTube sphn-individual:PotassiumEDTA sphn-individual:PolypropyleneTubeSterile sphn-individual:LithiumHeparin sphn-individual:LithiumHeparinAndRubberPlug sphn-individual:LithiumHeparinAndGel sphn-individual:SerumSeparatorTubeWithClotActivator sphn-individual:SodiumCitrate sphn-individual:PAXgeneBoneMarrowRNA sphn-individual:SerumTubeWithoutClotActivator sphn-individual:NonAldehydeBasedStabilizerForCellFreeNucleicAcids sphn-individual:TraceElementsTube sphn-individual:Glass sphn-individual:StoolCollectionContainerWithDNAStabilizer sphn-individual:CitratePhosphateDextrose sphn-individual:AldehydeBasedStabilizerForCTCs sphn-individual:OrageneCollectionContainerOrEquivalent sphn-individual:SodiumHeparin sphn-individual:RNALater ) ; + sh:property [ sh:in ( sphn-individual:EDTAAndGel sphn-individual:RNALater sphn-individual:StoolCollectionContainerWithDNAStabilizer sphn-individual:SodiumCitrate sphn-individual:S8820ProteaseInhibitorTabletsOrEquivalent sphn-individual:CellPreparationTubeCitrate sphn-individual:SerumTubeWithoutClotActivator sphn-individual:AcidCitrateDextrose sphn-individual:SodiumEDTA sphn-individual:PAXgeneBloodRNAplus sphn-individual:TraceElementsTube sphn-individual:TempusTube sphn-individual:PolyethyleneTubeSterile sphn-individual:ProteaseInhibitors sphn-individual:NonAldehydeBasedStabilizerForCellFreeNucleicAcids sphn-individual:OrageneCollectionContainerOrEquivalent sphn-individual:AldehydeBasedStabilizerForCTCs sphn-individual:SodiumHeparin sphn-individual:PhysicalFiltrationSystem sphn-individual:PAXgeneBloodDNA sphn-individual:Glass sphn-individual:Other sphn-individual:PAXgeneBoneMarrowRNA sphn-individual:LithiumHeparinAndRubberPlug sphn-individual:PotassiumEDTA sphn-individual:SodiumFluoridePotassiumOxalate sphn-individual:LithiumHeparinAndGel sphn-individual:CellPreparationTubeHeparin sphn-individual:PolypropyleneTubeSterile sphn-individual:Hirudin sphn-individual:SerumSeparatorTubeWithClotActivator sphn-individual:ChemicalAdditivesStabilizers sphn-individual:LithiumHeparin sphn-individual:CitratePhosphateDextrose ) ; sh:path [ sh:inversePath rdf:type ] ] ; sh:targetClass sphn:Sample_primaryContainer . @@ -8731,28 +8731,28 @@ constraints:sphnSemanticMapping a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasMethodCode ], - [ sh:datatype xsd:dateTime ; + [ sh:class sphn:SemanticMapping_purpose ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasDateTime ], + sh:path sphn:hasPurpose ], + [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], [ sh:class sphn:SourceData ; sh:minCount 0 ; sh:path sphn:hasSourceData ], [ sh:maxCount 1 ; sh:minCount 1 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class sphn:Terminology ] ) ; + sh:or ( [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] ) ; sh:path sphn:hasOutputCode ], - [ sh:class sphn:SemanticMapping_purpose ; + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasPurpose ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ] ; + sh:path sphn:hasDateTime ] ; sh:targetClass sphn:SemanticMapping . constraints:sphnSemanticMapping_Warning_Codes a sh:NodeShape ; @@ -8814,59 +8814,59 @@ constraints:sphnSemanticMapping_Warning_Naming a sh:NodeShape ; constraints:sphnSemanticMapping_purpose a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type rdfs:label ) ; - sh:property [ sh:in ( sphn-individual:PatientCare sphn-individual:Billing sphn-individual:QualityControl sphn-individual:Research ) ; + sh:property [ sh:in ( sphn-individual:Billing sphn-individual:QualityControl sphn-individual:PatientCare sphn-individual:Research ) ; sh:path [ sh:inversePath rdf:type ] ] ; sh:targetClass sphn:SemanticMapping_purpose . constraints:sphnSequencingAnalysis a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:minCount 1 ; - sh:or ( [ sh:class sphn:TimeSeriesDataFile ] [ sh:class sphn:DataFile ] ) ; - sh:path sphn:hasOutput ], - [ sh:minCount 0 ; + sh:property [ sh:minCount 0 ; sh:or ( [ sh:class sphn:Assay ] [ sh:class sphn:DataProcessing ] ) ; sh:path sphn:hasPredecessor ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:maxCount 1 ; + [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; sh:minCount 1 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class edam:operation_2945 ] [ sh:class sphn:Terminology ] ) ; - sh:path sphn:hasCode ], + sh:path sphn:hasDataProvider ], + [ sh:minCount 1 ; + sh:or ( [ sh:class sphn:DataFile ] [ sh:class sphn:TimeSeriesDataFile ] ) ; + sh:path sphn:hasOutput ], [ sh:class sphn:QualityControlMetric ; sh:minCount 0 ; sh:path sphn:hasQualityControlMetric ], - [ sh:class sphn:ReferenceSequence ; + [ sh:class sphn:Software ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasReferenceSequence ], - [ sh:class sphn:SubjectPseudoIdentifier ; - sh:minCount 0 ; - sh:path sphn:hasSubjectPseudoIdentifier ], + sh:path sphn:hasSoftware ], [ sh:maxCount 1 ; sh:minCount 1 ; - sh:or ( [ sh:class sphn:TimeSeriesDataFile ] [ sh:class sphn:DataFile ] ) ; + sh:or ( [ sh:class sphn:DataFile ] [ sh:class sphn:TimeSeriesDataFile ] ) ; sh:path sphn:hasInput ], - [ sh:class sphn:AdministrativeCase ; - sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], - [ sh:datatype xsd:dateTime ; + [ sh:class sphn:ReferenceSequence ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasStartDateTime ], - [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], + sh:path sphn:hasReferenceSequence ], [ sh:class sphn:StandardOperatingProcedure ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasStandardOperatingProcedure ], - [ sh:class sphn:Software ; + [ sh:maxCount 1 ; + sh:minCount 1 ; + sh:or ( [ sh:class sphn:Terminology ] [ sh:class edam:operation_2945 ] [ sh:class sphn:Code ] ) ; + sh:path sphn:hasCode ], + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasSoftware ] ; + sh:path sphn:hasStartDateTime ], + [ sh:class sphn:AdministrativeCase ; + sh:minCount 0 ; + sh:path sphn:hasAdministrativeCase ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], + [ sh:class sphn:SubjectPseudoIdentifier ; + sh:minCount 0 ; + sh:path sphn:hasSubjectPseudoIdentifier ] ; sh:targetClass sphn:SequencingAnalysis . constraints:sphnSequencingAnalysis_Warning_Codes a sh:NodeShape ; @@ -8928,78 +8928,78 @@ constraints:sphnSequencingAnalysis_Warning_Naming a sh:NodeShape ; constraints:sphnSequencingAssay a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; + sh:property [ sh:maxCount 1 ; + sh:minCount 1 ; + sh:or ( [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] [ sh:class obi:0000070 ] [ sh:class efo:0001455 ] ) ; + sh:path sphn:hasCode ], + [ sh:class sphn:StandardOperatingProcedure ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasIdentifier ], + sh:path sphn:hasStandardOperatingProcedure ], [ sh:class sphn:SequencingRun ; sh:minCount 0 ; sh:path sphn:hasSequencingRun ], - [ sh:class sphn:SequencingInstrument ; + [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasSequencingInstrument ], - [ sh:minCount 0 ; - sh:or ( [ sh:class sphn:SampleProcessing ] [ sh:class sphn:LibraryPreparation ] ) ; - sh:path sphn:hasPredecessor ], - [ sh:class sphn:StandardOperatingProcedure ; + sh:path sphn:hasIdentifier ], + [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasStandardOperatingProcedure ], + sh:path sphn:hasIntendedReadLength ], + [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ], [ sh:class sphn:Sample ; sh:minCount 0 ; sh:path sphn:hasSample ], + [ sh:class sphn:LibraryPreparation ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasLibraryPreparation ], + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasStartDateTime ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:minCount 0 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:Quantity ; - sh:maxCount 1 ; + [ sh:minCount 0 ; + sh:or ( [ sh:class sphn:SampleProcessing ] [ sh:class sphn:LibraryPreparation ] ) ; + sh:path sphn:hasPredecessor ], + [ sh:class sphn:AdministrativeCase ; sh:minCount 0 ; - sh:path sphn:hasIntendedReadDepth ], + sh:path sphn:hasAdministrativeCase ], [ sh:class sphn:DataFile ; sh:minCount 0 ; sh:path sphn:hasDataFile ], - [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:maxCount 1 ; - sh:minCount 1 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class efo:0001455 ] [ sh:class obi:0000070 ] [ sh:class sphn:Terminology ] ) ; - sh:path sphn:hasCode ], - [ sh:class sphn:Quantity ; + [ sh:class sphn:SequencingInstrument ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasIntendedReadLength ], - [ sh:class sphn:AdministrativeCase ; - sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], - [ sh:class sphn:LibraryPreparation ; + sh:path sphn:hasSequencingInstrument ], + [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasLibraryPreparation ], + sh:path sphn:hasIntendedReadDepth ], [ sh:class sphn:SourceSystem ; sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:datatype xsd:dateTime ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasStartDateTime ] ; + sh:path sphn:hasSourceSystem ] ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "For sphn:hasDataFile, instances of sphn:TimeSeriesDataFile are not allowed" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasDataFile> as ?path) (?class as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasDataFile>/rdf:type ?class. - FILTER(?class IN (<https://biomedit.ch/rdf/sphn-schema/sphn#TimeSeriesDataFile>)) - }""" ], - [ a sh:SPARQLConstraint ; sh:message "For sphn:hasSample, instances of sphn:TumorSpecimen, sphn:Isolate are not allowed" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasSample> as ?path) (?class as ?value) WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasSample>/rdf:type ?class. FILTER(?class IN (<https://biomedit.ch/rdf/sphn-schema/sphn#TumorSpecimen>, <https://biomedit.ch/rdf/sphn-schema/sphn#Isolate>)) + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "For sphn:hasDataFile, instances of sphn:TimeSeriesDataFile are not allowed" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasDataFile> as ?path) (?class as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasDataFile>/rdf:type ?class. + FILTER(?class IN (<https://biomedit.ch/rdf/sphn-schema/sphn#TimeSeriesDataFile>)) }""" ] ; sh:targetClass sphn:SequencingAssay . @@ -9062,14 +9062,14 @@ constraints:sphnSequencingAssay_Warning_Naming a sh:NodeShape ; constraints:sphnSequencingInstrument a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:maxCount 1 ; - sh:minCount 1 ; - sh:or ( [ sh:class obi:0400103 ] [ sh:class sphn:Code ] [ sh:class sphn:Terminology ] [ sh:class efo:0003739 ] ) ; - sh:path sphn:hasCode ], - [ sh:class sphn:DataProvider ; + sh:property [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ] ; + sh:path sphn:hasDataProvider ], + [ sh:maxCount 1 ; + sh:minCount 1 ; + sh:or ( [ sh:class sphn:Terminology ] [ sh:class efo:0003739 ] [ sh:class obi:0400103 ] [ sh:class sphn:Code ] ) ; + sh:path sphn:hasCode ] ; sh:targetClass sphn:SequencingInstrument . constraints:sphnSequencingInstrument_Warning_Codes a sh:NodeShape ; @@ -9135,10 +9135,6 @@ constraints:sphnSequencingRun a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDataProvider ], - [ sh:class sphn:Quantity ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasAverageReadLength ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; @@ -9146,14 +9142,11 @@ constraints:sphnSequencingRun a sh:NodeShape ; [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasMeanReadDepth ], + sh:path sphn:hasAverageInsertSize ], [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasIdentifier ], - [ sh:class sphn:QualityControlMetric ; - sh:minCount 1 ; - sh:path sphn:hasQualityControlMetric ], [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; @@ -9161,10 +9154,17 @@ constraints:sphnSequencingRun a sh:NodeShape ; [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasAverageInsertSize ], + sh:path sphn:hasMeanReadDepth ], [ sh:class sphn:DataFile ; sh:minCount 1 ; - sh:path sphn:hasDataFile ] ; + sh:path sphn:hasDataFile ], + [ sh:class sphn:QualityControlMetric ; + sh:minCount 1 ; + sh:path sphn:hasQualityControlMetric ], + [ sh:class sphn:Quantity ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasAverageReadLength ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "For sphn:hasDataFile, instances of sphn:TimeSeriesDataFile are not allowed" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> @@ -9191,7 +9191,11 @@ constraints:sphnSequencingRun_Warning_Naming a sh:NodeShape ; constraints:sphnSingleNucleotideVariation a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; + sh:property [ sh:class sphn:ChromosomalLocation ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasChromosomalLocation ], + [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasAlternateAllele ], @@ -9199,10 +9203,6 @@ constraints:sphnSingleNucleotideVariation a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasReferenceAllele ], - [ sh:class sphn:ChromosomalLocation ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasChromosomalLocation ], [ sh:class sphn:GenomicPosition ; sh:maxCount 1 ; sh:minCount 0 ; @@ -9225,14 +9225,10 @@ constraints:sphnSingleNucleotideVariation_Warning_Naming a sh:NodeShape ; constraints:sphnSoftware a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:DataProvider ; + sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:datatype xsd:string ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasDescription ], + sh:path sphn:hasVersion ], [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 0 ; @@ -9240,11 +9236,15 @@ constraints:sphnSoftware a sh:NodeShape ; [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasVersion ], - [ sh:datatype xsd:string ; + sh:path sphn:hasName ], + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasName ] ; + sh:path sphn:hasDataProvider ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasDescription ] ; sh:targetClass sphn:Software . constraints:sphnSoftware_Warning_Naming a sh:NodeShape ; @@ -9266,14 +9266,14 @@ constraints:sphnSourceData a sh:NodeShape ; sh:property [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:or ( [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] ) ; + sh:path sphn:hasCode ], [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasStringValue ], - [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class sphn:Terminology ] ) ; - sh:path sphn:hasCode ] ; + sh:path sphn:hasStringValue ] ; sh:targetClass sphn:SourceData . constraints:sphnSourceData_Warning_Codes a sh:NodeShape ; @@ -9335,26 +9335,26 @@ constraints:sphnSourceData_Warning_Naming a sh:NodeShape ; constraints:sphnSourceSystem a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:SourceSystem_category ; + sh:property [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasName ], + [ sh:class sphn:SourceSystem_purpose ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasCategory ], + sh:path sphn:hasPurpose ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDataProvider ], - [ sh:datatype xsd:string ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasName ], [ sh:class sphn:HealthcarePrimaryInformationSystem ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasPrimarySystem ], - [ sh:class sphn:SourceSystem_purpose ; + [ sh:class sphn:SourceSystem_category ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasPurpose ] ; + sh:path sphn:hasCategory ] ; sh:targetClass sphn:SourceSystem . constraints:sphnSourceSystem_Warning_Naming a sh:NodeShape ; @@ -9373,14 +9373,14 @@ constraints:sphnSourceSystem_Warning_Naming a sh:NodeShape ; constraints:sphnSourceSystem_category a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type rdfs:label ) ; - sh:property [ sh:in ( sphn-individual:HealthcareInformationSystem sphn-individual:OMICSFacility sphn-individual:ResearchLaboratory sphn-individual:CaseReportForm sphn-individual:ClinicalDataPlatform sphn-individual:Cohort sphn-individual:Biobank sphn-individual:ClinicalRegistry sphn-individual:DataRepository ) ; + sh:property [ sh:in ( sphn-individual:CaseReportForm sphn-individual:ClinicalDataPlatform sphn-individual:OMICSFacility sphn-individual:ResearchLaboratory sphn-individual:DataRepository sphn-individual:ClinicalRegistry sphn-individual:Biobank sphn-individual:Cohort sphn-individual:HealthcareInformationSystem ) ; sh:path [ sh:inversePath rdf:type ] ] ; sh:targetClass sphn:SourceSystem_category . constraints:sphnSourceSystem_purpose a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type rdfs:label ) ; - sh:property [ sh:in ( sphn-individual:PatientCare sphn-individual:Billing sphn-individual:QualityControl sphn-individual:Research ) ; + sh:property [ sh:in ( sphn-individual:Billing sphn-individual:QualityControl sphn-individual:PatientCare sphn-individual:Research ) ; sh:path [ sh:inversePath rdf:type ] ] ; sh:targetClass sphn:SourceSystem_purpose . @@ -9395,14 +9395,14 @@ constraints:sphnStandardOperatingProcedure a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDataProvider ], - [ sh:datatype xsd:string ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasName ], [ sh:class sphn:DataFile ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasDataFile ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasName ], [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; @@ -9435,14 +9435,14 @@ constraints:sphnSubjectPseudoIdentifier a sh:NodeShape ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:anyURI ; sh:path sphn:hasSharedIdentifier ], - [ sh:datatype xsd:string ; + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasIdentifier ], - [ sh:class sphn:DataProvider ; + sh:path sphn:hasDataProvider ], + [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ] ; + sh:path sphn:hasIdentifier ] ; sh:targetClass sphn:SubjectPseudoIdentifier . constraints:sphnSubjectPseudoIdentifier_Warning_Naming a sh:NodeShape ; @@ -9461,9 +9461,12 @@ constraints:sphnSubjectPseudoIdentifier_Warning_Naming a sh:NodeShape ; constraints:sphnSubstance a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:maxCount 1 ; + sh:property [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], + [ sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class snomed:105590001 ] [ sh:class sphn:Terminology ] ) ; + sh:or ( [ sh:class snomed:105590001 ] [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] ) ; sh:path sphn:hasCode ], [ sh:datatype xsd:string ; sh:maxCount 1 ; @@ -9472,10 +9475,7 @@ constraints:sphnSubstance a sh:NodeShape ; [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasQuantity ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ] ; + sh:path sphn:hasQuantity ] ; sh:targetClass sphn:Substance . constraints:sphnSubstance_Warning_Codes a sh:NodeShape ; @@ -9537,14 +9537,14 @@ constraints:sphnSubstance_Warning_Naming a sh:NodeShape ; constraints:sphnSwissSocioEconomicPosition a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( sphn:hasDistance rdf:type ) ; - sh:property [ sh:class ucum:m ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path ( sphn:hasDistance sphn:hasUnit sphn:hasCode ) ], - [ sh:maxCount 1 ; + sh:property [ sh:maxCount 1 ; sh:minCount 0 ; sh:or ( [ sh:datatype xsd:double ] [ sh:datatype xsd:string ] ) ; sh:path sphn:hasValue ], + [ sh:class ucum:m ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path ( sphn:hasDistance sphn:hasUnit sphn:hasCode ) ], [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; @@ -9596,7 +9596,7 @@ constraints:sphnTherapeuticArea_Warning_Naming a sh:NodeShape ; constraints:sphnTherapeuticArea_specialtyName a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type rdfs:label ) ; - sh:property [ sh:in ( sphn-individual:RadioOncologyAndRadiotherapy sphn-individual:Radiology sphn-individual:Neuropsychology sphn-individual:DermatologyAndVenereology sphn-individual:Cardiology sphn-individual:GeriatricMedicine sphn-individual:Otorhinolaryngology sphn-individual:Other sphn-individual:PreventionAndPublicHealth sphn-individual:Neurosurgery sphn-individual:Surgery sphn-individual:GynaecologyAndObstetrics sphn-individual:Angiology sphn-individual:PharmaceuticalMedicine sphn-individual:OralSurgery sphn-individual:VascularSurgery sphn-individual:HealthPsychology sphn-individual:ClinicalPharmacologyAndToxicology sphn-individual:HandSurgery sphn-individual:Psychotherapy sphn-individual:GeneralMedicine sphn-individual:CommunityPharmacy sphn-individual:OrthopaedicSurgeryAndTraumatologyOfTheLocomotorApparatus sphn-individual:TropicalAndTravelMedicine sphn-individual:OralAndMaxillofacialSurgery sphn-individual:Paediatrics sphn-individual:ChildAndAdolescentPsychology sphn-individual:ReconstructiveDentistry sphn-individual:Periodontics sphn-individual:Rheumatology sphn-individual:ForensicMedicine sphn-individual:ThoracicSurgery sphn-individual:PhysicalMedicineAndRehabilitation sphn-individual:Pathology sphn-individual:HospitalPharmacy sphn-individual:IntensiveCareMedicine sphn-individual:Haematology sphn-individual:PsychiatryAndPsychotherapy sphn-individual:AllergologyAndClinicalImmunology sphn-individual:NuclearMedicine sphn-individual:Neurology sphn-individual:Ophthalmology sphn-individual:Orthodontics sphn-individual:OccupationalMedicine sphn-individual:CardiacAndThoracicVascularSurgery sphn-individual:Anaesthesiology sphn-individual:PlasticReconstructiveAndAestheticSurgery sphn-individual:Nephrology sphn-individual:MedicalOncology sphn-individual:Urology sphn-individual:Infectology sphn-individual:MedicalGenetics sphn-individual:GeneralMedicalPractitioner sphn-individual:GeneralInternalMedicine sphn-individual:AddictionMedicine sphn-individual:Gastroenterology sphn-individual:ChildAndAdolescentPsychiatryAndPsychotherapy sphn-individual:EndocrinologyAndDiabetology sphn-individual:PaediatricSurgery sphn-individual:InternalMedicine sphn-individual:ClinicalPsychology sphn-individual:VisceralMedicine sphn-individual:Pneumology sphn-individual:ChiropracticSpecialist ) ; + sh:property [ sh:in ( sphn-individual:Otorhinolaryngology sphn-individual:ClinicalPsychology sphn-individual:VisceralMedicine sphn-individual:OccupationalMedicine sphn-individual:HandSurgery sphn-individual:VascularSurgery sphn-individual:NuclearMedicine sphn-individual:EndocrinologyAndDiabetology sphn-individual:PlasticReconstructiveAndAestheticSurgery sphn-individual:OrthopaedicSurgeryAndTraumatologyOfTheLocomotorApparatus sphn-individual:Neuropsychology sphn-individual:GynaecologyAndObstetrics sphn-individual:RadioOncologyAndRadiotherapy sphn-individual:MedicalGenetics sphn-individual:Neurology sphn-individual:OralSurgery sphn-individual:Infectology sphn-individual:Paediatrics sphn-individual:IntensiveCareMedicine sphn-individual:ChiropracticSpecialist sphn-individual:Angiology sphn-individual:ReconstructiveDentistry sphn-individual:Periodontics sphn-individual:InternalMedicine sphn-individual:Gastroenterology sphn-individual:ClinicalPharmacologyAndToxicology sphn-individual:Cardiology sphn-individual:GeneralMedicine sphn-individual:AllergologyAndClinicalImmunology sphn-individual:ChildAndAdolescentPsychiatryAndPsychotherapy sphn-individual:AddictionMedicine sphn-individual:Nephrology sphn-individual:ThoracicSurgery sphn-individual:Pneumology sphn-individual:ForensicMedicine sphn-individual:CommunityPharmacy sphn-individual:PsychiatryAndPsychotherapy sphn-individual:HealthPsychology sphn-individual:OralAndMaxillofacialSurgery sphn-individual:GeneralMedicalPractitioner sphn-individual:Other sphn-individual:Neurosurgery sphn-individual:Haematology sphn-individual:GeneralInternalMedicine sphn-individual:Orthodontics sphn-individual:Urology sphn-individual:HospitalPharmacy sphn-individual:PharmaceuticalMedicine sphn-individual:Ophthalmology sphn-individual:CardiacAndThoracicVascularSurgery sphn-individual:PaediatricSurgery sphn-individual:Pathology sphn-individual:Psychotherapy sphn-individual:Surgery sphn-individual:TropicalAndTravelMedicine sphn-individual:PhysicalMedicineAndRehabilitation sphn-individual:DermatologyAndVenereology sphn-individual:PreventionAndPublicHealth sphn-individual:MedicalOncology sphn-individual:ChildAndAdolescentPsychology sphn-individual:Radiology sphn-individual:Anaesthesiology sphn-individual:GeriatricMedicine sphn-individual:Rheumatology ) ; sh:path [ sh:inversePath rdf:type ] ] ; sh:targetClass sphn:TherapeuticArea_specialtyName . @@ -9605,14 +9605,14 @@ constraints:sphnTimePattern a sh:NodeShape ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:maxCount 1 ; sh:minCount 1 ; - sh:or ( [ sh:class snomed:385432009 ] [ sh:class snomed:255238004 ] [ sh:class snomed:7087005 ] ) ; + sh:or ( [ sh:class snomed:7087005 ] [ sh:class snomed:255238004 ] [ sh:class snomed:385432009 ] ) ; sh:path sphn:hasTypeCode ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> as ?path) (?class as ?value) WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/385432009>, <http://snomed.info/id/255238004>, <http://snomed.info/id/7087005> )) . + FILTER( ?values IN ( <http://snomed.info/id/7087005>, <http://snomed.info/id/255238004>, <http://snomed.info/id/385432009> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ] ; @@ -9621,6 +9621,14 @@ constraints:sphnTimePattern a sh:NodeShape ; constraints:sphnTimePattern_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-TimePattern-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -9628,63 +9636,55 @@ constraints:sphnTimePattern_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-TimePattern-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:TimePattern . constraints:sphnTimeSeriesDataFile a sh:NodeShape ; sh:closed false ; - sh:ignoredProperties ( sphn:hasEntryCount rdf:type ) ; - sh:property [ sh:class sphn:DataFile_encoding ; + sh:ignoredProperties ( rdf:type sphn:hasEntryCount ) ; + sh:property [ sh:class sphn:Hash ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasEncoding ], + sh:minCount 0 ; + sh:path sphn:hasHash ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasUniformResourceIdentifier ], [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasUniformResourceIdentifier ], + sh:path sphn:hasName ], [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasEntryCount ], - [ sh:class ucum:cblnbcbr ; + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:path ( sphn:hasEntryCount sphn:hasUnit sphn:hasCode ) ], - [ sh:class sphn:SubjectPseudoIdentifier ; + sh:minCount 0 ; + sh:path sphn:hasCreationDateTime ], + [ sh:class sphn:DataFile_encoding ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], + sh:path sphn:hasEncoding ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDataProvider ], - [ sh:class edam:format_1915 ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasFormatCode ], [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], - [ sh:datatype xsd:string ; + [ sh:class edam:format_1915 ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasName ], - [ sh:class sphn:Hash ; + sh:path sphn:hasFormatCode ], + [ sh:class ucum:cblnbcbr ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasHash ], - [ sh:datatype xsd:dateTime ; + sh:minCount 1 ; + sh:path ( sphn:hasEntryCount sphn:hasUnit sphn:hasCode ) ], + [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasCreationDateTime ] ; + sh:minCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ] ; sh:targetClass sphn:TimeSeriesDataFile . constraints:sphnTimeSeriesDataFile_Warning_Naming a sh:NodeShape ; @@ -9702,65 +9702,65 @@ constraints:sphnTimeSeriesDataFile_Warning_Naming a sh:NodeShape ; constraints:sphnTobaccoExposure a sh:NodeShape ; sh:closed false ; - sh:ignoredProperties ( sphn:hasQuantity sphn:hasDuration rdf:type ) ; - sh:property [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:class sphn:Quantity ; + sh:ignoredProperties ( sphn:hasQuantity rdf:type sphn:hasDuration ) ; + sh:property [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasDuration ], - [ sh:datatype xsd:dateTime ; + sh:path sphn:hasRecordDateTime ], + [ sh:class snomed:138875005 ; + sh:minCount 0 ; + sh:path sphn:hasRouteCode ], + [ sh:class snomed:39953003 ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasStartDateTime ], - [ sh:datatype xsd:dateTime ; + sh:path sphn:hasAgentCode ], + [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasEndDateTime ], + sh:path sphn:hasQuantity ], + [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasRecordDateTime ], - [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:or ( [ sh:class snomed:1255665007 ] [ sh:class snomed:75540009 ] [ sh:class snomed:62482003 ] ) ; - sh:path sphn:hasDegreeCode ], - [ sh:class sphn:AdministrativeCase ; + sh:path sphn:hasStartDateTime ], + [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], + sh:path sphn:hasDuration ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class snomed:138875005 ; - sh:minCount 0 ; - sh:path sphn:hasRouteCode ], - [ sh:class snomed:39953003 ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasAgentCode ], - [ sh:class sphn:Quantity ; + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasQuantity ], + sh:path sphn:hasEndDateTime ], [ sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class snomed:722499006 ] [ sh:class snomed:228493008 ] [ sh:class snomed:35361000087100 ] [ sh:class snomed:43381005 ] [ sh:class snomed:77176002 ] [ sh:class snomed:228494002 ] [ sh:class snomed:702979003 ] [ sh:class snomed:228513009 ] [ sh:class snomed:81703003 ] [ sh:class snomed:8517006 ] ) ; + sh:or ( [ sh:class snomed:722499006 ] [ sh:class snomed:228513009 ] [ sh:class snomed:35361000087100 ] [ sh:class snomed:8517006 ] [ sh:class snomed:43381005 ] [ sh:class snomed:81703003 ] [ sh:class snomed:702979003 ] [ sh:class snomed:77176002 ] [ sh:class snomed:228494002 ] [ sh:class snomed:228493008 ] ) ; sh:path sphn:hasTypeCode ], - [ sh:class sphn:DataProvider ; + [ sh:class ucum:a ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], + sh:minCount 0 ; + sh:path ( sphn:hasQuantity sphn:hasUnit sphn:hasCode ) ], [ sh:class ucum:a ; sh:maxCount 1 ; sh:minCount 0 ; sh:path ( sphn:hasDuration sphn:hasUnit sphn:hasCode ) ], - [ sh:class ucum:a ; + [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path ( sphn:hasQuantity sphn:hasUnit sphn:hasCode ) ] ; + sh:path sphn:hasAdministrativeCase ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], + [ sh:maxCount 1 ; + sh:minCount 0 ; + sh:or ( [ sh:class snomed:1255665007 ] [ sh:class snomed:62482003 ] [ sh:class snomed:75540009 ] ) ; + sh:path sphn:hasDegreeCode ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) @@ -9771,19 +9771,19 @@ constraints:sphnTobaccoExposure a sh:NodeShape ; }""" ], [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; - sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasDegreeCode> as ?path) (?class as ?value) + sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> as ?path) (?class as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasDegreeCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/1255665007>, <http://snomed.info/id/75540009>, <http://snomed.info/id/62482003> )) . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . + FILTER( ?values IN ( <http://snomed.info/id/722499006>, <http://snomed.info/id/228513009>, <http://snomed.info/id/35361000087100>, <http://snomed.info/id/8517006>, <http://snomed.info/id/43381005>, <http://snomed.info/id/81703003>, <http://snomed.info/id/702979003>, <http://snomed.info/id/77176002>, <http://snomed.info/id/228494002>, <http://snomed.info/id/228493008> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ], [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; - sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> as ?path) (?class as ?value) + sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasDegreeCode> as ?path) (?class as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/722499006>, <http://snomed.info/id/228493008>, <http://snomed.info/id/35361000087100>, <http://snomed.info/id/43381005>, <http://snomed.info/id/77176002>, <http://snomed.info/id/228494002>, <http://snomed.info/id/702979003>, <http://snomed.info/id/228513009>, <http://snomed.info/id/81703003>, <http://snomed.info/id/8517006> )) . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasDegreeCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . + FILTER( ?values IN ( <http://snomed.info/id/1255665007>, <http://snomed.info/id/62482003>, <http://snomed.info/id/75540009> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ] ; @@ -9792,12 +9792,13 @@ constraints:sphnTobaccoExposure a sh:NodeShape ; constraints:sphnTobaccoExposure_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-TobaccoExposure-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasDegreeCode> as ?path) (?code as ?value) + PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> + SELECT ?this (?class as ?path) (?this as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasDegreeCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) + ?this rdf:type ?class . + FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-TobaccoExposure-.*$")) }""" ], [ a sh:SPARQLConstraint ; sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; @@ -9824,27 +9825,26 @@ constraints:sphnTobaccoExposure_Warning_Naming a sh:NodeShape ; FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ], [ a sh:SPARQLConstraint ; - sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-TobaccoExposure-.*$'" ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> - SELECT ?this (?class as ?path) (?this as ?value) + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasDegreeCode> as ?path) (?code as ?value) WHERE { - ?this rdf:type ?class . - FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-TobaccoExposure-.*$")) + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasDegreeCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:TobaccoExposure . constraints:sphnTranscript a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:Organism ; + sh:property [ sh:maxCount 1 ; + sh:minCount 1 ; + sh:or ( [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] ) ; + sh:path sphn:hasCode ], + [ sh:class sphn:Organism ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasOrganism ], - [ sh:maxCount 1 ; - sh:minCount 1 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class sphn:Terminology ] ) ; - sh:path sphn:hasCode ], [ sh:class sphn:Protein ; sh:maxCount 1 ; sh:minCount 0 ; @@ -9912,7 +9912,7 @@ constraints:sphnTransplant a sh:NodeShape ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:maxCount 1 ; sh:minCount 1 ; - sh:or ( [ sh:class snomed:260667007 ] [ sh:class snomed:414265000 ] ) ; + sh:or ( [ sh:class snomed:414265000 ] [ sh:class snomed:260667007 ] ) ; sh:path sphn:hasCode ], [ sh:maxCount 1 ; sh:minCount 0 ; @@ -9932,41 +9932,41 @@ constraints:sphnTransplant a sh:NodeShape ; constraints:sphnTransplantPresence a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:DataProvider ; + sh:property [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], + sh:path sphn:hasSubjectPseudoIdentifier ], + [ sh:class sphn:BodySite ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasBodySite ], [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasAdministrativeCase ], - [ sh:class sphn:Transplant ; + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasStartDateTime ], + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasTransplant ], + sh:path sphn:hasDataProvider ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasEndDateTime ], - [ sh:datatype xsd:dateTime ; + [ sh:class sphn:Transplant ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasStartDateTime ], + sh:minCount 1 ; + sh:path sphn:hasTransplant ], [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasRecordDateTime ], - [ sh:class sphn:BodySite ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasBodySite ], - [ sh:class sphn:SubjectPseudoIdentifier ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ] ; + sh:path sphn:hasRecordDateTime ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "Invalid time frame between sphn:hasStartDateTime and sphn:hasEndDateTime" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasStartDateTime> as ?path) (?hasStartDateTime as ?value) @@ -9993,14 +9993,6 @@ constraints:sphnTransplantPresence_Warning_Naming a sh:NodeShape ; constraints:sphnTransplant_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Transplant-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -10016,42 +10008,50 @@ constraints:sphnTransplant_Warning_Naming a sh:NodeShape ; WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasGraftTypeCode> ?code . FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:Transplant . constraints:sphnTumorGradeAssessment a sh:NodeShape ; sh:closed false ; - sh:ignoredProperties ( rdf:type sphn:hasResult ) ; - sh:property [ sh:class sphn:DataProvider ; + sh:ignoredProperties ( sphn:hasResult rdf:type ) ; + sh:property [ sh:class snomed:138875005 ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:class sphn:SubjectPseudoIdentifier ; + sh:minCount 0 ; + sh:path ( sphn:hasResult sphn:hasCode ) ], + [ sh:class snomed:277457005 ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], + sh:minCount 0 ; + sh:path sphn:hasCode ], [ sh:class sphn:TumorGradeAssessmentResult ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasResult ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:class snomed:277457005 ; + [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasCode ], + sh:minCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ], [ sh:class sphn:AssessmentComponent ; sh:minCount 0 ; sh:path sphn:hasComponent ], - [ sh:class snomed:138875005 ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path ( sphn:hasResult sphn:hasCode ) ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasAdministrativeCase ], + [ sh:class sphn:DataProvider ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ], [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 0 ; @@ -10061,10 +10061,14 @@ constraints:sphnTumorGradeAssessment a sh:NodeShape ; constraints:sphnTumorGradeAssessmentEvent a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:Performer ; + sh:property [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasDateTime ], + [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasPerformer ], + sh:path sphn:hasAdministrativeCase ], [ sh:class sphn:TumorGradeAssessment ; sh:maxCount 1 ; sh:minCount 1 ; @@ -10073,21 +10077,17 @@ constraints:sphnTumorGradeAssessmentEvent a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDataProvider ], - [ sh:class sphn:SubjectPseudoIdentifier ; - sh:maxCount 1 ; + [ sh:class sphn:SourceSystem ; sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:AdministrativeCase ; + sh:path sphn:hasSourceSystem ], + [ sh:class sphn:Performer ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], - [ sh:datatype xsd:dateTime ; + sh:path sphn:hasPerformer ], + [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDateTime ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ] ; + sh:path sphn:hasSubjectPseudoIdentifier ] ; sh:targetClass sphn:TumorGradeAssessmentEvent . constraints:sphnTumorGradeAssessmentEvent_Warning_Naming a sh:NodeShape ; @@ -10106,31 +10106,23 @@ constraints:sphnTumorGradeAssessmentEvent_Warning_Naming a sh:NodeShape ; constraints:sphnTumorGradeAssessmentResult a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class snomed:138875005 ; + sh:property [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasCode ], - [ sh:class sphn:Quantity ; + sh:path sphn:hasStringValue ], + [ sh:class snomed:138875005 ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasQuantity ], - [ sh:datatype xsd:string ; + sh:path sphn:hasCode ], + [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasStringValue ] ; + sh:path sphn:hasQuantity ] ; sh:targetClass sphn:TumorGradeAssessmentResult . -constraints:sphnTumorGradeAssessmentResult_Warning_Naming a sh:NodeShape ; - sh:severity sh:Warning ; - sh:sparql [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; +constraints:sphnTumorGradeAssessmentResult_Warning_Naming a sh:NodeShape ; + sh:severity sh:Warning ; + sh:sparql [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-TumorGradeAssessmentResult-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -10138,6 +10130,14 @@ constraints:sphnTumorGradeAssessmentResult_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-TumorGradeAssessmentResult-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:TumorGradeAssessmentResult . @@ -10146,17 +10146,17 @@ constraints:sphnTumorGradeAssessment_Warning_Naming a sh:NodeShape ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this ("<https://biomedit.ch/rdf/sphn-schema/sphn#hasResult>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode>" as ?path) (?code as ?value) + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasResult>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ], [ a sh:SPARQLConstraint ; sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) + SELECT ?this ("<https://biomedit.ch/rdf/sphn-schema/sphn#hasResult>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode>" as ?path) (?code as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasResult>/<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ], [ a sh:SPARQLConstraint ; @@ -10172,15 +10172,22 @@ constraints:sphnTumorGradeAssessment_Warning_Naming a sh:NodeShape ; constraints:sphnTumorSpecimen a sh:NodeShape ; sh:closed false ; - sh:ignoredProperties ( sphn:hasTumorPurity rdf:type ) ; - sh:property [ sh:datatype xsd:dateTime ; + sh:ignoredProperties ( rdf:type sphn:hasTumorPurity ) ; + sh:property [ sh:class sphn:Sample_primaryContainer ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasCollectionDateTime ], + sh:minCount 0 ; + sh:path sphn:hasPrimaryContainer ], [ sh:class sphn:BodySite ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasBodySite ], + [ sh:class sphn:AdministrativeCase ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasAdministrativeCase ], + [ sh:class sphn:SourceSystem ; + sh:minCount 1 ; + sh:path sphn:hasSourceSystem ], [ sh:class snomed:123038009 ; sh:minCount 0 ; sh:path sphn:hasMaterialTypeCode ], @@ -10188,9 +10195,12 @@ constraints:sphnTumorSpecimen a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasFixationType ], - [ sh:datatype xsd:string ; - sh:minCount 0 ; - sh:path sphn:hasIdentifier ], + [ sh:datatype xsd:anyURI ; + sh:path sphn:hasSharedIdentifier ], + [ sh:datatype xsd:dateTime ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasCollectionDateTime ], [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; @@ -10199,27 +10209,17 @@ constraints:sphnTumorSpecimen a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:datatype xsd:anyURI ; - sh:path sphn:hasSharedIdentifier ], [ sh:class ucum:percent ; sh:maxCount 1 ; sh:minCount 0 ; sh:path ( sphn:hasTumorPurity sphn:hasUnit sphn:hasCode ) ], - [ sh:class sphn:Sample_primaryContainer ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasPrimaryContainer ], [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasDataProvider ], - [ sh:class sphn:AdministrativeCase ; - sh:maxCount 1 ; + [ sh:datatype xsd:string ; sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ] ; + sh:path sphn:hasIdentifier ] ; sh:targetClass sphn:TumorSpecimen . constraints:sphnTumorSpecimen_Warning_Naming a sh:NodeShape ; @@ -10245,73 +10245,73 @@ constraints:sphnTumorSpecimen_Warning_Naming a sh:NodeShape ; constraints:sphnTumorStageAssessment a sh:NodeShape ; sh:closed false ; - sh:ignoredProperties ( rdf:type sphn:hasResult ) ; + sh:ignoredProperties ( sphn:hasResult rdf:type ) ; sh:property [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:AdministrativeCase ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], - [ sh:class sphn:TumorStageAssessmentResult ; + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasResult ], + sh:minCount 1 ; + sh:path sphn:hasDataProvider ], [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasName ], + [ sh:class sphn:AssessmentComponent ; + sh:minCount 0 ; + sh:path sphn:hasComponent ], [ sh:class sphn:SourceSystem ; sh:minCount 1 ; sh:path sphn:hasSourceSystem ], - [ sh:class sphn:DataProvider ; + [ sh:class snomed:138875005 ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:class sphn:AssessmentComponent ; sh:minCount 0 ; - sh:path sphn:hasComponent ], - [ sh:class snomed:254292007 ; + sh:path ( sphn:hasResult sphn:hasCode ) ], + [ sh:class sphn:TumorStageAssessmentResult ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasCode ], - [ sh:class snomed:138875005 ; + sh:path sphn:hasResult ], + [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path ( sphn:hasResult sphn:hasCode ) ] ; + sh:path sphn:hasAdministrativeCase ], + [ sh:class snomed:254292007 ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasCode ] ; sh:targetClass sphn:TumorStageAssessment . constraints:sphnTumorStageAssessmentEvent a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:AdministrativeCase ; + sh:property [ sh:class sphn:TumorStageAssessment ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:path sphn:hasAssessment ], + [ sh:class sphn:AdministrativeCase ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasAdministrativeCase ], - [ sh:datatype xsd:dateTime ; + [ sh:class sphn:DataProvider ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDateTime ], + sh:path sphn:hasDataProvider ], [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; sh:path sphn:hasSubjectPseudoIdentifier ], - [ sh:class sphn:TumorStageAssessment ; + [ sh:datatype xsd:dateTime ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasAssessment ], - [ sh:class sphn:DataProvider ; - sh:maxCount 1 ; + sh:path sphn:hasDateTime ], + [ sh:class sphn:SourceSystem ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ], + sh:path sphn:hasSourceSystem ], [ sh:class sphn:Performer ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasPerformer ], - [ sh:class sphn:SourceSystem ; - sh:minCount 1 ; - sh:path sphn:hasSourceSystem ] ; + sh:path sphn:hasPerformer ] ; sh:targetClass sphn:TumorStageAssessmentEvent . constraints:sphnTumorStageAssessmentEvent_Warning_Naming a sh:NodeShape ; @@ -10334,27 +10334,19 @@ constraints:sphnTumorStageAssessmentResult a sh:NodeShape ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasStringValue ], - [ sh:class snomed:138875005 ; + [ sh:class sphn:Quantity ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasCode ], - [ sh:class sphn:Quantity ; + sh:path sphn:hasQuantity ], + [ sh:class snomed:138875005 ; sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasQuantity ] ; + sh:path sphn:hasCode ] ; sh:targetClass sphn:TumorStageAssessmentResult . constraints:sphnTumorStageAssessmentResult_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-TumorStageAssessmentResult-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -10362,6 +10354,14 @@ constraints:sphnTumorStageAssessmentResult_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-TumorStageAssessmentResult-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:TumorStageAssessmentResult . @@ -10419,46 +10419,46 @@ constraints:sphnUnit_Warning_Naming a sh:NodeShape ; constraints:sphnVariantDescriptor a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:VariantNotation ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasNotation ], - [ sh:class geno:0000877 ; - sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasAlleleOriginCode ], - [ sh:class sphn:DataProvider ; - sh:minCount 1 ; - sh:path sphn:hasDataProvider ], - [ sh:class so:0001059 ; - sh:maxCount 1 ; + sh:property [ sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasTypeCode ], - [ sh:class sphn:SubjectPseudoIdentifier ; - sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ], + sh:or ( [ sh:class sphn:SingleNucleotideVariation ] [ sh:class sphn:GeneticVariation ] [ sh:class sphn:GenomicInsertion ] [ sh:class sphn:CopyNumberVariation ] [ sh:class sphn:GenomicDeletion ] ) ; + sh:path sphn:hasGeneticVariation ], [ sh:class sphn:Gene ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasGene ], - [ sh:maxCount 1 ; - sh:minCount 0 ; - sh:or ( [ sh:class sphn:GenomicDeletion ] [ sh:class sphn:CopyNumberVariation ] [ sh:class sphn:GeneticVariation ] [ sh:class sphn:SingleNucleotideVariation ] [ sh:class sphn:GenomicInsertion ] ) ; - sh:path sphn:hasGeneticVariation ], [ sh:class geno:0000133 ; sh:maxCount 1 ; sh:minCount 0 ; sh:path sphn:hasZygosityCode ], [ sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class sphn:Code ] [ sh:class sphn:Terminology ] ) ; + sh:or ( [ sh:class sphn:Terminology ] [ sh:class sphn:Code ] ) ; sh:path sphn:hasCode ], - [ sh:class sphn:AdministrativeCase ; + [ sh:class so:0001059 ; + sh:maxCount 1 ; sh:minCount 0 ; - sh:path sphn:hasAdministrativeCase ], + sh:path sphn:hasTypeCode ], + [ sh:class sphn:DataProvider ; + sh:minCount 1 ; + sh:path sphn:hasDataProvider ], [ sh:class sphn:SourceSystem ; sh:minCount 1 ; - sh:path sphn:hasSourceSystem ] ; + sh:path sphn:hasSourceSystem ], + [ sh:class sphn:VariantNotation ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasNotation ], + [ sh:class sphn:SubjectPseudoIdentifier ; + sh:minCount 1 ; + sh:path sphn:hasSubjectPseudoIdentifier ], + [ sh:class sphn:AdministrativeCase ; + sh:minCount 0 ; + sh:path sphn:hasAdministrativeCase ], + [ sh:class geno:0000877 ; + sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasAlleleOriginCode ] ; sh:targetClass sphn:VariantDescriptor . constraints:sphnVariantDescriptor_Warning_Codes a sh:NodeShape ; @@ -10470,10 +10470,10 @@ constraints:sphnVariantDescriptor_Warning_Codes a sh:NodeShape ; PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX sphn-loinc: <https://biomedit.ch/rdf/sphn-resource/loinc/> PREFIX sphn-hgnc: <https://biomedit.ch/rdf/sphn-resource/hgnc/> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> as ?path) (?typeCode as ?value) + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasAlleleOriginCode> as ?path) (?typeCode as ?value) WHERE { { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> ?oldCode . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasAlleleOriginCode> ?oldCode . ?oldCode rdf:type ?typeCode . ?typeCode rdfs:subClassOf+ sphn-loinc:LOINC . ?typeCode rdfs:label ?label . @@ -10481,7 +10481,7 @@ constraints:sphnVariantDescriptor_Warning_Codes a sh:NodeShape ; } UNION { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> ?oldCode . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasAlleleOriginCode> ?oldCode . ?oldCode rdf:type ?typeCode . { SELECT ?typeCode @@ -10495,7 +10495,7 @@ constraints:sphnVariantDescriptor_Warning_Codes a sh:NodeShape ; } UNION { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> ?oldCode . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasAlleleOriginCode> ?oldCode . ?oldCode rdf:type ?typeCode . ?typeCode rdfs:subClassOf+ sphn-hgnc:HGNC . ?typeCode rdfs:comment ?comment . @@ -10509,10 +10509,10 @@ constraints:sphnVariantDescriptor_Warning_Codes a sh:NodeShape ; PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX sphn-loinc: <https://biomedit.ch/rdf/sphn-resource/loinc/> PREFIX sphn-hgnc: <https://biomedit.ch/rdf/sphn-resource/hgnc/> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?typeCode as ?value) + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasZygosityCode> as ?path) (?typeCode as ?value) WHERE { { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?oldCode . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasZygosityCode> ?oldCode . ?oldCode rdf:type ?typeCode . ?typeCode rdfs:subClassOf+ sphn-loinc:LOINC . ?typeCode rdfs:label ?label . @@ -10520,7 +10520,7 @@ constraints:sphnVariantDescriptor_Warning_Codes a sh:NodeShape ; } UNION { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?oldCode . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasZygosityCode> ?oldCode . ?oldCode rdf:type ?typeCode . { SELECT ?typeCode @@ -10534,7 +10534,7 @@ constraints:sphnVariantDescriptor_Warning_Codes a sh:NodeShape ; } UNION { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?oldCode . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasZygosityCode> ?oldCode . ?oldCode rdf:type ?typeCode . ?typeCode rdfs:subClassOf+ sphn-hgnc:HGNC . ?typeCode rdfs:comment ?comment . @@ -10548,10 +10548,10 @@ constraints:sphnVariantDescriptor_Warning_Codes a sh:NodeShape ; PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX sphn-loinc: <https://biomedit.ch/rdf/sphn-resource/loinc/> PREFIX sphn-hgnc: <https://biomedit.ch/rdf/sphn-resource/hgnc/> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasZygosityCode> as ?path) (?typeCode as ?value) + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> as ?path) (?typeCode as ?value) WHERE { { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasZygosityCode> ?oldCode . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> ?oldCode . ?oldCode rdf:type ?typeCode . ?typeCode rdfs:subClassOf+ sphn-loinc:LOINC . ?typeCode rdfs:label ?label . @@ -10559,7 +10559,7 @@ constraints:sphnVariantDescriptor_Warning_Codes a sh:NodeShape ; } UNION { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasZygosityCode> ?oldCode . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> ?oldCode . ?oldCode rdf:type ?typeCode . { SELECT ?typeCode @@ -10573,7 +10573,7 @@ constraints:sphnVariantDescriptor_Warning_Codes a sh:NodeShape ; } UNION { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasZygosityCode> ?oldCode . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> ?oldCode . ?oldCode rdf:type ?typeCode . ?typeCode rdfs:subClassOf+ sphn-hgnc:HGNC . ?typeCode rdfs:comment ?comment . @@ -10587,10 +10587,10 @@ constraints:sphnVariantDescriptor_Warning_Codes a sh:NodeShape ; PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX sphn-loinc: <https://biomedit.ch/rdf/sphn-resource/loinc/> PREFIX sphn-hgnc: <https://biomedit.ch/rdf/sphn-resource/hgnc/> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasAlleleOriginCode> as ?path) (?typeCode as ?value) + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?typeCode as ?value) WHERE { { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasAlleleOriginCode> ?oldCode . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?oldCode . ?oldCode rdf:type ?typeCode . ?typeCode rdfs:subClassOf+ sphn-loinc:LOINC . ?typeCode rdfs:label ?label . @@ -10598,7 +10598,7 @@ constraints:sphnVariantDescriptor_Warning_Codes a sh:NodeShape ; } UNION { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasAlleleOriginCode> ?oldCode . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?oldCode . ?oldCode rdf:type ?typeCode . { SELECT ?typeCode @@ -10612,7 +10612,7 @@ constraints:sphnVariantDescriptor_Warning_Codes a sh:NodeShape ; } UNION { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasAlleleOriginCode> ?oldCode . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?oldCode . ?oldCode rdf:type ?typeCode . ?typeCode rdfs:subClassOf+ sphn-hgnc:HGNC . ?typeCode rdfs:comment ?comment . @@ -10626,9 +10626,9 @@ constraints:sphnVariantDescriptor_Warning_Naming a sh:NodeShape ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasZygosityCode> as ?path) (?code as ?value) + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasAlleleOriginCode> as ?path) (?code as ?value) WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasZygosityCode> ?code . + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasAlleleOriginCode> ?code . FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ], [ a sh:SPARQLConstraint ; @@ -10639,6 +10639,14 @@ constraints:sphnVariantDescriptor_Warning_Naming a sh:NodeShape ; ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasTypeCode> ?code . FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasZygosityCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasZygosityCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) + }""" ], [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-VariantDescriptor-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> @@ -10647,14 +10655,6 @@ constraints:sphnVariantDescriptor_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-VariantDescriptor-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasAlleleOriginCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasAlleleOriginCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:VariantDescriptor . @@ -10687,31 +10687,31 @@ constraints:sphnVariantNotation_Warning_Naming a sh:NodeShape ; constraints:sphnVitalStatus a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class sphn:Death ; + sh:property [ sh:class sphn:DataProvider ; sh:maxCount 1 ; - sh:minCount 0 ; - sh:path sphn:hasDeath ], - [ sh:class sphn:SourceSystem ; sh:minCount 1 ; - sh:path sphn:hasSourceSystem ], - [ sh:class sphn:DataProvider ; + sh:path sphn:hasDataProvider ], + [ sh:class sphn:SubjectPseudoIdentifier ; sh:maxCount 1 ; sh:minCount 1 ; - sh:path sphn:hasDataProvider ], + sh:path sphn:hasSubjectPseudoIdentifier ], [ sh:maxCount 1 ; sh:minCount 0 ; - sh:or ( [ sh:class snomed:438949009 ] [ sh:class snomed:399307001 ] ) ; + sh:or ( [ sh:class snomed:399307001 ] [ sh:class snomed:438949009 ] ) ; sh:path sphn:hasCode ], - [ sh:class sphn:SubjectPseudoIdentifier ; + [ sh:class sphn:Death ; sh:maxCount 1 ; + sh:minCount 0 ; + sh:path sphn:hasDeath ], + [ sh:class sphn:SourceSystem ; sh:minCount 1 ; - sh:path sphn:hasSubjectPseudoIdentifier ] ; + sh:path sphn:hasSourceSystem ] ; sh:sparql [ a sh:SPARQLConstraint ; sh:message "No descendents (all subclasses) of the specified codes are allowed" ; sh:select """SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?class as ?value) WHERE { ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode>/<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?class . - FILTER( ?values IN ( <http://snomed.info/id/438949009>, <http://snomed.info/id/399307001> )) . + FILTER( ?values IN ( <http://snomed.info/id/399307001>, <http://snomed.info/id/438949009> )) . FILTER (?class NOT IN ( ?values ) ) . FILTER NOT EXISTS { ?values <http://www.w3.org/2000/01/rdf-schema#subClassOf>+ ?class .} }""" ] ; @@ -10720,14 +10720,6 @@ constraints:sphnVitalStatus a sh:NodeShape ; constraints:sphnVitalStatus_Warning_Naming a sh:NodeShape ; sh:severity sh:Warning ; sh:sparql [ a sh:SPARQLConstraint ; - sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; - sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> - SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) - WHERE { - ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . - FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) - }""" ], - [ a sh:SPARQLConstraint ; sh:message "Instantiated unique resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-VitalStatus-.*$'" ; sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -10735,6 +10727,14 @@ constraints:sphnVitalStatus_Warning_Naming a sh:NodeShape ; WHERE { ?this rdf:type ?class . FILTER(!REGEX(STR(?this), "^https://biomedit.ch/rdf/sphn-resource/.*-VitalStatus-.*$")) + }""" ], + [ a sh:SPARQLConstraint ; + sh:message "Instantiated shared resource not matching naming convention '^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$'" ; + sh:select """PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?this (<https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> as ?path) (?code as ?value) + WHERE { + ?this <https://biomedit.ch/rdf/sphn-schema/sphn#hasCode> ?code . + FILTER(!REGEX(STR(?code), "^https://biomedit.ch/rdf/sphn-resource/.*-Code-.*$")) }""" ] ; sh:targetClass sphn:VitalStatus . -- GitLab