Tags should take arguments

Rather than being simple strings, tags on content should be able to take arguments. They can be positional arguments (trip(Boston, Kingsport) or smiles(Alice) on a photo), key-value properties (trip(from: Boston, to: Kingsport)), or an unordered set of nested tags (road{Kingsport, Boston} == road{Boston Kingsport}).

This will allow queries like smiles(Alice) smiles(Bob) to find all pictures where both Alice and Bob are smiling, trip(?, ?) to find all pictures from trips, and trip(?, Kingsport) to find all pictures from trips to Kingsport.

Tags like these do not need a predefined schema. Like normal tags today, they can, and likely should, be ad hoc by default.

See also

Tags: idea, information retrieval, my work, UI/UX.