How do you compose pages of other pages?

- notes about [[Android]] [[Developer]]
  - related to [[iOS]] (1)
  - notes about [[Logseq]] (2)

This block contains facts about an Android developer. I would like to express, that both [[Android]] and [[Developer]] belong together, like a page composed of more atomar pages. But now query (and [[iOS]] [[Developer]]) returns the block from (1) as well, which I don’t want here. Some solutions with their own limitations:

1. Create new page [[Android Developer]]:

- notes about  [[Android Developer]]
  - related to [[iOS]] (1)

Cons:

  • separate page and markdown file
  • Naming is one of the hardest things™
    • Need to manually repeat names for existent pages Android and Developer
    • redundant and ambiguous names for Android Developer and Developer
    • If these change, page name Android Developer gets outdated.
  • makes queries harder
    • Before, (and [[Logseq]] [[Android]] [[Developer]]) worked to find block (2)
    • does not work with [[Android developer]].

2. Create namespace with [[Android/Developer]]

Cons:

  • similar to first solution, does not solve my case
  • Namespace misuse: Android has no hierarchical relation to Developer
    • Android/Developer vs. Developer/Android vs. XXX/Developer vs. Developer/XXX?

3. Use advanced queries with :block/refs (*1)

Cons:

  • This is rather (potentially ambiguous) interpretation of block data
  • Better express intents right at the block source.
  • Need to use advanced queries, simple queries use OR / path-refs

(*1) :block/refs expresses, that both links need to be in same block, vs :block/path-refs


What do you prefer? And is there something I am missing? My gut says, alternative 1 together with graph queries would be the best solution.