@prefix famrel: .
@prefix my_datamodel: .
@prefix rdf: .
@prefix schema: .
@prefix sh: .
@prefix xsd: .
my_datamodel:HasAliases a sh:NodeShape ;
sh:closed true ;
sh:description "A mixin applied to any class that can have aliases/alternateNames" ;
sh:ignoredProperties ( rdf:type ) ;
sh:property [ sh:order 0 ;
sh:path my_datamodel:aliases ] ;
sh:targetClass my_datamodel:HasAliases .
my_datamodel:NamedThing a sh:NodeShape ;
sh:closed true ;
sh:description "A generic grouping for any identifiable entity" ;
sh:ignoredProperties ( rdf:type ) ;
sh:property [ sh:maxCount 1 ;
sh:order 0 ;
sh:path schema:identifier ],
[ sh:maxCount 1 ;
sh:order 1 ;
sh:path schema:name ],
[ sh:maxCount 1 ;
sh:order 3 ;
sh:path schema:image ],
[ sh:maxCount 1 ;
sh:order 2 ;
sh:path schema:description ] ;
sh:targetClass my_datamodel:NamedThing .
my_datamodel:Registry a sh:NodeShape ;
sh:closed true ;
sh:description "Top level data container" ;
sh:ignoredProperties ( rdf:type ) ;
sh:property [ sh:class schema:Person ;
sh:nodeKind sh:IRI ;
sh:order 0 ;
sh:path my_datamodel:persons ],
[ sh:class schema:Organization ;
sh:nodeKind sh:IRI ;
sh:order 1 ;
sh:path my_datamodel:organizations ] ;
sh:targetClass my_datamodel:Registry .
my_datamodel:Relationship a sh:NodeShape ;
sh:closed true ;
sh:ignoredProperties ( rdf:type ) ;
sh:property [ sh:maxCount 1 ;
sh:order 0 ;
sh:path ],
[ sh:maxCount 1 ;
sh:order 3 ;
sh:path my_datamodel:type ],
[ sh:maxCount 1 ;
sh:order 2 ;
sh:path my_datamodel:related_to ],
[ sh:maxCount 1 ;
sh:order 1 ;
sh:path ] ;
sh:targetClass my_datamodel:Relationship .
schema:Organization a sh:NodeShape ;
sh:closed true ;
sh:description "An organization such as a company or university" ;
sh:ignoredProperties ( rdf:type ) ;
sh:property [ sh:maxCount 1 ;
sh:order 1 ;
sh:path my_datamodel:founding_date ],
[ sh:maxCount 1 ;
sh:order 5 ;
sh:path schema:description ],
[ sh:order 2 ;
sh:path my_datamodel:aliases ],
[ sh:maxCount 1 ;
sh:order 6 ;
sh:path schema:image ],
[ sh:maxCount 1 ;
sh:order 0 ;
sh:path my_datamodel:mission_statement ],
[ sh:maxCount 1 ;
sh:order 3 ;
sh:path schema:identifier ],
[ sh:maxCount 1 ;
sh:order 4 ;
sh:path schema:name ] ;
sh:targetClass schema:Organization .
schema:Person a sh:NodeShape ;
sh:closed true ;
sh:description "A person (alive, dead, undead, or fictional)." ;
sh:ignoredProperties ( rdf:type ) ;
sh:property [ sh:maxCount 1 ;
sh:order 6 ;
sh:path schema:identifier ],
[ sh:maxCount 1 ;
sh:order 8 ;
sh:path schema:description ],
[ sh:maxCount 1 ;
sh:order 9 ;
sh:path schema:image ],
[ sh:maxCount 1 ;
sh:order 0 ;
sh:path schema:email ;
sh:pattern "^\\S+@[\\S+\\.]+\\S+" ],
[ sh:maxCount 1 ;
sh:maxInclusive 999 ;
sh:minInclusive 0 ;
sh:order 2 ;
sh:path my_datamodel:age_in_years ],
[ sh:class schema:PostalAddress ;
sh:description "The address at which a person currently lives" ;
sh:maxCount 1 ;
sh:nodeKind sh:BlankNode ;
sh:order 3 ;
sh:path my_datamodel:current_address ],
[ sh:class my_datamodel:FamilialRelationship ;
sh:nodeKind sh:BlankNode ;
sh:order 4 ;
sh:path my_datamodel:has_familial_relationships ],
[ sh:maxCount 1 ;
sh:order 1 ;
sh:path schema:birthDate ],
[ sh:maxCount 1 ;
sh:order 7 ;
sh:path schema:name ],
[ sh:order 5 ;
sh:path my_datamodel:aliases ] ;
sh:targetClass schema:Person .
schema:PostalAddress a sh:NodeShape ;
sh:closed true ;
sh:ignoredProperties ( rdf:type ) ;
sh:property [ sh:maxCount 1 ;
sh:order 1 ;
sh:path my_datamodel:city ],
[ sh:maxCount 1 ;
sh:order 2 ;
sh:path my_datamodel:postal_code ],
[ sh:maxCount 1 ;
sh:order 0 ;
sh:path my_datamodel:street ] ;
sh:targetClass schema:PostalAddress .
my_datamodel:FamilialRelationship a sh:NodeShape ;
sh:closed true ;
sh:ignoredProperties ( rdf:type ) ;
sh:property [ sh:maxCount 1 ;
sh:order 1 ;
sh:path ],
[ sh:maxCount 1 ;
sh:order 0 ;
sh:path ],
[ sh:in ( famrel:01 famrel:02 famrel:01 ) ;
sh:maxCount 1 ;
sh:minCount 1 ;
sh:order 3 ;
sh:path my_datamodel:type ],
[ sh:maxCount 1 ;
sh:order 2 ;
sh:path my_datamodel:related_to ] ;
sh:targetClass my_datamodel:FamilialRelationship .