{
  "kind": "synthetic-only",
  "created": "2026-11-07",
  "testedPyshacl": "0.40.2",
  "testedRdflib": "7.6.0",
  "options": {
    "inference": "none",
    "advanced": false
  },
  "scope": "2017 SHACL direct IRI property set constraints on 8 independent synthetic graphs. No production authorization, identity merging, ordered lists or SHACL 1.2 conformance test.",
  "shapes": {
    "equals": "@prefix ex: <https://example.org/sets/> .\n@prefix sh: <http://www.w3.org/ns/shacl#> .\nex:EqualShape a sh:NodeShape ;\n  sh:targetNode ex:request ;\n  sh:property [\n    sh:path ex:expected ;\n    sh:equals ex:actual\n  ] .",
    "disjoint": "@prefix ex: <https://example.org/sets/> .\n@prefix sh: <http://www.w3.org/ns/shacl#> .\nex:DisjointShape a sh:NodeShape ;\n  sh:targetNode ex:request ;\n  sh:property [\n    sh:path ex:expected ;\n    sh:disjoint ex:actual\n  ] .",
    "requiredEquals": "@prefix ex: <https://example.org/sets/> .\n@prefix sh: <http://www.w3.org/ns/shacl#> .\nex:RequiredEqualShape a sh:NodeShape ;\n  sh:targetNode ex:request ;\n  sh:property [ sh:path ex:expected ; sh:minCount 1 ; sh:equals ex:actual ] ;\n  sh:property [ sh:path ex:actual ; sh:minCount 1 ] ."
  },
  "samples": [
    {
      "name": "identical",
      "data": "@prefix ex: <https://example.org/sets/> .\n@prefix sh: <http://www.w3.org/ns/shacl#> .\nex:request ex:expected ex:a, ex:b ; ex:actual ex:b, ex:a .",
      "expected": {
        "equals": true,
        "disjoint": false,
        "requiredEquals": true
      }
    },
    {
      "name": "partial-overlap",
      "data": "@prefix ex: <https://example.org/sets/> .\n@prefix sh: <http://www.w3.org/ns/shacl#> .\nex:request ex:expected ex:a, ex:b ; ex:actual ex:a, ex:c .",
      "expected": {
        "equals": false,
        "disjoint": false,
        "requiredEquals": false
      }
    },
    {
      "name": "disjoint",
      "data": "@prefix ex: <https://example.org/sets/> .\n@prefix sh: <http://www.w3.org/ns/shacl#> .\nex:request ex:expected ex:a ; ex:actual ex:b .",
      "expected": {
        "equals": false,
        "disjoint": true,
        "requiredEquals": false
      }
    },
    {
      "name": "missing-actual",
      "data": "@prefix ex: <https://example.org/sets/> .\n@prefix sh: <http://www.w3.org/ns/shacl#> .\nex:request ex:expected ex:a, ex:b ; ex:actual ex:a .",
      "expected": {
        "equals": false,
        "disjoint": false,
        "requiredEquals": false
      }
    },
    {
      "name": "extra-actual",
      "data": "@prefix ex: <https://example.org/sets/> .\n@prefix sh: <http://www.w3.org/ns/shacl#> .\nex:request ex:expected ex:a ; ex:actual ex:a, ex:b .",
      "expected": {
        "equals": false,
        "disjoint": false,
        "requiredEquals": false
      }
    },
    {
      "name": "both-empty",
      "data": "@prefix ex: <https://example.org/sets/> .\n@prefix sh: <http://www.w3.org/ns/shacl#> .\n",
      "expected": {
        "equals": true,
        "disjoint": true,
        "requiredEquals": false
      }
    },
    {
      "name": "repeated-input",
      "data": "@prefix ex: <https://example.org/sets/> .\n@prefix sh: <http://www.w3.org/ns/shacl#> .\nex:request ex:expected ex:a .\nex:request ex:expected ex:a .\nex:request ex:actual ex:a .",
      "expected": {
        "equals": true,
        "disjoint": false,
        "requiredEquals": true
      }
    },
    {
      "name": "same-label-different-iri",
      "data": "@prefix ex: <https://example.org/sets/> .\n@prefix sh: <http://www.w3.org/ns/shacl#> .\nex:request ex:expected ex:a ; ex:actual ex:b .\nex:a <http://www.w3.org/2000/01/rdf-schema#label> \"Reviewer\" .\nex:b <http://www.w3.org/2000/01/rdf-schema#label> \"Reviewer\" .",
      "expected": {
        "equals": false,
        "disjoint": true,
        "requiredEquals": false
      }
    }
  ]
}
