Hi Jeremy,
Yes, sure, fields have always been possible for such use, also in classic TW.
The power of such semantics would however lie in how it would provide a standard for semantic modeling, something that isn't intrinsically clear with fields, e.g. basic methods that allow to leverage the power of such qualified tags, in fact, even "tag fields" or "tag slices" that work equivalently.
Now what do I mean by that?
Obvious, the first and most simple usecase were to make use of it in the list macro, e.g. something like...
<<list [tag[task]] [by[owner]]>>
<<list [by[parent]]>>
Which could result in a grouped output of tasks by owner or children by parents.
Another example would be some sort of list query, e.g...
<<list [tag[task]] [where[owner=John]]>>
<<list [where[parent=John]]>>
And further tools that would allow to change semantic tags between equivalent members of a qualified set, e.g.
Change [[John]](owner) to [[Jane]](owner)... while constraining the *initially* available options to all those that are...
-- either explicitly tagged as [[owner]]
-- or implicitly already used as [[Jane]](owner) or [[John]](owner) throughout the wiki
...but, of course, also giving a generic selection that would hence turn any other tiddler into a semantically qualified "owner", explicitly or implicitly.
These were a few quick examples of the top of my head of how working with such semantic qualifiers would signitficantly enhance modeling abilities and most importantly, reveal implicit relationships for programatic exploration that don't require the code to know that a "parents" field actually defines a relationship.
So, the overall reason for enhancing tags this way would be that tags today are, perhaps for good reasons, too dumb.
~
However, of course, this could definetely be modeled via fields as well. An approach might be to turn a generic field into "semantic field", i.e. one defining a relationship at any tiddler in terms of a bracketedList ...upon which to build further functionality.
This could somewhat easilby be achieved by having a SemanticFieldList tiddler or setting which defines all fields that are to be interpreted as both semantic qualifiers and tiddlers and, most importantly, would yield in *displaying* the field and it's information equally as prominent as tags.
For example, if I defined [[SemanticFieldList]] as a simple breacketedList of...
[[parent]]
[[owner]]
Then UI would then automatically...
* display such semantic data values at given tiddler more prominently in a "semantic fields" block
* make the semantic field names clickable, linking to tiddlers that detail their function
* provide standard lists below such semantic field-tiddlers with qualified members
* allow for managing the values of semantic relations in the way described before
* correct any existing semantic relations upon changing tiddler names (!)
Come to think of it, the field-approach seems a lot more elegant and extensible than perhaps to enhance tags. All in all, the goal would be to make establishing and managing semantic relations much easier than it is today in terms of general methods to introspect and change such relations.
Perhaps such a [[SemanticFieldList]] tiddler should rather be in the form of (pseudo) JSON, e.g...
parent : {max: 2,
info: "a parent of a person"
}
member : {info: "a member to a group"
}
owner : {
max: 1,
info: "the owner of a task"
for: [tag[task]]
selection: [tag[member]]
}
date-of-birth: {
type: date
}
In this way, the capabilities could be enhanced little by little, e.g. looking at the above owner definition the UI (or field validation) would only allow one owner to any tiddler, display the info "the owner of a task" as a tooltip or otherwise to that smenatic field being displayed, would perhaps only display this field as a semantic field *for* tiddlers tagged [[task]] and only allow those tiddlers for selection as owners that are tagged [[member]].
All of this starts to very much resemble something I had been pondering a while back yet never got to it...
http://xfieldsdev.tiddlyspace.com
Cheers, Tobias.