Inverse Relations
According to Layer0 semantics, relations can have inverse relations. For the database and client this means that when claiming new statements (s, p, o)
using
WriteGraph.claim(Resource subject, Resource predicate, Resource object)
an inverse statement (o, inv(p), s)
will be automatically claimed into the database. Some statements are such that they tend to raise the degree of the resource (amount of incoming/outgoing relations) to very large numbers. The database is not built to efficiently handle such resources. One such relation is InstanceOf
which is a statement that pretty much each and every resource in the database has. It does not have an inverse relation, but considering it had one, here's what would happen. For example, for each L0.String
instance created an inverse statement would be added (L0.String, L0.HasInstance, :L0.String)
statement into the database, thereby enlarging the degree of statements of L0.String
. When working with larger databases this would most likely become a problem.
To make it possible to optimize this situation we provide the possibility to skip adding of inverse relations when claiming statements into the database by using
WriteGraph.claim(Resource subject, Resource predicate, Resource inverse, Resource object)
with a null
inverse relation argument to create the sensitive statements such as InstanceOf-relations.