On 2022-01-27 11:02 am, Carl Burnett wrote:

This helps! I now am able to create more complex sh:values rules that re-use the inferred values from a different property shape.

But I am now having some other problems with sh:values. I will probably need to move away from generalized examples now and show you one of my actual shapes:

concept_schema:Rollup_Concept-includedVideos

  a sh:PropertyShape ;

  sh:path enterprise_schemas:includedVideos ;

  dash:readOnly true ;

  sh:class content_asset_schema:Video ;

  sh:group tosh:InferencesPropertyGroup ;

  sh:name "included videos (SHACL)" ;

  sh:order "4"^^xsd:decimal ;

  sh:values [

      sh:path [

          sh:inversePath [

              sh:alternativePath (

content_asset_schema:level_1

           content_asset_schema:level_2

content_asset_schema:level_3

                ) ;

            ] ;

        ] ;

      sh:filterShape [

          sh:property [

              sh:path content_asset_schema:lifecycle_stage ;

              sh:hasValue supplementary_concept_data:Active_Asset ;

            ] ;

        ] ;

      sh:nodes [

          sh:path enterprise_schemas:includedConcepts ;

        ] ;

    ] ;

.

This shape definition is accepted without errors by EDG’s *values *UI widget, which diagrams it like this:

This diagram seems incomplete, though, in two ways:

 1. The right-most box should read *this (Video)*, because I have
    specified that sh:class.
 2. My sh:filterShape seems to be ignored.

Sure enough, the values produced by the shape, while respecting my *sh:path *and *sh:nodes *statements, seem to ignore the sh:class I specified and my sh:filterShape.

What am I doing wrong here?

You're mixing two node expressions into the same top level sh:values blank node. Either use sh:filterShape or sh:path but not both. I don't know what the chaining is supposed to look like, but if you want the values of the upper path to go through the filter shape, try

sh:values [
    sh:filterShape [ ... ] ;
    sh:nodes [
        sh:path [ sh:inversePath [ ... ] ]
    ]
]

See https://w3c.github.io/shacl/shacl-af/#node-expressions-filter-shape for the spec - sh:filterShape can only have exactly one sh:nodes as input.

The outer sh:class is unrelated to the sh:values rule and is only used for validation purposes, not inferencing.

Holger


*From:* [email protected] <[email protected]> *On Behalf Of *Holger Knublauch
*Sent:* Tuesday, January 25, 2022 2:55 PM
*To:* [email protected]
*Subject:* Re: [topbraid-users] SHACL inferred data question

*** External email: use caution ***

On 2022-01-26 3:13 am, [email protected] wrote:

    Holger,

    I am able to create a second property shape, ex:shape2, that uses
    the values from my ex:shape1 in a very simple, non-transformative
    way and successfully returns the values of ex:shape1 for ex:shape2:

    ex:Class-shape2

      a sh:PropertyShape ;
      sh:path ex:shape2 ;

      sh:class ex:Class

      sh:values [
          sh:path ex:shape1 ;
        ] ;
    .

    But the moment I try to introduce any more complexity, my
    sh:values statement stops returning any results. For example, I tried:

      sh:values [
        sh:path ( ex:shape1 skos:broader ) ;
        ]

Right, complex path expressions don't work in that case. This would have required a much more complex implementation that would hook into the SPARQL-like path execution. Doable in principle, just not implemented yet.

The alternative to the above is to use nested sh:path expressions, try something like

sh:values [
    sh:path skos:broader ;
    sh:nodes [
        sh:path ex:shape1 ;
    ]
]

This is based on the optional second argument (sh:nodes) that https://w3c.github.io/shacl/shacl-af/#node-expressions-path <https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fw3c.github.io%2Fshacl%2Fshacl-af%2F%23node-expressions-path&data=04%7C01%7Ccburnett%40healthwise.org%7Ccde6d575eba949e3f95908d9e055bb5f%7Ccee5d4e942e548c28a033406fd5b9242%7C0%7C1%7C637787481106696623%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=dpwSujvmDHyT%2FNZDFuEJ%2FTHXAuxceaKDmEU9Wset9qk%3D&reserved=0> takes and would first get all values of ex:shape1 and then get the broader values of those. I believe this corresponds to your chained path expression.

