While I’ve been working with JSON parallels I’ve come to realize our approach is seriously flawed, or at least very limited and we’re kind of bumping into that limit.
What we’re dealing with and want to define is fundamentally relationships between suttas. Our current methodology is only able to deal with symmetrical relationships. If A is a full parallel of B, then B is a full parallel of A. If X is a partial parallel of A, then A is a partial parallel of X. And that’s okay if symmetrical relationships are all we want. But I reckon it’s not all we want.
The idea of the set can deal just fine with symmetrical relationships, the set [A, B, C] means that A, B and C are all full parallels of each other, we can say that are all equal partners in the parallel relationship, none of them are in the center of it.
But how on Earth can that deal with asymmetrical relationships? It simply can’t! In an asymmetrical relationship we don’t just have a bunch of objects hanging out together, we have an object and a subject.
I’ll just make up a concrete but possibly useful example for someone studying suttas: “Mentions”. From time to time, a sutta is mentioned by name in another sutta. So we can express this by saying “A mentions B” and this is a perfect example of an asymmetrical relationship, If A mentions B, it doesn’t stand to reason and is practically an impossibility that B mentions A (one of them had to come first, after all!). But this relationship can be expressed in an equivalent inverse form: “B is mentioned in A” (in grammarian language, I guess it’s like active vs passive)
But along with relationships like “mentions” there are plenty of parallel-centric concepts, like one sutta being an abridged version of another, such a relationship is also clearly asymmetrical. One sutta is the abridged one, the other the unabridged. Or one sutta being a fragment and the other complete.
So that is issue #1: We have symmetrical relationships which are handled gracefully by sets, and we have asymmetrical relationships which really cannot be handled by our sets model at all.
The second thing is looking at it from the user perspective (in this case, the person defining the relationships). Sometimes that person thinks “I want to define a group of suttas which are parallel to each other”, but other times they think “There is this important sutta, and I want to define relationships between this sutta and other suttas”. If you’re studying A, you probably also want to check out X, the latter case is not gracefully handled by the concept of “a group of suttas which are equal partners” because in the thought process of the person defining the relationship, one sutta really is taking center-stage, and we can say that is okay, that it’s fine to define relationships in the context of one sutta.
So what I see, is we need two basic forms. The first form is “group-centric”, and the second form is “sutta-centric”.
{
full_parallel: [A, B, G],
title: The Sutta on Foos,
abridged: B,
expanded: G,
see_also: [Q, X],
notes: "A, B and G are about foos. B appears to be an abridged purely doctrinal version of A. The doctrinal content of G is substantially identical, but with an extended narrative about a past life journey to the mystical land of foos, Q is about bars but the narrative structure is strikingly similar"
}
The above would define a group of parallels, by using the “full_parallel” key. You can further refine relationships by adding extra clauses, these relationships are with the group as a whole and not any individual member of the group per-se. The see_also applies to the parallel group as a whole as do notes. You can add a descriptive title which may be used in display.
A key like “full_parallel” would be special and act as the object of the entry or the “primary key”, others like “see_also” are what could be called “subordinate clauses”, they can’t define an entry by themselves (another subordinate might be “fragment” to include parallels which are only fragments). Asymmetrical relationships could only be defined by subordinate clauses. Other “primary keys” might be “cross_reference”, “verse_parallel” and such, they intrinsically define the relationship between two or more suttas.
{
sutta: A,
see_also: X,
mentions: [F, H],
notes:
}
The above would be the sutta-centric form, it’s not really any different to using parallel: [A]
but if we aren’t defining a parallel relationship we shouldn’t use the key “parallel”.
Note that the above could also be equally expressed by the inverse relationships, along the lines of:
{
sutta: X,
see_also: A
},
{
sutta: F,
mentioned_in: A
},
sutta: H,
mentioned_in: A
},
You might wonder, couldn’t we do something like this:
{
sutta: [F, H],
mentioned_in: [A]
}
Well we could. But it’s important to clearly distinguish between things being grouped together because they have a relationship with each other, and things being grouped together for convenience, the fact that F and H are both mentioned in A, does not imply that F and H have a special relationship with each other. This is one reason to use an explicitly meaningful key name like “full_parallel” if we really are defining a group of parallels, if we are merely grouping things for convenience another key could be used.
So anyway, what we end up with is a bunch of relationships and their inverse, the inverse relationships would be automatically generated in code.
A parallel_to B, B parallel_to A
A mentions B, B mentioned_in A
Now as for display, we have two basic options, the first is to digest the data down to a bunch of pair-wise relationships like the above and display them in a list like we already do.
The other way would be to try and preserve the parallel groups in display, so instead of just showing a list, the parallels page for A would show that it is part of a group of parallel suttas: A, B and G, it could show the title for that group and any notes for that group and any other relationships which pertain to that group (such as see also), after that would come any relationships unique to A.
If you go to the page for B, you’ll see exactly the same group your saw for A, followed by any special relationships unique to B.
This IMO is a superior approach, even if the relationships are ultimately digestible down to a huge number of pairwise relationships, the form the data is entered in should provide a strong hint on how to display it.
In fact ideally I would love to see each parallel group having its own URI, so parallel groups become promoted to things in their own right. You could go to a “tradition agnostic” page which is for the “Buddha’s life story” suttas, or parajika 1.
So in this post I’ve brought up two basic concepts for consideration:
-
The idea of supporting asymmetrical relationship or inequalities, clearly we can live without this feature, because we have so far, but it opens a whole host of possibilities. Along with my example of “mentions”, things like specifying that A is an expanded version of B or that C is a fragment - these are simple, well defined and easily understood concepts that can’t be represented with our current data model.
-
The idea of promoting parallel groups to “first class citizens” with special display logic and possibly a URI.