"Soft Linking" is the idea of being able to mention another note in a vault without creating a line in the graph view or showing up in the referent's backlinks.
The use case is specifically for disambiguation like `not to be confused with X`, or for examples where linking doesn't make sense `this technique is used by note Y`.
It is useful to have a an easy way to navigate between them for ergonomics, but it is not ideal for that navigation aid to pollute the graph.
# Implementation
I have started ([[2023-04-26]]) generating UUIDs on every new note using the Templater plugin and my [[Z. Preset - Default]] template. This template sets the UUID property in the frontmatter, as well as adding the UUID to the list of aliases as note creation.
# Techniques
## Inline Dataview Link
Simply using an inline Dataview query to generate a link to a named note prevents backlinks and graph view pollution.
```markdown
Soul is unrelated to the `dv:link("SOUL")` programming language.
```
>[!NOTE] Rendered Example
> Soul is unrelated to the `dv:link("SOUL")` programming language.
The downside is that is the linked note name changes, then the link breaks. The upside is that it is very simple to implement.
## UUID
>[!ERROR] Broken
> Inline dataview with a link function to an alias as shown below is currently [broken](https://github.com/blacksmithgu/obsidian-dataview/issues/2041).
Instead of specifying a note by name, UUIDs would be generated on the notes (ideally all notes), and then linked by that instead.
This still requires dataview, but is resilient against note name changes.
```
Soul is unrelated to the `dv:link("6ccc558f-4fe9-4dea-b8ce-2a0226aa75d5")` programming language.
```
>[!NOTE] Rendered Example
> Soul is unrelated to the `dv:link("6ccc558f-4fe9-4dea-b8ce-2a0226aa75d5")` programming language.
### Using DataviewJS Code Block
```js
dv.span(dv.pages().where(p => p.UUID == '6ccc558f-4fe9-4dea-b8ce-2a0226aa75d5').file.link[0])
```
```dataviewjs
var page = dv.pages().where(
p => p.UUID == '6ccc558f-4fe9-4dea-b8ce-2a0226aa75d5'
).file.link[0]
var callout = dv.el("div", "", { cls: "callout" })
var title = dv.el("div", "", { cls: "callout-title", container: callout })
var header = dv.el("div", "Rendered Example", { cls: "callout-title-inner", container: title })
var content = dv.el("div", "", { cls: "callout-content", container: callout });
var p = dv.el("p", "", { container: content });
dv.span("Soul is unrelated to the ", { container: content });
dv.span(page, { container: content });
dv.span(" programming language.", { container: content });
```
(example looks weird due to an [issue](https://forum.obsidian.md/t/live-preview-support-code-blocks-in-quotes/30783) with Obsidian's Markdown parser which prevents code blocks from working inside quotes)
### Using DataviewJS Inline
```js
dv.pages().where(p => p.UUID == '6ccc558f-4fe9-4dea-b8ce-2a0226aa75d5').file.link
```
>[!NOTE] Rendered Example
> Soul is unrelated to the `dvjs:dv.pages().where(p => p.UUID == '6ccc558f-4fe9-4dea-b8ce-2a0226aa75d5').file.link` programming language.
# Original Thread
I originally asked about this on the official Obsidian Discord. Thread edited down to reduce forks and false starts.
```chat
{}
[me=purple, Y=indigo, Z=red]
> me | I did find myself wishing for an "anti-link" for all the situations where I need to explain "these things seem similar but aren't related".
< Y |  well you could make a note about these things and link that note in both subjects.
> me | Right now I have just "X, not to be confused with Y" or similar. So if I end up on the wrong one I can easily get to the other. But by linking them, they become associated in the graph view etc
< Y | makes sense
> me | Maybe using the button plugin would allow me to jump between notes without cross linking them 🤔
< Y | you could also use dataview with a simple inline code like `=link(name)`
> me | Oh like inline?
> Yeah interesting!
> The only downside of these strategies is it also breaks the rename functionality, so they could get out of sync, but I think it's a worthy tradeoff
< Z | You could implement a UID and link based on that with a bit of effort.
< Y | it is just
< `$=dv.span(dv.pages("").where(p => p.UUID === '4258630a-102c-40cb-baf1-2e02a5048686').file.link)`
< Z | Oh true, I forgot that dataview's MD output has a lot of nice auto-format features
< Actually span creates a list
<  
< Link does not
> me | That's pretty cool, is there something built in to do UUIDs or would I need to hand roll that?
> I can generate them, I just meant if there was some kind of thing like blockId that could uniquely identity a note besides it's name
< Z | Templater to the rescue ^
```
```yaml
---
UUID: 3049c619-c653-4bea-a5d7-3a5377d178eb
---
```