Hope this works, didn't test... :)

Holger

    and got back no values for ex:shape2. (All of the values returned
    for ex:shape1 have broader concepts, although they are defined in
    a different EDG asset collection.)

    What am I doing wrong?

    thanks,

    Carl

    On Thursday, January 20, 2022 at 5:01:18 PM UTC-8 Holger Knublauch
    wrote:

        On 2022-01-21 10:54 am, [email protected] wrote:

            Thanks, Holger. My need in this case isn't to query
            inferred data using SPARQL or GraphQL, but rather to reuse
            the inferred data as an input for another EDG property
            shape with another sh:values rule in it. I think I'm
            hearing that that's not possible.

        That scenario IS possible. You just need to use a path node
        expression, see

        https://w3c.github.io/shacl/shacl-af/#node-expressions-path
        
<https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fw3c.github.io%2Fshacl%2Fshacl-af%2F%23node-expressions-path&data=04%7C01%7Ccburnett%40healthwise.org%7Ccde6d575eba949e3f95908d9e055bb5f%7Ccee5d4e942e548c28a033406fd5b9242%7C0%7C1%7C637787481106696623%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=dpwSujvmDHyT%2FNZDFuEJ%2FTHXAuxceaKDmEU9Wset9qk%3D&reserved=0>

        So if ex:prop1 is inferred then you can reference it in the
        sh:values rule of another property using [ sh:path ex:prop1 ]
        and it will compute that inference on the fly. This assumes
        that the receiving property using a sh:values rule using SHACL
        node expressions, not SPARQL.

        Holger

            Can you point me to where I can read more about the
            materialization option and decide whether there's a way to
            make that work for this use case? Thanks.

            On Tuesday, January 18, 2022 at 4:03:32 PM UTC-8 Holger
            Knublauch wrote:

                On 2022-01-19 9:44 am, [email protected] wrote:

                    I have defined a property shape and am
                    successfully inferring its objects using a
                    sh:values rule.

                    Can you remind me whether it is possible to use
                    this property and its inferred data in the
                    sh:values rule for a different property shape? If
                    so, is there a special way that it needs to be
                    done -- like, does the data I inferred in the
                    first property shape need to be materialized in
                    some way before I can make use of it?  --

                In general, the RDF graphs that TopBraid operates on
                do not automatically "see" the extra inferred triples,
                so they are not computed as RDF triples on the fly.
                However, our higher level query languages GraphQL and
                JavaScript/ADS do see them whenever they are
                requested. The user interface goes through GraphQL and
                will therefore display these values as if they were
                materialized.

                Now, within SHACL itself it depends on what you want
                to do. If you have SHACL-AF inference rules including
                other sh:values rules you can safely use path
                expressions
                https://w3c.github.io/shacl/shacl-af/#node-expressions-path
                
<https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fw3c.github.io%2Fshacl%2Fshacl-af%2F%23node-expressions-path&data=04%7C01%7Ccburnett%40healthwise.org%7Ccde6d575eba949e3f95908d9e055bb5f%7Ccee5d4e942e548c28a033406fd5b9242%7C0%7C1%7C637787481106696623%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=dpwSujvmDHyT%2FNZDFuEJ%2FTHXAuxceaKDmEU9Wset9qk%3D&reserved=0>
                and the values will be computed on the fly. For SHACL
                constraints there is no such mechanism unless you are
                expressing the constraints in SPARQL. There you can
                use the magic property

                    (?focusNode ?predicate) tosh:values ?result

                to query the inferred values.

                The other option, of course, is to materialize the
                inferences, e.g. using the Inferences panel or the
                Transform tab.

                Does this help?

                Holger

                    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 on the web visit
                    
https://groups.google.com/d/msgid/topbraid-users/d1fc11f5-f4a3-4d23-84b7-4a72666e6c3fn%40googlegroups.com
                    
