@prefix dash: <http://datashapes.org/dash#> .
@prefix ex: <http://example.com/ns#> .
@prefix mf: <http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#> .
@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 sht: <http://www.w3.org/ns/shacl-test#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

ex:ListShape
  rdf:type sh:NodeShape ;
  sh:uniqueMembers true ;
  # Satisfies all constraints
  sh:targetNode ex:list0, rdf:nil ;
  # Violates uniqueMembers constraint
  sh:targetNode ex:list1, ex:notAList ;
.

ex:list0
  rdf:first 1 ;
  rdf:rest ( 2 ) .

ex:list1
  rdf:first 1 ;
  rdf:rest ( 2 1 2 2 ) .

<>
  rdf:type mf:Manifest ;
  mf:entries (
      <uniqueMembers-001>
    ) ;
.

<uniqueMembers-001>
  rdf:type sht:Validate ;
  rdfs:label "Test of sh:uniqueMembers on node shape 001" ;
  mf:action [
      sht:dataGraph <> ;
      sht:shapesGraph <> ;
    ] ;
  mf:result [
      rdf:type sh:ValidationReport ;
      sh:conforms "false"^^xsd:boolean ;
      sh:result [
          rdf:type sh:ValidationResult ;
          sh:focusNode ex:list1 ;
          sh:resultSeverity sh:Violation ;
          sh:sourceConstraintComponent sh:UniqueMembersConstraintComponent ;
          sh:sourceShape ex:ListShape ;
          sh:value ex:list1 ;
          sh:detail [
            rdf:type sh:ValidationResult ;
            sh:focusNode ex:list1 ;
            sh:resultSeverity sh:Violation ;
            sh:sourceConstraintComponent sh:UniqueMembersConstraintComponent ;
            sh:sourceShape ex:ListShape ;
            sh:value 1 ;
          ], [
            rdf:type sh:ValidationResult ;
            sh:focusNode ex:list1 ;
            sh:resultSeverity sh:Violation ;
            sh:sourceConstraintComponent sh:UniqueMembersConstraintComponent ;
            sh:sourceShape ex:ListShape ;
            sh:value 2 ;
          ]
        ] ;
      sh:result [
          rdf:type sh:ValidationResult ;
          sh:focusNode ex:notAList ;
          sh:resultSeverity sh:Violation ;
          sh:sourceConstraintComponent sh:UniqueMembersConstraintComponent ;
          sh:sourceShape ex:ListShape ;
          sh:value ex:notAList ;
        ] ;
    ] ;
  mf:status sht:approved ;
.
