Mentioning a predicate once says that other uses of it are errors.
<AuthorShape> { pub:authored @<ChapterShape>+ }
ShEx:
<Author1> pub:authored <Chapter1>, <Chapter2>, <SomeBlurb>, <#$%@#$%>.
SHACL:
<Author1> pub:authored <Chapter1>, <Chapter2>, <SomeBlurb>, <#$%@#$%>.
Mentioning it twice (multi-occurance) does the same.
<AuthorShape> { pub:authored @<ChapterShape>+, pub:authored @<BlurbShape> }
ShEx:
<Author1> pub:authored <Chapter1>, <Chapter2>, <SomeBlurb>, <#$%@#$%>.
SHACL:
<Author1> pub:authored <Chapter1>, <Chapter2>, <SomeBlurb>, <#$%@#$%>.
A property can be "EXTRA", meaning it's not policed.
<AuthorShape> EXTRA pub:authored { pub:authored @<ChapterShape>+, pub:authored @<BlurbShape> }
ShEx
<Author1> pub:authored <Chapter1>, <Chapter2>, <SomeBlurb>, <#$%@#$%>.
{ "type": "schema", "prefixes": {}, "shapes": { "http://a.example/IssueShape": { "type": "shape", "expression": { "type": "someOf", "expressions": [ { "type": "tripleConstraint", "predicate": "http://a.example/p1", "value": { "type": "valueClass" } }, { "type": "tripleConstraint", "predicate": "http://a.example/p2", "value": { "type": "valueClass" } } ] } } } }