Hi Gorny!
I wrote some of my data hierarchy in the format shown in the link as part of a brainstorming exercise. After doing so, I could see why I'd need to arrange it in a ragged hierarchy. I do have cases where some characters play a big role in the world without that role being tied to participation in an organization.
From a ProcessWire standpoint, I could see the information from the article and your post translating into the following::
Using the normal parent/child relationship in ProcessWire for pretty urls only (which'd make doing a site map really easy).
Current site has granularity levels of the following. World > (Location | Era | Cosmology) > Organization > Role > Species > Character . Each of these is probably going to be a template, though that's a lot of copypasting same fields from basic-page. But it'd also make querying specific data types easier. I'm still not entirely sure what to do with the basic-page template here since I still use that for many basic pages that just have information, but no need for granular relationship participation.
Example use cases I could think of with my own data include...
Some organizations have Organization > Role > Species and some have Organization > Role > _ > Character
Characters can be biologically classified by their Species > Character relationship. I'm not sure how wise it is to use a repeater with a single page reference and a text field to store additional variation information. Sometimes I just want to make bird characters without a wiki entry for each type of bird instead of grouping it into a broader biological category. Like having some ravens and peacocks, but filing raven and peacock characters under a generic talking animals page.
Some characters are notable across the world for a reason. So they may have a World > _ > _ > Role > _ > Character.
There are some Locations that aren't bound to a world. So they might not have a parent.
It might be useful in some cases to flip Role and Organization around. Like if a Location has a different relationship with an Organization, it might be useful to have a Location > Role > Organization role that reads "Enemy" and another that reads "Ally" for those role nodes.
Modeling multiple parents for each leaf by the following...
A Page Reference field for the worldbuilding data type that's just "parents", where all worldbuilding page template types are valid parents. Sloppy visually, but, it works?
A Page Reference field for each type of worldbuilding page template that can be a valid ragged hierarchy parent for a page. Might be a lot of field overhead though, but that's probably better for form readability.
After modeling the multiple parentage, if I understand how to model this in PW with the given available tools, a few other things I could do with this are...
A character page can query what bloodline they have by checking the Species > Character, as mentioned before.
A character can list specific roles they have for organizations by checking for Organization > Role > Character.
A character can list organizations they participate in, but don't have a chain of command role by checking their direct Organization parent.
Character specific roles could simply have no parent or World parents according to the page reference fields, but in the page tree could be stored directly under the character.
Organizations can list all members that don't have a role by checking for no Organization > Role > Character relationships, but there being an Organization > _ > Character relationship.
Chain of commands in organizations can be handled with nested Role relationships with the rootmost Roles being direct children of the Organization.
If there's anything I missed from my understanding that I'd need to consider, please let me know.