--
The topics of this mailing list include TopBraid EDG and related technologies such as SHACL.
To post to this group, send email to topbrai...@googlegroups.com
---
You received this message because you are subscribed to the Google Groups "TopBraid Suite Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to topbraid-user...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/topbraid-users/ef32814f-1186-484d-a884-fb1ca72d12fen%40googlegroups.com.
Hi David
Made some changes. Actually quite surprised that SHACL-level stays fine too now.
Report now as expected:

(just have to figure out how I can make the sh:targetClass more flex so that it works on all classes being themselves an instance of the meta-class (now I just refer to the class at hand directly which can become cumbersome with more specific and/or individuals…..)
On:
# baseURI: https://w3id.org/sml-example/rdfs/def
# imports: http://www.w3.org/ns/shacl
@prefix ex: <https://w3id.org/sml-example/def#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
<https://w3id.org/sml-example/rdfs/def>
a owl:Ontology ;
owl:imports <http://www.w3.org/ns/shacl> ;
.
ex:House
a rdfs:Class ;
.
ex:House_specific123
a rdfs:Class ;
a ex:House ;
ex:comfortClass ex:B ;
ex:numberOfRooms "4"^^xsd:positiveInteger ;
.
ex:House_specific-error
a rdfs:Class ;
a ex:House ;
ex:comfortClass ex:B ;
.
ex:House_individual456
a rdfs:Class ;
a ex:House_specific123 ;
ex:address "Groeneweg 135, 2691ML, s-Gravenzande, The Netherlands" ;
.
ex:House_individual-error
a rdfs:Class ;
a ex:House_specific123 ;
.
ex:House_occurrence789
a ex:House_individual456 ;
ex:time "2026-02-23T14:56:00"^^xsd:dateTime ;
ex:valueInEuro "550000.0"^^xsd:float ;
.
ex:House_occurrence-error
a ex:House_individual456 ;
ex:time "2026-02-23T14:56:00"^^xsd:dateTime ;
ex:valueInEuro "550000"^^xsd:integer ;
.
ex:ComfortClass
a rdfs:Class ;
.
ex:A
a ex:ComfortClass ;
.
ex:B
a ex:ComfortClass ;
.
ex:C
a ex:ComfortClass ;
.
ex:address
a rdf:Property ;
rdfs:range xsd:string ;
.
ex:comfortClass
a rdf:Property ;
rdfs:domain ex:House ;
rdfs:range ex:ComfortClass ;
.
ex:numberOfRooms
a rdf:Property ;
rdfs:range xsd:positiveInteger ;
.
ex:time
a rdf:Property ;
rdfs:range xsd:dateTime ;
.
ex:valueInEuro
a rdf:Property ;
rdfs:range xsd:float ;
.
ex:HouseShape
a sh:NodeShape ;
sh:targetClass ex:House ;
sh:property [
sh:path ex:comfortClass ;
sh:class ex:ComfortClass ;
sh:maxCount 1 ;
sh:message "error"@nl ;
sh:minCount 1 ;
sh:severity sh:Violation ;
] ;
sh:property [
sh:path ex:numberOfRooms ;
sh:datatype xsd:positiveInteger ;
sh:maxCount 1 ;
sh:message "error"@nl ;
sh:minCount 1 ;
sh:severity sh:Violation ;
] ;
.
ex:House_specificShape
a sh:NodeShape ;
sh:targetClass ex:House_specific123 ;
sh:property [
sh:path ex:address ;
sh:datatype xsd:string ;
sh:maxCount 1 ;
sh:message "error"@nl ;
sh:minCount 1 ;
sh:severity sh:Violation ;
] ;
.
ex:House_individualShape
a sh:NodeShape ;
sh:targetClass ex:House_individual456 ;
sh:property [
sh:path ex:time ;
sh:datatype xsd:dateTime ;
sh:maxCount 1 ;
sh:message "error"@nl ;
sh:minCount 1 ;
sh:severity sh:Violation ;
] ;
sh:property [
sh:path ex:valueInEuro ;
sh:datatype xsd:float ;
sh:maxCount 1 ;
sh:message "error"@nl ;
sh:minCount 1 ;
sh:severity sh:Violation ;
] ;
.
|
||||||||||||||||
To view this discussion visit https://groups.google.com/d/msgid/topbraid-users/083100E8-5350-48B3-B384-3316F91D8409%40topquadrant.com.
Just FYI, works now perfectly also flex (involving generic resources, shapes work also directly fine without any inference needed….), without any extra partitioning:

I would say: RDFS+SHACL for DPP! (digital product passports)
(instead of thinking up complex own meta-models in CEN/CENELEC PTC24/TC442 WG12 and buildingSMART etc.)
Small set of minimal dpp resources, subsectors can define their own agreed abstracts (like House-abstract) and then use them in specifics/individuals/occurrences conceptually, in space resp. in time…
Next complexity challenge: adding “decomposition (hasPart)” consistently with the meta-levels….
@prefix ex: https://w3id.org/dpp-example/def# .
@prefix dpp: https://w3id.org/dpp/def# .
@prefix owl: http://www.w3.org/2002/07/owl# .
@prefix rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# .
@prefix rdfs: http://www.w3.org/2000/01/rdf-schema# .
@prefix sh: http://www.w3.org/ns/shacl# .
@prefix xsd: http://www.w3.org/2001/XMLSchema# .
https://w3id.org/sml-example/rdfs/def
a owl:Ontology ;
owl:imports http://www.w3.org/ns/shacl ;
.
# meta-levels: abstract, specific, individual, occurrence
dpp:Product_abstract
a rdfs:Class ;
.
dpp:Product_specific
a rdfs:Class ;
.
dpp:Product_individual
a rdfs:Class ;
.
ex:House_abstract
a rdfs:Class ;
rdfs:subClassOf ex:Product-abstract ;
.
ex:House_specific-1
a rdfs:Class ;
a ex:House_abstract ;
rdfs:subClassOf ex:Product-specific ;
ex:comfortClass ex:B ;
ex:numberOfRooms "4"^^xsd:positiveInteger ;
.
ex:House_specific-2
a rdfs:Class ;
a ex:House_abstract ;
rdfs:subClassOf ex:Product-specific ;
ex:comfortClass ex:C ;
.
ex:House_individual-1-1
a rdfs:Class ;
a ex:House_specific-1 ;
rdfs:subClassOf ex:Product-individual ;
dpp:address "Groeneweg 135, 2691ML, s-Gravenzande, The Netherlands" ;
.
ex:House_individual-1-2
a rdfs:Class ;
a ex:House_specific-1 ;
rdfs:subClassOf ex:Product-individual ;
.
ex:House_occurrence-1-1-1
a ex:House_individual-1-1 ;
ex:time "2026-02-23T14:56:00"^^xsd:dateTime ;
ex:valueInEuro "550000.0"^^xsd:float ;
.
ex:House_occurrence-1-1-2
a ex:House_individual-1-1 ;
ex:time "2026-02-23T14:56:00"^^xsd:dateTime ;
ex:valueInEuro "550000"^^xsd:integer ;
.
ex:ComfortClass
a rdfs:Class ;
.
ex:A
a ex:ComfortClass ;
.
ex:B
a ex:ComfortClass ;
.
ex:C
a ex:ComfortClass ;
.
dpp:address
a rdf:Property ;
rdfs:range xsd:string ;
.
ex:comfortClass
a rdf:Property ;
rdfs:domain ex:House-abstract ;
rdfs:range ex:ComfortClass ;
.
ex:numberOfRooms
a rdf:Property ;
rdfs:range xsd:positiveInteger ;
.
dpp:time
a rdf:Property ;
rdfs:range xsd:dateTime ;
.
ex:valueInEuro
a rdf:Property ;
rdfs:range xsd:float ;
.
ex:HouseShape
a sh:NodeShape ;
sh:targetClass ex:House_abstract ;
sh:property [
sh:path ex:comfortClass ;
sh:class ex:ComfortClass ;
sh:maxCount 1 ;
sh:message "error"@nl ;
sh:minCount 1 ;
sh:severity sh:Violation ;
] ;
sh:property [
sh:path ex:numberOfRooms ;
sh:datatype xsd:positiveInteger ;
sh:maxCount 1 ;
sh:message "error"@nl ;
sh:minCount 1 ;
sh:severity sh:Violation ;
] ;
.
ex:House_specificShape
a sh:NodeShape ;
sh:targetClass ex:Product-specific ;
sh:property [
sh:path dpp:address ;
sh:datatype xsd:string ;
sh:maxCount 1 ;
sh:message "error"@nl ;
sh:minCount 1 ;
sh:severity sh:Violation ;
] ;
.
ex:House_individualShape
a sh:NodeShape ;
sh:targetClass ex:Product_individual ;
sh:property [
sh:path dpp:time ;
sh:datatype xsd:dateTime ;
sh:maxCount 1 ;
sh:message "error"@nl ;
sh:minCount 1 ;
sh:severity sh:Violation ;
] ;
sh:property [
sh:path ex:valueInEuro ;
sh:datatype xsd:float ;
sh:maxCount 1 ;
sh:message "error"@nl ;
sh:minCount 1 ;
sh:severity sh:Violation ;
] ;
.
|
On 27 Feb 2026, at 09:25, 'Bohms, H.M. (Michel)' via TopBraid Suite Users <topbrai...@googlegroups.com> wrote:
Hi DavidMade some changes. Actually quite surprised that SHACL-level stays fine too now.Report now as expected:
This message may contain information that is not intended for you. If you are not the addressee or if this message was sent to you by mistake, you are requested to inform the sender and delete the message. TNO accepts no liability for the content of this e-mail, for the manner in which you use it and for damage of any kind resulting from the risks inherent to the electronic transmission of messages.
From: topbrai...@googlegroups.com <topbrai...@googlegroups.com> On Behalf Of David Price
Sent: donderdag 26 februari 2026 17:35
To: 'Felix Sasaki' via TopBraid Suite Users <topbrai...@googlegroups.com>
Subject: Re: [topbraid-users] ?sh:in expects a list of things so probably just needs brackets
Thx!
The nice thing is that I can show that linked data can actually implement ideas we promote already for a long time in the construction industry/SE:

(note I myself prefer the term ‘abstract’ to ‘generic’…generic to be used for the taxonomy…not for highest meta-level).
This figure is from Wim Gielingh who addressed this issue already 40 years ago in ISO STEP-context 😊 (in his GARM-General AEC Reference Model). He also invented the “hamburger model” a combi of typical decomposition and alternative decompositions representing alternative technical solutions to functional units (also referred to as FUTS-decomposition).
The latter I incorporated already in the EU standard EN17632 SML-Semantic Modelling and Linking (via the mentioned constraints on hasPart) and distinction in FunctionalEntity and TechnicalEntity..
The challenge is now to add the meta-levels the right way as pattern. This dimension is really missing:
Think we need decomposition defined at abstract (meronomy) for specific level, taken over by individual level and just used by occurrence level (assuming it is not dynamic ie changing in time).
Gr michel
|
|
|
| ||||||||
From: topbrai...@googlegroups.com <topbrai...@googlegroups.com>
On Behalf Of David Price
Sent: vrijdag 27 februari 2026 12:50
To: 'Felix Sasaki' via TopBraid Suite Users <topbrai...@googlegroups.com>
Subject: Re: [topbraid-users] ?
Hi Michel,
Just for fun I loaded this into EDG into an Ontologies collection telling it to not do any cleanup … and EDG Problems & Suggestions panel reports the errors too.
Cheers,
David
On 27 Feb 2026, at 09:25, 'Bohms, H.M. (Michel)' via TopBraid Suite Users <topbrai...@googlegroups.com> wrote:
Hi David
Made some changes. Actually quite surprised that SHACL-level stays fine too now.
Report now as expected:
To view this discussion visit https://groups.google.com/d/msgid/topbraid-users/B906D5DE-8407-44FA-BE57-1FBE5BACFB0B%40topquadrant.com.