pboProperty Ontology
turtle181 lines13.3 KB
RawDownload
1@prefix pbo: <https://ontology.property.local/pbo#> .
2@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
3@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
4@prefix owl: <http://www.w3.org/2002/07/owl#> .
5@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
6@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
7@prefix sh: <http://www.w3.org/ns/shacl#> .
8@prefix dcterms: <http://purl.org/dc/terms/> .
9@prefix prov: <http://www.w3.org/ns/prov#> .
10
11# SHACL 2017 shapes for operational record completeness (DEC-015).
12# These constrain data the platform stores; they do not assert domain truths.
13# Cardinalities here are SHACL, not OWL cardinality restrictions.
14
15pbo:ParticipationShape a sh:NodeShape ;
16 sh:targetClass pbo:Participation ;
17 sh:property [ sh:path pbo:participant ; sh:class pbo:Party ; sh:minCount 1 ; sh:maxCount 1 ; sh:message "A participation must name exactly one party."@en ] ,
18 [ sh:path pbo:inRole ; sh:class pbo:Role ; sh:minCount 1 ; sh:maxCount 1 ; sh:message "A participation must name exactly one role."@en ] ,
19 [ sh:path pbo:participationContext ; sh:minCount 1 ; sh:maxCount 1 ; sh:message "A participation must have exactly one context (agreement, asset, project or business)."@en ] ,
20 [ sh:path pbo:effectiveFrom ; sh:datatype xsd:date ; sh:maxCount 1 ] ,
21 [ sh:path pbo:effectiveUntil ; sh:datatype xsd:date ; sh:maxCount 1 ] .
22
23pbo:AgreementShape a sh:NodeShape ;
24 sh:targetClass pbo:Agreement ;
25 sh:property [ sh:path pbo:hasParticipation ; sh:class pbo:Participation ; sh:minCount 2 ; sh:message "An agreement needs at least two participations (for example landlord and tenant)."@en ] ,
26 [ sh:path pbo:concernsAsset ; sh:class pbo:PropertyAsset ; sh:minCount 1 ; sh:message "An agreement must concern at least one property asset or rentable unit."@en ] ,
27 [ sh:path pbo:weeklyRent ; sh:or ( [ sh:datatype xsd:decimal ] [ sh:datatype xsd:integer ] ) ; sh:maxCount 1 ; sh:minInclusive 0 ] ,
28 [ sh:path pbo:termMonths ; sh:datatype xsd:integer ; sh:maxCount 1 ; sh:minInclusive 0 ] ,
29 [ sh:path pbo:escalationRatePercent ; sh:or ( [ sh:datatype xsd:decimal ] [ sh:datatype xsd:integer ] ) ; sh:maxCount 1 ] ,
30 [ sh:path pbo:fixedRent ; sh:datatype xsd:boolean ; sh:maxCount 1 ] ,
31 [ sh:path pbo:leaseType ; sh:class pbo:LeaseType ; sh:maxCount 1 ] ,
32 [ sh:path pbo:permittedUse ; sh:class pbo:AccommodationType ] ,
33 [ sh:path pbo:hasClause ; sh:class pbo:ContractClause ] .
34
35pbo:HeadLeaseShape a sh:NodeShape ;
36 sh:targetClass pbo:HeadLease ;
37 sh:property [ sh:path pbo:fixedRent ; sh:hasValue true ; sh:minCount 1 ; sh:message "A head/master lease record must state fixedRent true (fixed rent regardless of occupancy)."@en ] ,
38 [ sh:path pbo:hasClause ; sh:qualifiedValueShape [ sh:class pbo:SublettingPermissionClause ] ; sh:qualifiedMinCount 1 ;
39 sh:severity sh:Warning ; sh:message "A head lease intended for subletting should record an express subletting permission clause."@en ] .
40
41pbo:SubleaseShape a sh:NodeShape ;
42 sh:targetClass pbo:Sublease ;
43 sh:property [ sh:path pbo:agreementUnderHeadLease ; sh:class pbo:HeadLease ; sh:minCount 1 ; sh:maxCount 1 ; sh:message "A sublease must reference the head lease it derives from."@en ] .
44
45pbo:OutgoingAllocationShape a sh:NodeShape ;
46 sh:targetClass pbo:OutgoingAllocation ;
47 sh:property [ sh:path pbo:outgoingCategory ; sh:class pbo:OutgoingCategory ; sh:minCount 1 ; sh:maxCount 1 ] ,
48 [ sh:path pbo:borneByRole ; sh:class pbo:Role ; sh:minCount 1 ; sh:maxCount 1 ] .
49
50pbo:AuthorisationShape a sh:NodeShape ;
51 sh:targetClass pbo:Authorisation ;
52 sh:property [ sh:path pbo:authorisationType ; sh:class pbo:AuthorisationType ; sh:minCount 1 ; sh:maxCount 1 ; sh:message "An authorisation must have exactly one authorisation type."@en ] ,
53 [ sh:path pbo:authorisationStatus ; sh:datatype xsd:string ; sh:minCount 1 ; sh:maxCount 1 ;
54 sh:in ( "held" "pending" "expired" "refused" "not_required" "unknown" ) ; sh:message "authorisationStatus must be one of held, pending, expired, refused, not_required, unknown."@en ] ,
55 [ sh:path pbo:issuedBy ; sh:class pbo:GovernmentBody ; sh:maxCount 1 ] ,
56 [ sh:path pbo:authorisedParty ; sh:class pbo:Party ; sh:maxCount 1 ] ,
57 [ sh:path pbo:underRegime ; sh:class pbo:RegulatoryRegime ; sh:maxCount 1 ] ,
58 [ sh:path pbo:dateIssued ; sh:datatype xsd:date ; sh:maxCount 1 ] ,
59 [ sh:path pbo:effectiveUntil ; sh:datatype xsd:date ; sh:maxCount 1 ] ;
60 sh:or ( [ sh:property [ sh:path pbo:concernsAsset ; sh:minCount 1 ] ]
61 [ sh:property [ sh:path pbo:authorisedParty ; sh:minCount 1 ] ] ) ;
62 sh:message "An authorisation must concern an asset or be granted to a party."@en .
63
64pbo:RegulatoryRegimeShape a sh:NodeShape ;
65 sh:targetClass pbo:RegulatoryRegime ;
66 sh:property [ sh:path pbo:appliesIn ; sh:class pbo:Jurisdiction ; sh:minCount 1 ; sh:message "A regime must apply in at least one jurisdiction."@en ] ,
67 [ sh:path pbo:governedBy ; sh:class pbo:Legislation ; sh:minCount 1 ; sh:message "A regime must cite the legislation that establishes it."@en ] ,
68 [ sh:path pbo:administeredBy ; sh:class pbo:GovernmentBody ] ,
69 [ sh:path pbo:hasThreshold ; sh:class pbo:OccupancyThreshold ] ,
70 [ sh:path pbo:requiresAuthorisationType ; sh:class pbo:AuthorisationType ] ,
71 [ sh:path pbo:hasRule ; sh:class pbo:RegulatoryRule ] .
72
73pbo:OccupancyThresholdShape a sh:NodeShape ;
74 sh:targetClass pbo:OccupancyThreshold ;
75 sh:property [ sh:path pbo:thresholdKind ; sh:class pbo:ThresholdKind ; sh:minCount 1 ; sh:maxCount 1 ] ,
76 [ sh:path pbo:thresholdComparator ; sh:datatype xsd:string ; sh:minCount 1 ; sh:maxCount 1 ; sh:in ( "gte" "lte" "gt" "lt" "eq" "range" ) ] ,
77 [ sh:path pbo:thresholdValue ; sh:or ( [ sh:datatype xsd:decimal ] [ sh:datatype xsd:integer ] ) ; sh:minCount 1 ; sh:maxCount 1 ] ,
78 [ sh:path pbo:thresholdUpperValue ; sh:or ( [ sh:datatype xsd:decimal ] [ sh:datatype xsd:integer ] ) ; sh:maxCount 1 ] ,
79 [ sh:path pbo:thresholdUnit ; sh:datatype xsd:string ; sh:minCount 1 ; sh:maxCount 1 ] ,
80 [ sh:path pbo:occupancyThresholdEffect ; sh:class pbo:ThresholdEffect ; sh:minCount 1 ; sh:maxCount 1 ; sh:message "A threshold must state its regulatory effect."@en ] .
81
82pbo:RegulatoryRuleShape a sh:NodeShape ;
83 sh:targetClass pbo:RegulatoryRule ;
84 sh:property [ sh:path pbo:underRegime ; sh:class pbo:RegulatoryRegime ; sh:minCount 1 ; sh:maxCount 1 ; sh:message "A rule must sit under exactly one regime."@en ] ,
85 [ sh:path pbo:effectiveFrom ; sh:datatype xsd:date ; sh:maxCount 1 ] ,
86 [ sh:path pbo:effectiveUntil ; sh:datatype xsd:date ; sh:maxCount 1 ] ,
87 [ sh:path pbo:cutoffDate ; sh:datatype xsd:dateTime ; sh:maxCount 1 ] .
88
89pbo:TaxRuleShape a sh:NodeShape ;
90 sh:targetClass pbo:TaxRule ;
91 sh:property [ sh:path pbo:appliesToPropertyClass ; sh:class pbo:PropertyClass ; sh:minCount 1 ; sh:message "A tax rule must state the property class it applies to."@en ] .
92
93pbo:MetricValueShape a sh:NodeShape ;
94 sh:targetClass pbo:MetricValue ;
95 sh:property [ sh:path pbo:metric ; sh:class pbo:Metric ; sh:minCount 1 ; sh:maxCount 1 ] ,
96 [ sh:path pbo:numericValue ; sh:or ( [ sh:datatype xsd:decimal ] [ sh:datatype xsd:integer ] ) ; sh:minCount 1 ; sh:maxCount 1 ; sh:message "A metric value must carry one decimal or integer numeric value."@en ] ,
97 [ sh:path pbo:upperValue ; sh:or ( [ sh:datatype xsd:decimal ] [ sh:datatype xsd:integer ] ) ; sh:maxCount 1 ] ,
98 [ sh:path pbo:unit ; sh:datatype xsd:string ; sh:minCount 1 ; sh:maxCount 1 ] ,
99 [ sh:path pbo:assertedIn ; sh:class pbo:SourceDocument ; sh:maxCount 1 ] ,
100 [ sh:path pbo:claimDate ; sh:datatype xsd:date ; sh:maxCount 1 ] .
101
102pbo:FinancialScenarioShape a sh:NodeShape ;
103 sh:targetClass pbo:FinancialScenario ;
104 sh:property [ sh:path pbo:scenarioName ; sh:datatype xsd:string ; sh:minCount 1 ; sh:maxCount 1 ] ,
105 [ sh:path pbo:assumes ; sh:class pbo:MetricValue ; sh:minCount 3 ; sh:message "A scenario must declare at least three input assumptions (for example rooms, tariff, vacancy)."@en ] ,
106 [ sh:path pbo:yields ; sh:class pbo:MetricValue ; sh:minCount 1 ; sh:message "A scenario must record at least one result metric."@en ] ,
107 [ sh:path pbo:scenarioForModel ; sh:class pbo:OperatingModel ; sh:maxCount 1 ] ,
108 [ sh:path pbo:assertedIn ; sh:class pbo:SourceDocument ; sh:maxCount 1 ] .
109
110pbo:PropertyAssetShape a sh:NodeShape ;
111 sh:targetClass pbo:PropertyAsset ;
112 sh:property [ sh:path pbo:locatedIn ; sh:class pbo:Jurisdiction ; sh:minCount 1 ; sh:maxCount 1 ; sh:message "A property asset must be located in exactly one (most specific) jurisdiction."@en ] ,
113 [ sh:path pbo:hasIdentifier ; sh:class pbo:PropertyIdentifier ] ,
114 [ sh:path pbo:roomCount ; sh:datatype xsd:integer ; sh:maxCount 1 ; sh:minInclusive 0 ] ,
115 [ sh:path pbo:bedroomCount ; sh:datatype xsd:integer ; sh:maxCount 1 ; sh:minInclusive 0 ] ,
116 [ sh:path pbo:floorAreaSqm ; sh:or ( [ sh:datatype xsd:decimal ] [ sh:datatype xsd:integer ] ) ; sh:maxCount 1 ] ,
117 [ sh:path pbo:hasAccommodationType ; sh:class pbo:AccommodationType ] ,
118 [ sh:path pbo:intendedOperatingModel ; sh:class pbo:OperatingModel ] ,
119 [ sh:path pbo:hasBuildingClassification ; sh:class pbo:BuildingClassification ; sh:maxCount 1 ] ,
120 [ sh:path pbo:hasAuthorisation ; sh:class pbo:Authorisation ] .
121
122pbo:DwellingIdentifierShape a sh:NodeShape ;
123 sh:targetClass pbo:Dwelling ;
124 sh:property [ sh:path pbo:hasIdentifier ; sh:minCount 1 ; sh:severity sh:Warning ; sh:message "A dwelling record should carry at least one identifier (address or lot/plan)."@en ] .
125
126pbo:PropertyIdentifierShape a sh:NodeShape ;
127 sh:targetClass pbo:PropertyIdentifier ;
128 sh:property [ sh:path pbo:identifierValue ; sh:datatype xsd:string ; sh:minCount 1 ; sh:maxCount 1 ] .
129
130pbo:JurisdictionShape a sh:NodeShape ;
131 sh:targetClass pbo:Jurisdiction ;
132 sh:property [ sh:path pbo:jurisdictionCode ; sh:datatype xsd:string ; sh:minCount 1 ; sh:maxCount 1 ] ,
133 [ sh:path pbo:withinJurisdiction ; sh:class pbo:Jurisdiction ] .
134
135pbo:DataSourceShape a sh:NodeShape ;
136 sh:targetClass pbo:DataSource ;
137 sh:property [ sh:path pbo:publishedBy ; sh:class pbo:Organisation ; sh:minCount 1 ; sh:maxCount 1 ] ,
138 [ sh:path pbo:accessTier ; sh:class pbo:DataAccessTier ; sh:minCount 1 ; sh:maxCount 1 ] ,
139 [ sh:path pbo:suppliesAttribute ; sh:class pbo:PropertyAttribute ; sh:minCount 1 ] ,
140 [ sh:path pbo:coversJurisdiction ; sh:class pbo:Jurisdiction ; sh:minCount 1 ] ,
141 [ sh:path pbo:refreshCadence ; sh:datatype xsd:string ; sh:maxCount 1 ] .
142
143pbo:RiskShape a sh:NodeShape ;
144 sh:targetClass pbo:Risk ;
145 sh:property [ sh:path pbo:riskCategory ; sh:class pbo:RiskCategory ; sh:minCount 1 ; sh:maxCount 1 ] ,
146 [ sh:path pbo:mitigatedBy ; sh:class pbo:Mitigation ] .
147
148pbo:MitigationShape a sh:NodeShape ;
149 sh:targetClass pbo:Mitigation ;
150 sh:property [ sh:path pbo:mitigationNote ; sh:datatype xsd:string ; sh:minCount 1 ; sh:maxCount 1 ] .
151
152pbo:DecisionGateShape a sh:NodeShape ;
153 sh:targetClass pbo:DecisionGate ;
154 sh:property [ sh:path pbo:gateCondition ; sh:datatype xsd:string ; sh:minCount 1 ; sh:maxCount 1 ] ,
155 [ sh:path pbo:gateRequiresAuthorisationType ; sh:class pbo:AuthorisationType ] .
156
157pbo:ServiceShape a sh:NodeShape ;
158 sh:targetClass pbo:Service ;
159 sh:property [ sh:path pbo:hasFeeModel ; sh:class pbo:FeeModel ; sh:minCount 1 ] ,
160 [ sh:path pbo:feePercentOfRent ; sh:or ( [ sh:datatype xsd:decimal ] [ sh:datatype xsd:integer ] ) ; sh:maxCount 1 ; sh:minInclusive 0 ; sh:maxInclusive 100 ] .
161
162pbo:SourceDocumentShape a sh:NodeShape ;
163 sh:targetClass pbo:SourceDocument ;
164 sh:property [ sh:path pbo:authorityLevel ; sh:datatype xsd:string ; sh:minCount 1 ; sh:maxCount 1 ;
165 sh:in ( "normative" "authoritative" "primary" "secondary" "expert" "reference" "illustrative" ) ] ,
166 [ sh:path pbo:sourceUrl ; sh:datatype xsd:anyURI ; sh:maxCount 1 ] ,
167 [ sh:path pbo:publicationDate ; sh:datatype xsd:date ; sh:maxCount 1 ] .
168
169pbo:StructureCharacteristicShape a sh:NodeShape ;
170 sh:targetClass pbo:StructureCharacteristic ;
171 sh:property [ sh:path pbo:characteristicNote ; sh:datatype xsd:string ; sh:minCount 1 ; sh:maxCount 1 ] ,
172 [ sh:path pbo:assertedIn ; sh:class pbo:SourceDocument ; sh:minCount 1 ; sh:message "A structure characteristic must cite the source document that states it."@en ] .
173
174pbo:ProjectPhaseShape a sh:NodeShape ;
175 sh:targetClass pbo:ProjectPhase ;
176 sh:property [ sh:path pbo:phaseOrder ; sh:datatype xsd:integer ; sh:maxCount 1 ] .
177
178pbo:DevelopmentProjectShape a sh:NodeShape ;
179 sh:targetClass pbo:DevelopmentProject ;
180 sh:property [ sh:path pbo:hasPhase ; sh:class pbo:ProjectPhase ; sh:minCount 1 ] ,
181 [ sh:path pbo:concernsAsset ; sh:class pbo:PropertyAsset ; sh:minCount 1 ] .