What I am wanting to do is ensure that every property in a knowledge base comes from at least one source. I would like to ensure that every edge is spawned (or at least explained) by some event, like a "claim" or "measurement" or "birth." I'd like to rate on a scale the confidence that some property is correct, which could also be inherited from the source's confidence rating. Finally, I want to ensure that effective date(s) are known or able to be calculated for every edge and vertex. Is this spiraling into an impossibly large goal? I am not sure where to draw the line, but I do know that I need to be able to provide a source for all information.

My use case may help. The goal is to create a knowledge graph on drug use and experiences, populated with both user-generated data as well as info sourced from public data sets, such that every Dose links to: the affected User, the Drug ingested, the route of administration (ROA), and the amount taken. Users can also log experiences and effects as they notice them, so I would like to suggest common Effects for the Drug taken recently (still active), and I'd like to project the duration of action based on historical Doses (from the User, other users, and medical literature). Since this is medical data, I want everything to be in order, but I am not sure that this level of granularity is possible or desired. It is to me!

The reason for the temporal aspect (keeping track of times) is to show on a timeline what drugs were active and when, then as you scrub the timeline you can see effects pop up and mutations to overall condition as reported by the user or documented in source literature. Let me know if this does not make any sense and I will try to explain it better (or learn that it makes no sense).


1 Answer 1


Are you using RDF? There are existing ontologies that are designed to maintain provenance in a knowledge graph - both in terms of temporality and sources.

Take a look at PROV. There is also an extension of this called ADMS. A good principle is to create Assets which are snapshots of data through time. You can attribute these assets to a particular source via an AssetRepository.

Assuming you are using RDF, if you want to generate metadata associated with edges you will need to either:

  • use RDF*
  • create hypernodes to store edge information.

If you are using a labelled property you may be able to store edge metadata natively.

I wrote a more accessible piece on this subject. This might be useful.

  • 1
    $\begingroup$ Sorry for the delayed reaction to this. I don't think you could have come through with a more relevant answer; it is exactly the direction I needed. Being junior to this realm, I had not heard of PROV nor other similar ontologies. Thanks a bunch! $\endgroup$
    – AJAr
    Dec 7, 2022 at 8:52
  • $\begingroup$ no problems at all! $\endgroup$
    – HES
    Dec 7, 2022 at 10:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.