Information clustering

I would like to propose a concept of scopes for SilverBullet. Wouldn’t it be nice to have scoped pages, tags, and attributes?

The primary idea is to enable the distinction between separate scopes, forming clusters of information within the whole. Each scope would not have a definitive root. Instead it would function as a graph that connects branches or leaves of the global root, effectively linking parts of the tree together and allowing inheritance of the scope from these points down the tree.

All tags and attributes would continue to belong to the global (default, implicit, root) scope as they currently do. But they would also be available within specified scopes when explicitly requested. This would allow users to, e.g., search for tags exclusively within designated scopes and interact with pages, tags, and attributes in the same manner as they do in the global scope. Users could generate a list of all pages tagged in a specific manner within a particular scope, for instance. If no scope is specified for an action, the global scope (which would remain the same as it is now) would be implicitly used, thus maintaining backward compatibility with the current behaviour is possible.

More ways to achieve something close to this certainly exist - tag inheritance, hierarchical tags, some form of classification etc. But I somehow like the idea of loose scoping which allows for the grouping of tree components into clusters of information within the entire space. I sort of feel it matches notes-taking and similar tasks quite well. What is your opinion on this topic?

Additional idea: references between pages form clusters of information naturally. Apart from this manual clustering I propose it would be nice to detect already formed clusters and let users to assign custom names (scopes) to them so that they become easily distinquished.

I always like ideas like this :slight_smile: But then the question is always: can we use existing mechanisms to achieve something like this already?

The first thing that jumps to mind is to use folders, or a folder-like convention. So everything in my personal scope to simply be prefixed with Personal/. This could be pages Personal/Tasks as well as tags, e.g. #Personal/InProgress. Attributes would perhaps be a bit awkward, but not sure those need to be scoped.

The first thing that jumps to mind is to use folders, or a folder-like convention. So everything in my personal scope to simply be prefixed with Personal/. This could be pages Personal/Tasks as well as tags, e.g. #Personal/InProgress.

Yes. I also have Personal/Tasks, Personal/Finance/Expenses etc. I can (and actually I do) use some sort of “hierarchical tagging” too. But that’s not what I mean. Consider the following (abstract-only, I lack fantasy this morning for some reason):

hier                     scope (remark)
------------------------ ---------------------------
A                        root
A/B                      foo  (set)
A/B/C                    foo  (inherited)
M                        bar  (set)
M/N                      bar  (inherited)
Q                        root
Q/R                      root (inherited)
Q/R/S                    bar  (set)
Q/R/S/T                  bar  (inherited)
Q/R/S/T/U                foo  (set), bar (inherited)
Z                        foo  (set)

Now, the foo cluster consists of the whole A tree and the Q/R/S/T/U and Z leaves; the bar cluster consists of the M tree and the Q/R/S tree. If I set [some: attribute] in the Q/R/S leaf than it would be accessible from the M tree as well, because it is in the same cluster. The some attribute will also be accesible from root (global/default) cluster. The some attribute would not be accessible from the foo cluster if not explicitely requested because foo it not a root cluster, but a sibling one. The same would apply for tags (accesible from the root cluster and from the one where it was used) and perhaps the other things as well (e.g., space styles, so that one could have blue background when in any of the foo page and green background when in any of the bar page).

Attributes would perhaps be a bit awkward, but not sure those need to be scoped.

It depends what you abuse attributes for. I am going to implement some calendrical functions, because I’d like to replace rem(1) (Remind) with SilverBullet as well (just waiting for the Lua scripting atm.) and then I think to abuse the attributes for it (e.g., [rem: Easter - 1 week] and all the rem attributes would be collected on a page showing the reminders (I only hope that would be duable, not sure yet, I am too new in SilverBullet’s wonder land). I would like exactly that to be clustered, for example.

Side note: I can live without scoped stylesheets and perhaps without scoped attributes and tags but then please, can we have some posibility to say “make this tag be inherited down the tree”? That would solve part of the problem effectively. Can we have normal #tags and inheritable, say, #!tags? Or whatever syntax you would prefer for it @zef . That would be splendid! Would that be hard to implement?