The specification isn't clear about what an implementation should do if a shape has multiple lists of logical constraint components of the same type. The following example could be interpreted as
(shapeA || shapeB) && (shapeC || shapeD)
shapeA || shapeB || shapeC || shapeD
ex:shapeRoot a sh:NodeShape;
sh:or
(ex:shapeA ex:shapeB),
(ex:shapeC ex:shapeD).
It looks like most implementations use option 2, but it should be written more clearly in the specification.
All constraints in SHACL eventually get ANDed for execution, i.e. the correct interpretation is 1. The target nodes need be A or B, and then also C or D.
The specification isn't clear about what an implementation should do if a shape has multiple lists of logical constraint components of the same type. The following example could be interpreted as
It looks like most implementations use option 2, but it should be written more clearly in the specification.