PREFIX sh: <http://www.w3.org/ns/shacl#>
PREFIX shui: <http://www.w3.org/ns/shacl-ui/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

shui:ScoreShape a sh:NodeShape ;
    sh:targetClass shui:WidgetScore ;
    sh:property [
        sh:path shui:widget ;
        sh:minCount 1 ;
        sh:maxCount 1 ;
        sh:nodeKind sh:IRI ;
        sh:message "A Widget Score must have exactly one shui:widget" ;
    ] ;
    sh:property [
        sh:path shui:score ;
        sh:minCount 1 ;
        sh:maxCount 1 ;
        sh:or (
            [ sh:datatype xsd:decimal ]
            [ sh:datatype xsd:integer ]
        ) ;
        sh:message "A Widget Score must have exactly one shui:score with datatype xsd:decimal or xsd:integer" ;
    ] ;
    sh:property [
        sh:path shui:dataGraphShape ;
        sh:nodeKind sh:BlankNodeOrIRI ;
        sh:message "A Widget Score's dataGraphShape must reference a valid node" ;
    ] ;
    sh:property [
        sh:path shui:shapesGraphShape ;
        sh:nodeKind sh:BlankNodeOrIRI ;
        sh:message "A Widget Score's shapesGraphShape must reference a valid node" ;
    ] .

shui:AcceptMatcherShape a sh:NodeShape ;
    sh:targetClass shui:WidgetAcceptMatcher ;
    sh:property [
        sh:path shui:widget ;
        sh:minCount 1 ;
        sh:maxCount 1 ;
        sh:nodeKind sh:IRI ;
        sh:message "A Widget Accept Matcher must have exactly one shui:widget" ;
    ] ;
    sh:property [
        sh:path shui:score ;
        sh:maxCount 0 ;
        sh:message "A Widget Accept Matcher must not have a shui:score" ;
    ] ;
    sh:property [
        sh:path shui:dataGraphShape ;
        sh:nodeKind sh:BlankNodeOrIRI ;
        sh:message "A Widget Accept Matcher's dataGraphShape must reference a valid node" ;
    ] ;
    sh:property [
        sh:path shui:shapesGraphShape ;
        sh:nodeKind sh:BlankNodeOrIRI ;
        sh:message "A Widget Accept Matcher's shapesGraphShape must reference a valid node" ;
    ] .