Here there are my understandings so far of data structures available on Logseq, feel free to comment and eventually correct me:
- More than the “pages are collections of blocks” I like “pages are blocks with a name”.
- We have indentation to create hierarchies between blocks.
- Indentation of blocks can create hierarchies between pages too, the trick is using blocks containing only a reference to a page:
- [[Parent]] - [[Child]] - [[Teddy]] - Some text (eventually) - Every page mentioned (parent, child, teddy) will have a backlink to the others at the bottom, something like:
[[Parent]] > [[Child]] > [[Teddy]] - And we can have as many hierarchies as we like mentioning the same page. Here there is an example with
[[Mathematics]]page serving as an “index” of two different hierarchies:Mathematics - Branches - [[Algebra]] - [[Linear Algebra]] - [[Group Theory]] - ... - [[Geometry]] - [[Euclidean Geometry]] - [[Topology]] - ... - Resources - [[Theorems]] - [[Linear Algebra]] - [[Topology]] - ... - [[Definitions]] - [[Algebra]] - ... - Pages names can create hierarchies with
[[parent/child/teddy]]syntax and these are better described as “namespaces”.- In programming languages and informatics we use the concept of namespaces to avoid ambiguity.
- For example
[[Fruits/Apple]]and[[Companies/Apple]], but a case like this, with almost only one element in common between[[Companies]]and[[Fruits]]doesn’t justify the introduction of these hierarchies that weighten the syntax. This particular example is better solved by two pages like these:[[Apple (Fruit)]]and[[Apple (Company)]](Wikipedia uses this method). If one want to display just “apple” or in general replace the page name with something else when mentioning it, there is the[]()syntax. - So what are use cases for namespaces? The cases with huge overlap of childs names between different parents, for example:
- Books’ chapters, lessons numbers:
[[My New Book Title/Chapter 1]]
[[Another Book/Chapter 1]]
[[An Online Course/Lesson 1]]
[[An Online Course/Lesson 2]] - They can be more compact:
[[My New Book Title/1]]
[[Another Book/1]]
[[An Online Course/1]]
[[An Online Course/2]] - The children names (in these case just the numbers 1, 2, …) makes sense only if associated with a parent page.
- But remember: the children are pages and it makes sense to create them only if you want to mention them using their names somewhere else (pages are blocks with a name…). Otherwise they can just be indented blocks:
and one can still browse them individually (by clicking on children’s bullet points), so no need to turn children into pages withParent (page title) - Child 1 - lorem ipsum dolor sit amet - ... - Child 2 - amet sit dolor ipsum lorem - ...[[parent/child]]syntax if one don’t need to use that syntax to reference them. - Another use case for namespaces could be (I’m still experimenting with it) a quick way to browse queries:
-
[[Theorems]]contains a query listing all pages/blocks with a property liketype:: theorem
[[Geometry/Theorems]]contains a query listing that does the same withtype:: theoremandarea:: geometry
[[Theorems/Geometry]]does exactly the same but this way I can use namespaces’ “hierarchy” section at the bottom of pages to quickly browse them:Hierarchy [[Geometry]] > [[Theorems]] [[Geometry]] > [[Definitions]] Hierarchy [[Theorems]] > [[Geometry]] [[Theorems]] > [[Algebra]] - This use case is a almost workaround for the lacking UI/UX of queries though. If there was a quick way to toggle filters to queries this hack could be useless.
-
- Books’ chapters, lessons numbers:
