Hi Holger,

I'm a little surprised by that (assuming that I understood the discussion correctly).

I was assuming that it is safe and deterministic if I reuse the same owl:Property R via sh:path in two PropertyShapes A and B, provided that both PropertyShapes define a unique link between R and two *different* classes P and Q.

In other words:

    The relation P→R is defined and constrained by PropertyShape A.

    The relation Q→R is defined and constrained by PropertyShape B.

When I then process an instance of class P, I would expect the constraints defined by PropertyShape A to be applied. Correspondingly, for an instance of Class Q, I would expect PropertyShape B to guide the UI data acquisition and validation.

I thought this was the situation that Ad was describing — and I would expect this to work because it is deterministic. There is no reason why an instance of class P should take PropertyShape B into account for R or vice versa (unless, of course, the instance were declared an instance of both classes, but let's exclude that scenario for now).

The only requirement is a type definition for the instance. In the absence of a type definition, there is no way to determine which constraints should apply.

Cheers,

Bernd



Am 06.11.25 um 08:01 schrieb Holger Knublauch:
Hi Ad,

I guess the larger answer is that it is not possible to re-declare the same sh:path with multiple different sh:names and even sh:class constraints at the same node shape or class. As David indicates, this only makes sense to narrow down in subclasses.

Keep in mind that all constraints *add up* which means when you constrain the values of ex:hasDocument to have sh:class ex:Class1 and sh:class ex:Class2 then the values must be at the same time instances of Class1 AND Class2. This is unlikely what you want. You can, however, do that in a subclass or sub shape when Class1 is a superclass of Class2.

If you really want to reuse the same property hasDocument and display it in different places, you can use sh:values to define two separate properties that “infer” the grouping that you want for display purposes.

Holger


On Nov 6, 2025, at 02:23, David Price <[email protected]> wrote:

Hi,

So I tried what I think is being suggested and it worked fine in EDG 9.0 (just released). Maybe this issue has been addressed in newer releases of EDG?

<Screenshot 2025-11-05 at 16.18.34.png>

Cheers,
David

P.S. Schema here:

# baseURI: urn:x-evn-master:test_property_schema

@prefix dash: <http://datashapes.org/dash#> .
@prefix graphql: <http://datashapes.org/graphql#> .
@prefix metadata: <http://topbraid.org/metadata#> .
@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 teamwork: <http://topbraid.org/teamwork#> .
@prefix test_property_schema: <http://example.org/ontologies/Test_Property_Schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

test_property_schema:Asset
  a owl:Class ;
  a sh:NodeShape ;
  rdfs:label "Asset" ;
  rdfs:subClassOf owl:Thing ;
  sh:property test_property_schema:Asset-hasDocument ;
  sh:property test_property_schema:Asset-label ;
.
test_property_schema:Asset-hasDocument
  a sh:PropertyShape ;
  sh:path test_property_schema:hasDocument ;
  sh:class test_property_schema:Report ;
  sh:maxCount 1 ;
  sh:name "hasDocument" ;
.
test_property_schema:Asset-label
  a sh:PropertyShape ;
  sh:path rdfs:label ;
  graphql:name "labels" ;
  sh:name "labels" ;
  sh:or dash:StringOrLangString ;
  sh:singleLine true ;
.
test_property_schema:Charter
  a owl:Class ;
  a sh:NodeShape ;
  rdfs:label "Charter" ;
  rdfs:subClassOf owl:Thing ;
.
test_property_schema:Project
  a owl:Class ;
  a sh:NodeShape ;
  rdfs:label "Project" ;
  rdfs:subClassOf owl:Thing ;
  sh:property test_property_schema:Project-hasDocument ;
  sh:property test_property_schema:Project-label ;
.
test_property_schema:Project-hasDocument
  a sh:PropertyShape ;
  sh:path test_property_schema:hasDocument ;
  sh:class test_property_schema:Charter ;
  sh:maxCount 1 ;
  sh:name "hasDocument" ;
.
test_property_schema:Project-label
  a sh:PropertyShape ;
  sh:path rdfs:label ;
  graphql:name "labels" ;
  sh:name "labels" ;
  sh:or dash:StringOrLangString ;
  sh:singleLine true ;
.
test_property_schema:Report
  a owl:Class ;
  a sh:NodeShape ;
  rdfs:label "Report" ;
  rdfs:subClassOf owl:Thing ;
  sh:property test_property_schema:Report-label ;
.
test_property_schema:Report-label
  a sh:PropertyShape ;
  sh:path rdfs:label ;
  graphql:name "labels" ;
  sh:name "labels" ;
  sh:or dash:StringOrLangString ;
  sh:singleLine true ;
.
<urn:x-evn-master:test_property_schema>
  a owl:Ontology ;
  graphql:publicClass test_property_schema:Asset ;
  graphql:publicClass test_property_schema:Charter ;
  graphql:publicClass test_property_schema:Project ;
  graphql:publicClass test_property_schema:Report ;
  metadata:status metadata:UnderDevelopmentStatus ;
<http://topbraid.org/swa#defaultNamespace> "http://example.org/ontologies/Test_Property_Schema#"; ;
  rdfs:label "Test Property Schema" ;
  owl:imports <http://datashapes.org/graphql> ;
.



On 5 Nov 2025, at 15:36, Ad Reuijl <[email protected]> wrote:

Hi David,

Thank you for your swift response!

I was aware of those possiblities in EDG of further constraining the inherited properties, however this is not exactly the problem i was encountering. The problem mainly occurs within the properties already bound to the shape (so not the inherited but the declared properties of the shape).

When registering individuals/instances in the edg-datagraph (using my shacl based ontology), the EDG UI only renders the first propertyshape it encouters with the 'hasDocument' path as a renderred field (a field where i can enter data/ register the object of the triple). The other hasDocument propertyshapes are not rendered in the frontend because they have the same sh:path. Therefore it seems that the frontend rendering (using dash and shacl as ontologies for defining this rendering) only looks at the sh:path for defining whether there has to be an extra field rendered, and not the actual property shape. In other words, if i define 10 propertyshapes with the same sh:path it only renders the first shape it encounter, so i only get 1 field to add some data (even if those propertyshapes lead to different sh:class'es).

I tried using specified sh:path's like 'dds:draaideurHasDocumentE21blablabla' and then it reders all the fields i am looking for, but this results into instances with a lot of different predicates, and that is something i dont want..

I hope i explained it a bit further, it is a bit hard, since english is not my native language, so please excuse my lack of expressive-power.

regards,
and thanks for the effort!

Ad

Op woensdag 5 november 2025 om 13:33:07 UTC+1 schreef David Price:

    I think the issue here is likely that in semantics-land folks
    say "properties are first class objects” and so the example
    approach violates that.

    This land is largely based in set theory and logic, not
    programming languages.

    e.g. in OWL if you assert P rdfs:range Report and P rdfs:range
    Manual you actually are saying that P values are in the
    intersection of Manual and Report.

    Anyway… can handle the example in EDG/SHACL — follow the purple
    arrow :-)

    It is possible to “further constrain” the sh:class of an
    inherited property in a new property shape. So:

      * SomeClass sh:property a property shape with sh:path
        hasDocument and sh:class Document
      * Document has sublcasses MaintenanceManual and InspectionReport
      * SomeClass2 and. SomeClass3 subclass of SomeClass select the
        appropriate Document subclasss to further constrain
        hasDocument in the new property shapes in the subclasses.


    Below shows starting to further constrain “broader” in a
    subclass of “Concept”:


    Screenshot 2025-11-05 at 11.49.22.png



    Cheers,
    David




    On 5 Nov 2025, at 11:32, Ad Reuijl <[email protected]> wrote:

    Hi Holger,

    I’m working with TopBraid EDG to manage both our ontology and
    instance data.
    When creating or editing instances, I’ve noticed that the
    frontend rendering of form fields is driven by *sh:path*.

    In my setup, I deliberately reuse the same property path in
    multiple PropertyShapes (for example, a single generic relation
    …:hasDocument), while distinguishing the semantics in the
    PropertyShape itself — through its sh:name, sh:group, sh:order,
    and, most importantly, the value constraints or target class.

    Concretely, I want to use one general property like
    :hasDocument and let the associated node’s type determine
    whether it is a valid document type for a given asset type. For
    example:
    Screenshot 2025-11-05 122010.png

    What I observe is that, because the renderer uses /sh:path/ as
    the unique key, these two PropertyShapes (which intentionally
    share the same path) are treated as one in the UI, rather than
    as separate fields — even though their semantics and value
    constraints differ.
    This effectively forces me to define separate properties per
    document type, which is conceptually undesirable.

    *My questions:*

    1.

        What is the (historical or technical) reason for using
        /sh:path/ as the determining key for rendering, instead of
        the *PropertyShape identity* itself?

    2.

        Is there any configuration or supported pattern that allows
        the UI to render *per PropertyShape*, i.e., respecting
        sh:name, sh:group, sh:order, and sh:class/sh:node, even
        when sh:path is identical?

    3.

        If not, would you consider supporting this as an optional
        rendering mode? For example:

         *

            “Render by PropertyShape (default key = PropertyShape
            IRI)”, or

         *

            an explicit annotation like dash:renderSeparately true.

    4.

        Is there a recommended workaround within EDG (e.g.,
        qualifiedValueShapes, or a etc) to achieve this behavior
        cleanly, without polluting the ontology with artificial,
        property-specific duplicates?

    I’d really appreciate your insights or pointers to the
    reasoning behind this design choice.
    here is an example of what is see in EDG

    Screenshot 2025-11-05 122354.png

    Only one documents show up while there are many more applicable
    to the class/shape Draaideur

    Screenshot 2025-11-05 122549.png

    Best regards,
    *Ad Reuijl*
    Linked Data Specialist / Semantic Modeller

    Schiphol Group | Semtyx

-- The topics of this mailing list include TopBraid EDG and
    related technologies such as SHACL.
    To post to this group, send email to [email protected]
    ---
    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 [email protected].
    To view this discussion visit
    
https://groups.google.com/d/msgid/topbraid-users/676f2b33-f5e7-4811-979c-4825c44089c6n%40googlegroups.com
    
<https://groups.google.com/d/msgid/topbraid-users/676f2b33-f5e7-4811-979c-4825c44089c6n%40googlegroups.com?utm_medium=email&utm_source=footer>.
    Screenshot 2025-11-05 122354.pngScreenshot 2025-11-05
    122549.pngScreenshot 2025-11-05 122010.png

    David Price, Semantic Solution Architect
    UK +44 (0) 7788 561308 <tel:+44%207788%20561308>
    TopQuadrant.com <https://www.topquadrant.com/>


--
The topics of this mailing list include TopBraid EDG and related technologies such as SHACL.
To post to this group, send email to [email protected]
---
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 [email protected]. To view this discussion visit https://groups.google.com/d/msgid/topbraid-users/f40783fd-ccde-4179-ae9a-33b056f6db51n%40googlegroups.com <https://groups.google.com/d/msgid/topbraid-users/f40783fd-ccde-4179-ae9a-33b056f6db51n%40googlegroups.com?utm_medium=email&utm_source=footer>.

David Price, Semantic Solution Architect
UK +44 (0) 7788 561308
TopQuadrant.com <https://www.topquadrant.com/>


--
The topics of this mailing list include TopBraid EDG and related technologies such as SHACL.
To post to this group, send email to [email protected]
---
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 [email protected]. To view this discussion visit https://groups.google.com/d/msgid/topbraid-users/7E553C71-745F-45D1-9AB3-08F25BFAE8C6%40topquadrant.com <https://groups.google.com/d/msgid/topbraid-users/7E553C71-745F-45D1-9AB3-08F25BFAE8C6%40topquadrant.com?utm_medium=email&utm_source=footer>.

--
The topics of this mailing list include TopBraid EDG and related technologies such as SHACL.
To post to this group, send email to [email protected]
---
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 [email protected]. To view this discussion visit https://groups.google.com/d/msgid/topbraid-users/A52040AD-7298-4A75-8605-21B2BA774B28%40topquadrant.com <https://groups.google.com/d/msgid/topbraid-users/A52040AD-7298-4A75-8605-21B2BA774B28%40topquadrant.com?utm_medium=email&utm_source=footer>.

--
The topics of this mailing list include TopBraid EDG and related technologies 
such as SHACL.
To post to this group, send email to [email protected]
--- 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 [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/topbraid-users/62a46b4c-8a35-44cb-91b7-196efdabf2f9%40gmail.com.

Reply via email to