Relationships can have properties as well

I was asked a very good question by the people who are going to be using our “research-output” platform. They want to be able to capture information like this: “Paper P was authored by Author A while A was a Microsoft employee”. The use case is obvious. In Microsoft, like any other organization, people come and go. It is important to be able to capture whether a researcher’s stored work was undertaken while they were employees of the company.

Our “research-output” platform does not support this type of information explicitly. This is because we are not building an identity system. Instead, we expect that information about people are stored somewhere else (e.g. Active Directory, LDAP, etc.). Applications built on top of us make use of our API to capture the necessary information so that they can relate the information in our store with that residing elsewhere (through the use of URIs for example). So how can we support the above use case? Well, there are few approaches. Please allow me to expand on my favorite one.

As I said in my Microsoft and “Research-Output” Repositories, our “research-output” platform stores relationships between resources. Also, I suggested that our model is extensible. Additional information can be attached to a relationship. For example, a triple of the form

    <Subject, Predicate, Object>
  

can have additional information associated with it in the form of name-value pairs (any number). This is our way of enabling developers of associating extra information for a relationship. In our initial release, the ‘value’ in the pair can only be a string. We are going to think how we can support typed values as well (not very easy).

    <Subject, Predicate, Object, [<name, value>]*>
  

The above scenario can now be represented through the following tuple:

    <Paper P, Authored By, Author A, <While at Microsoft, True>>
  

Another scenario is the ordering of authors. Imagine you have the following triples:

    <Paper P, Authored By, Author A> 
<Paper P, Authored By, Author B>
  

What is the order of the authors? We can add a name-value pair to indicate the relative ordering between Objects when the Subject and the Predicate are the same.

    <Paper P, Authored By, Author A, <order, 2>, <While at Microsoft, True>> 
<Paper P, Authored By, Author B, <order, 1>, <While at Microsoft, False>>
  

Actually, we thought that the ordering scenario was common enough that we made it a typed property of our “Relationship” class.

Comments feedback are always more than welcome.

Recent Posts

The Beginning of CVOYA

There’s a unique energy that comes with starting something new — a blend of excitement,…

3 weeks ago

Enhancements in Graph Model: Dynamic Entities & Full-Text Search

As I continued work on BrainExpanded and its MCP service, I came to realize that…

4 months ago

GraphModel: A .NET Abstraction for Graphs

Just over a month ago, I published "Playing with graphs and Neo4j". Back then, it…

5 months ago

Playing with graphs and neo4j

After my initial implementation of some BrainExpanded-related ideas on top of dgraph using its GraphQL…

6 months ago

A Graph Model DSL

Say hello to the Graph Model Domain Specific Language (GMDSL), created with the help of…

6 months ago

BrainExpanded – Web app and Data Sources

As I wrote in previous posts, the manual recording of memories for BrainExpanded is just…

7 months ago