@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix pm: <http://example.org/pimasae/ontology#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

pm:AgentShape a sh:NodeShape ;
  sh:targetClass pm:Human, pm:Naga, pm:Rekon, pm:Dokkaebi,
                 pm:Nation, pm:House, pm:Military, pm:Faction, pm:Settlement ;
  sh:property [ sh:path rdfs:label ; sh:minCount 1 ; sh:maxCount 1 ; sh:datatype rdf:langString ] ;
  sh:property [ sh:path pm:description ; sh:minCount 1 ; sh:maxCount 1 ] .

pm:RelationShape a sh:NodeShape ;
  sh:targetClass pm:RelationAssertion ;
  sh:property [ sh:path pm:subject ; sh:minCount 1 ; sh:maxCount 1 ; sh:nodeKind sh:IRI ] ;
  sh:property [ sh:path pm:object ; sh:minCount 1 ; sh:maxCount 1 ; sh:nodeKind sh:IRI ] ;
  sh:property [ sh:path pm:predicate ; sh:minCount 1 ; sh:maxCount 1 ; sh:class owl:ObjectProperty ] ;
  sh:property [ sh:path pm:spoiler ; sh:minCount 1 ; sh:maxCount 1 ; sh:datatype xsd:boolean ] .

pm:RelationSubjectIsCharacter a sh:NodeShape ;
  sh:targetObjectsOf pm:subject ;
  sh:or ( [ sh:class pm:Human ] [ sh:class pm:Naga ] [ sh:class pm:Rekon ] [ sh:class pm:Dokkaebi ] ) .
