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" }
}
]
}
}
}
}