USD Relationships can point to any valid path in a USD stage's namespace. But can a Relationship point to another Relationship? Well, a Relationship is just a Property on a Prim. So the answer is: yes, of course!
In the USD documentation, the process of having one Relationship point to another Relationship which points to another is called "Relationship Forwarding". If you combine Relationships with VariantSets, you can create more complicated forwarding schemes, like a multiplexer or a a de-multiplexer.
In this folder, destination_forwarding is an example of a multiplexer because it shows how to make a single Relationship input point to one of multiple targets. And source_forwarding is an example of a de-multiplexer because it shows how the user can narrow multiple target inputs into a single output target.
pxr::SdfPathVector targets;
stage.GetPrimAtPath("/SomePrim").GetRelationship("some_relationship").GetForwardedTargets(&targets);
stage.GetPrimAtPath("/SomePrim").GetRelationship("some_relationship").GetForwardedTargets()
While reading through the USD documentation, it makes several mentions of a "Composition Compendium" and even says "We will work through this example in the USD reference manual."
To my knowledge, neither references exist. So for now, I figured I'd make my own reference.
https://graphics.pixar.com/usd/docs/api/class_usd_relationship.html https://graphics.pixar.com/usd/docs/api/class_usd_relationship.html#aebfc7f75593e419ff680ca3ed3d7c433