<https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroups.google.com%2Fd%2Fmsgid%2Ftopbraid-users%2Fd1fc11f5-f4a3-4d23-84b7-4a72666e6c3fn%2540googlegroups.com%3Futm_medium%3Demail%26utm_source%3Dfooter&data=04%7C01%7Ccburnett%40healthwise.org%7Ccde6d575eba949e3f95908d9e055bb5f%7Ccee5d4e942e548c28a033406fd5b9242%7C0%7C1%7C637787481106696623%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=wS0pKR318uXyuZzk6mT5RFcj4bg5fK4skCMgHRc50Ng%3D&reserved=0>.

--
            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 on the web visit
            
https://groups.google.com/d/msgid/topbraid-users/3d423d68-4f62-4180-a44a-3143e6a1128fn%40googlegroups.com
            
<https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroups.google.com%2Fd%2Fmsgid%2Ftopbraid-users%2F3d423d68-4f62-4180-a44a-3143e6a1128fn%2540googlegroups.com%3Futm_medium%3Demail%26utm_source%3Dfooter&data=04%7C01%7Ccburnett%40healthwise.org%7Ccde6d575eba949e3f95908d9e055bb5f%7Ccee5d4e942e548c28a033406fd5b9242%7C0%7C1%7C637787481106696623%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=Z3wlqoD3PFcY4QKCnK7nyCxUXvjxJDvC9Mvrsi5v790%3D&reserved=0>.

-- 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 on the web visit
    
https://groups.google.com/d/msgid/topbraid-users/6cd4990a-f08d-4461-b0bf-a15468f8d948n%40googlegroups.com
    
<https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroups.google.com%2Fd%2Fmsgid%2Ftopbraid-users%2F6cd4990a-f08d-4461-b0bf-a15468f8d948n%2540googlegroups.com%3Futm_medium%3Demail%26utm_source%3Dfooter&data=04%7C01%7Ccburnett%40healthwise.org%7Ccde6d575eba949e3f95908d9e055bb5f%7Ccee5d4e942e548c28a033406fd5b9242%7C0%7C1%7C637787481106696623%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=lF8JMGy7bEbMee%2Fb8z%2B5AY6ufTdP0Owgbq6gdAk8hQw%3D&reserved=0>.

--
You received this message because you are subscribed to a topic in the Google Groups "TopBraid Suite Users" group. To unsubscribe from this topic, visit https://groups.google.com/d/topic/topbraid-users/b4pARn09t3s/unsubscribe <https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroups.google.com%2Fd%2Ftopic%2Ftopbraid-users%2Fb4pARn09t3s%2Funsubscribe&data=04%7C01%7Ccburnett%40healthwise.org%7Ccde6d575eba949e3f95908d9e055bb5f%7Ccee5d4e942e548c28a033406fd5b9242%7C0%7C1%7C637787481106696623%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=5D41EYjh8Mba2NUflnNpNv8k5OL6rPCzG0xw1MnyjC8%3D&reserved=0>. To unsubscribe from this group and all its topics, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/topbraid-users/38344e6d-c2b1-bf0f-e5df-3f77435cdedc%40topquadrant.com <https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroups.google.com%2Fd%2Fmsgid%2Ftopbraid-users%2F38344e6d-c2b1-bf0f-e5df-3f77435cdedc%2540topquadrant.com%3Futm_medium%3Demail%26utm_source%3Dfooter&data=04%7C01%7Ccburnett%40healthwise.org%7Ccde6d575eba949e3f95908d9e055bb5f%7Ccee5d4e942e548c28a033406fd5b9242%7C0%7C1%7C637787481106696623%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=08dGAeKPyEHQFQI0U8K7y26bxhN9yYgqwdZg7z6nTlA%3D&reserved=0>.

--
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 on the web visit https://groups.google.com/d/msgid/topbraid-users/MWHPR19MB1598DD7C579AE45BF0DD6679B7219%40MWHPR19MB1598.namprd19.prod.outlook.com <https://groups.google.com/d/msgid/topbraid-users/MWHPR19MB1598DD7C579AE45BF0DD6679B7219%40MWHPR19MB1598.namprd19.prod.outlook.com?utm_medium=email&utm_source=footer>.

--
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 on the web visit 
https://groups.google.com/d/msgid/topbraid-users/e54309fb-8add-bbe6-4d2e-8f38e2fe4ae2%40topquadrant.com.

Reply via email to