It's ok; you can use author and article as ID even if they appear
multiple times. First do the obvious thing, creating items for the
exhibit corresponding to the authors and articles (using author name as
id for the authors, and article title as id for the articles):
{type: "Author", id: "name of author", affiliation: "affiliation of
author"...}
{type: "Article", id: "title of article", year: "year of publication", ....}
Finally, take your relationship table. Suppose it has a row (authorX,
articleY)
add another fragment of json to the collection of "items":
{id: "articleY", author: "authorX"}
Do this for every row. This will accomplish what you want.
To understand what is going on, note how exhibit will interpret these
final fragments from the relationship table. It will say "ok, this
person is specifying an item whose id is articleY and has an author
property with value authorX. But I already know about an item whose id
is articleY---namely, the one that was defined at the beginning of type
"Article". So, I'm not going to create a new item with id articleY.
Instead, I will _merge_ the attributes of the new item (in particular,
the author relationship to authorX) into the already existing item. And
if that item already has a value of the author property, because I
already saw an author of that article, then I will _add_ authorX as an
additional value for the now-multivalued author property on articleX."