An Ontology‑Guided Drug–Herb–Food Interaction Checker with Mechanism‑Based Knowledge Graph Reasoning and Condition‑Aware Interpretation

preprint OA: closed CC-BY-4.0

Abstract

Background: The concurrent use of prescription medicines with herbal products, dietary supplements, and foods is common, particularly among individuals with chronic diseases. Such real-world co-consumption generates interaction patterns beyond conventional drug–drug interactions. Existing interaction-checking systems remain largely drug-centric, rely on predefined interaction pairs, and provide limited mechanistic transparency and condition-aware interpretation. Consequently, they are poorly equipped to represent interactions influenced by health-related conditions such as age, renal impairment, pregnancy, and lifestyle. Methods We developed the Drug–Herb–Food Interaction Checker (DHFI-C), an ontology-guided knowledge graph platform for mechanism-based and condition-inclusive interaction assessment. Evidence was curated from open-access literature under PRISMA 2020 and transformed into a structured data model spanning drugs, herbs, foods, health-related conditions, and underlying diseases. Entities and interaction components were aligned with external biomedical ontologies where appropriate, whereas a DHFI mini-ontology captured underrepresented interaction concepts. The model was implemented as a graph-native representation paired with a deterministic inference engine that derives pharmacokinetic and pharmacodynamic interactions through shared mechanistic pathways. We evaluated the DHFI-C using a comprehensive, predefined use case. Results The knowledge graph integrated >24,000 drug entities, 92 herb/food entities, and 1,277 curated interaction records, along with mechanistic nodes for enzymes, transporters, and pharmacodynamic effects. The DHFI-C reports both curated and mechanism-inferred interactions with explicit provenance. In the use case, the system handled multi-domain interactions, produced condition-level interpretations, detected pharmacological effect duplication, decomposed combination products, and supported disease-driven drug suggestions. Outputs are available in consumer and expert presentation modes, with mechanistic explanations. Conclusions The DHFI-C provides a transparent and extensible framework for assessing drug–herb–food interactions through integrated, mechanism-based reasoning. By modeling health-related conditions as first-class entities and unifying heterogeneous domains within a single knowledge graph, the platform addresses the key limitations of existing interaction checkers and enables context-aware, mechanism-driven interpretation.
Full text 144,923 characters · extracted from preprint-html · click to expand
An Ontology‑Guided Drug–Herb–Food... | F1000Research "use strict";function _typeof(t){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}!function(){var t=function(){var t,e,o=[],n=window,r=n;for(;r;){try{if(r.frames.__tcfapiLocator){t=r;break}}catch(t){}if(r===n.top)break;r=r.parent}t||(!function t(){var e=n.document,o=!!n.frames.__tcfapiLocator;if(!o)if(e.body){var r=e.createElement("iframe");r.style.cssText="display:none",r.name="__tcfapiLocator",e.body.appendChild(r)}else setTimeout(t,5);return!o}(),n.__tcfapi=function(){for(var t=arguments.length,n=new Array(t),r=0;r 3&&2===parseInt(n[1],10)&&"boolean"==typeof n[3]&&(e=n[3],"function"==typeof n[2]&&n[2]("set",!0)):"ping"===n[0]?"function"==typeof n[2]&&n[2]({gdprApplies:e,cmpLoaded:!1,cmpStatus:"stub"}):o.push(n)},n.addEventListener("message",(function(t){var e="string"==typeof t.data,o={};if(e)try{o=JSON.parse(t.data)}catch(t){}else o=t.data;var n="object"===_typeof(o)&&null!==o?o.__tcfapiCall:null;n&&window.__tcfapi(n.command,n.version,(function(o,r){var a={__tcfapiReturn:{returnValue:o,success:r,callId:n.callId}};t&&t.source&&t.source.postMessage&&t.source.postMessage(e?JSON.stringify(a):a,"*")}),n.parameter)}),!1))};"undefined"!=typeof module?module.exports=t:t()}(); dataLayer = dataLayer || []; // Standard GTM initialization - Google Consent Mode handles consent automatically (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl+ '>m_auth=hzk0Vc3qFsQYhCrIoHz68A>m_preview=env-1>m_cookies_win=x';f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-MWFK8L5J'); ;window.NREUM||(NREUM={});NREUM.init={distributed_tracing:{enabled:true},privacy:{cookies_enabled:true},ajax:{deny_list:["bam.nr-data.net"]}}; ;NREUM.loader_config={accountID:"438030",trustKey:"438030",agentID:"772317073",licenseKey:"97f8f67f26",applicationID:"772317073"} ;NREUM.info={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",licenseKey:"97f8f67f26",applicationID:"772317073",sa:1} ;/*! For license information please see nr-loader-spa-1.236.0.min.js.LICENSE.txt */ (()=>{"use strict";var e,t,r={5763:(e,t,r)=>{r.d(t,{P_:()=>l,Mt:()=>g,C5:()=>s,DL:()=>v,OP:()=>T,lF:()=>D,Yu:()=>y,Dg:()=>h,CX:()=>c,GE:()=>b,sU:()=>_});var n=r(8632),i=r(9567);const o={beacon:n.ce.beacon,errorBeacon:n.ce.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0},a={};function s(e){if(!e)throw new Error("All info objects require an agent identifier!");if(!a[e])throw new Error("Info for ".concat(e," was never set"));return a[e]}function c(e,t){if(!e)throw new Error("All info objects require an agent identifier!");a[e]=(0,i.D)(t,o),(0,n.Qy)(e,a[e],"info")}var u=r(7056);const d=()=>{const e={blockSelector:"[data-nr-block]",maskInputOptions:{password:!0}};return{allow_bfcache:!0,privacy:{cookies_enabled:!0},ajax:{deny_list:void 0,enabled:!0,harvestTimeSeconds:10},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},session:{domain:void 0,expiresMs:u.oD,inactiveMs:u.Hb},ssl:void 0,obfuscate:void 0,jserrors:{enabled:!0,harvestTimeSeconds:10},metrics:{enabled:!0},page_action:{enabled:!0,harvestTimeSeconds:30},page_view_event:{enabled:!0},page_view_timing:{enabled:!0,harvestTimeSeconds:30,long_task:!1},session_trace:{enabled:!0,harvestTimeSeconds:10},harvest:{tooManyRequestsDelay:60},session_replay:{enabled:!1,harvestTimeSeconds:60,sampleRate:.1,errorSampleRate:.1,maskTextSelector:"*",maskAllInputs:!0,get blockClass(){return"nr-block"},get ignoreClass(){return"nr-ignore"},get maskTextClass(){return"nr-mask"},get blockSelector(){return e.blockSelector},set blockSelector(t){e.blockSelector+=",".concat(t)},get maskInputOptions(){return e.maskInputOptions},set maskInputOptions(t){e.maskInputOptions={...t,password:!0}}},spa:{enabled:!0,harvestTimeSeconds:10}}},f={};function l(e){if(!e)throw new Error("All configuration objects require an agent identifier!");if(!f[e])throw new Error("Configuration for ".concat(e," was never set"));return f[e]}function h(e,t){if(!e)throw new Error("All configuration objects require an agent identifier!");f[e]=(0,i.D)(t,d()),(0,n.Qy)(e,f[e],"config")}function g(e,t){if(!e)throw new Error("All configuration objects require an agent identifier!");var r=l(e);if(r){for(var n=t.split("."),i=0;i {r.d(t,{D:()=>i});var n=r(50);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.Z)("Setting a Configurable requires an object as input");if(!t||"object"!=typeof t)return(0,n.Z)("Setting a Configurable requires a model to set its initial properties");const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),o=0===Object.keys(r).length?e:r;for(let a in o)if(void 0!==e[a])try{"object"==typeof e[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){(0,n.Z)("An error occurred while setting a property of a Configurable",e)}return r}catch(e){(0,n.Z)("An error occured while setting a Configurable",e)}}},6818:(e,t,r)=>{r.d(t,{Re:()=>i,gF:()=>o,q4:()=>n});const n="1.236.0",i="PROD",o="CDN"},385:(e,t,r)=>{r.d(t,{FN:()=>a,IF:()=>u,Nk:()=>f,Tt:()=>s,_A:()=>o,il:()=>n,pL:()=>c,v6:()=>i,w1:()=>d});const n="undefined"!=typeof window&&!!window.document,i="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),o=n?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),a=""+o?.location,s=/iPad|iPhone|iPod/.test(navigator.userAgent),c=s&&"undefined"==typeof SharedWorker,u=(()=>{const e=navigator.userAgent.match(/Firefox[/\s](\d+\.\d+)/);return Array.isArray(e)&&e.length>=2?+e[1]:0})(),d=Boolean(n&&window.document.documentMode),f=!!navigator.sendBeacon},1117:(e,t,r)=>{r.d(t,{w:()=>o});var n=r(50);const i={agentIdentifier:"",ee:void 0};class o{constructor(e){try{if("object"!=typeof e)return(0,n.Z)("shared context requires an object as input");this.sharedContext={},Object.assign(this.sharedContext,i),Object.entries(e).forEach((e=>{let[t,r]=e;Object.keys(i).includes(t)&&(this.sharedContext[t]=r)}))}catch(e){(0,n.Z)("An error occured while setting SharedContext",e)}}}},8e3:(e,t,r)=>{r.d(t,{L:()=>d,R:()=>c});var n=r(2177),i=r(1284),o=r(4322),a=r(3325);const s={};function c(e,t){const r={staged:!1,priority:a.p[t]||0};u(e),s[e].get(t)||s[e].set(t,r)}function u(e){e&&(s[e]||(s[e]=new Map))}function d(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"feature";if(u(e),!e||!s[e].get(t))return a(t);s[e].get(t).staged=!0;const r=[...s[e]];function a(t){const r=e?n.ee.get(e):n.ee,a=o.X.handlers;if(r.backlog&&a){var s=r.backlog[t],c=a[t];if(c){for(var u=0;s&&u {let[t,r]=e;return r.staged}))&&(r.sort(((e,t)=>e[1].priority-t[1].priority)),r.forEach((e=>{let[t]=e;a(t)})))}function f(e,t){var r=e[1];(0,i.D)(t[r],(function(t,r){var n=e[0];if(r[0]===n){var i=r[1],o=e[3],a=e[2];i.apply(o,a)}}))}},2177:(e,t,r)=>{r.d(t,{c:()=>f,ee:()=>u});var n=r(8632),i=r(2210),o=r(1284),a=r(5763),s="nr@context";let c=(0,n.fP)();var u;function d(){}function f(e){return(0,i.X)(e,s,l)}function l(){return new d}function h(){u.aborted=!0,u.backlog={}}c.ee?u=c.ee:(u=function e(t,r){var n={},c={},f={},g=!1;try{g=16===r.length&&(0,a.OP)(r).isolatedBacklog}catch(e){}var p={on:b,addEventListener:b,removeEventListener:y,emit:v,get:x,listeners:w,context:m,buffer:A,abort:h,aborted:!1,isBuffering:E,debugId:r,backlog:g?{}:t&&"object"==typeof t.backlog?t.backlog:{}};return p;function m(e){return e&&e instanceof d?e:e?(0,i.X)(e,s,l):l()}function v(e,r,n,i,o){if(!1!==o&&(o=!0),!u.aborted||i){t&&o&&t.emit(e,r,n);for(var a=m(n),s=w(e),d=s.length,f=0;fn,p:()=>i});var n=r(2177).ee.get("handle");function i(e,t,r,i,o){o?(o.buffer([e],i),o.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},4322:(e,t,r)=>{r.d(t,{X:()=>o});var n=r(5546);o.on=a;var i=o.handlers={};function o(e,t,r,o){a(o||n.E,i,e,t,r)}function a(e,t,r,i,o){o||(o="feature"),e||(e=n.E);var a=t[o]=t[o]||{};(a[r]=a[r]||[]).push([e,i])}},3239:(e,t,r)=>{r.d(t,{bP:()=>s,iz:()=>c,m$:()=>a});var n=r(385);let i=!1,o=!1;try{const e={get passive(){return i=!0,!1},get signal(){return o=!0,!1}};n._A.addEventListener("test",null,e),n._A.removeEventListener("test",null,e)}catch(e){}function a(e,t){return i||o?{capture:!!e,passive:i,signal:t}:!!e}function s(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3?arguments[3]:void 0;window.addEventListener(e,t,a(r,n))}function c(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3?arguments[3]:void 0;document.addEventListener(e,t,a(r,n))}},4402:(e,t,r)=>{r.d(t,{Ht:()=>u,M:()=>c,Rl:()=>a,ky:()=>s});var n=r(385);const i="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function o(e,t){return e?15&e[t]:16*Math.random()|0}function a(){const e=n._A?.crypto||n._A?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(31))),i.split("").map((e=>"x"===e?o(t,++r).toString(16):"y"===e?(3&o()|8).toString(16):e)).join("")}function s(e){const t=n._A?.crypto||n._A?.msCrypto;let r,i=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(31)));const a=[];for(var s=0;s {r.d(t,{Bq:()=>n,Hb:()=>o,oD:()=>i});const n="NRBA",i=144e5,o=18e5},7894:(e,t,r)=>{function n(){return Math.round(performance.now())}r.d(t,{z:()=>n})},7243:(e,t,r)=>{r.d(t,{e:()=>o});var n=r(385),i={};function o(e){if(e in i)return i[e];if(0===(e||"").indexOf("data:"))return{protocol:"data"};let t;var r=n._A?.location,o={};if(n.il)t=document.createElement("a"),t.href=e;else try{t=new URL(e,r.href)}catch(e){return o}o.port=t.port;var a=t.href.split("://");!o.port&&a[1]&&(o.port=a[1].split("/")[0].split("@").pop().split(":")[1]),o.port&&"0"!==o.port||(o.port="https"===a[0]?"443":"80"),o.hostname=t.hostname||r.hostname,o.pathname=t.pathname,o.protocol=a[0],"/"!==o.pathname.charAt(0)&&(o.pathname="/"+o.pathname);var s=!t.protocol||":"===t.protocol||t.protocol===r.protocol,c=t.hostname===r.hostname&&t.port===r.port;return o.sameOrigin=s&&(!t.hostname||c),"/"===o.pathname&&(i[e]=o),o}},50:(e,t,r)=>{function n(e,t){"function"==typeof console.warn&&(console.warn("New Relic: ".concat(e)),t&&console.warn(t))}r.d(t,{Z:()=>n})},2587:(e,t,r)=>{r.d(t,{N:()=>c,T:()=>u});var n=r(2177),i=r(5546),o=r(8e3),a=r(3325);const s={stn:[a.D.sessionTrace],err:[a.D.jserrors,a.D.metrics],ins:[a.D.pageAction],spa:[a.D.spa],sr:[a.D.sessionReplay,a.D.sessionTrace]};function c(e,t){const r=n.ee.get(t);e&&"object"==typeof e&&(Object.entries(e).forEach((e=>{let[t,n]=e;void 0===u[t]&&(s[t]?s[t].forEach((e=>{n?(0,i.p)("feat-"+t,[],void 0,e,r):(0,i.p)("block-"+t,[],void 0,e,r),(0,i.p)("rumresp-"+t,[Boolean(n)],void 0,e,r)})):n&&(0,i.p)("feat-"+t,[],void 0,void 0,r),u[t]=Boolean(n))})),Object.keys(s).forEach((e=>{void 0===u[e]&&(s[e]?.forEach((t=>(0,i.p)("rumresp-"+e,[!1],void 0,t,r))),u[e]=!1)})),(0,o.L)(t,a.D.pageViewEvent))}const u={}},2210:(e,t,r)=>{r.d(t,{X:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},1284:(e,t,r)=>{r.d(t,{D:()=>n});const n=(e,t)=>Object.entries(e||{}).map((e=>{let[r,n]=e;return t(r,n)}))},4351:(e,t,r)=>{r.d(t,{P:()=>o});var n=r(2177);const i=()=>{const e=new WeakSet;return(t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r}};function o(e){try{return JSON.stringify(e,i())}catch(e){try{n.ee.emit("internal-error",[e])}catch(e){}}}},3960:(e,t,r)=>{r.d(t,{K:()=>a,b:()=>o});var n=r(3239);function i(){return"undefined"==typeof document||"complete"===document.readyState}function o(e,t){if(i())return e();(0,n.bP)("load",e,t)}function a(e){if(i())return e();(0,n.iz)("DOMContentLoaded",e)}},8632:(e,t,r)=>{r.d(t,{EZ:()=>u,Qy:()=>c,ce:()=>o,fP:()=>a,gG:()=>d,mF:()=>s});var n=r(7894),i=r(385);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function a(){return i._A.NREUM||(i._A.NREUM={}),void 0===i._A.newrelic&&(i._A.newrelic=i._A.NREUM),i._A.NREUM}function s(){let e=a();return e.o||(e.o={ST:i._A.setTimeout,SI:i._A.setImmediate,CT:i._A.clearTimeout,XHR:i._A.XMLHttpRequest,REQ:i._A.Request,EV:i._A.Event,PR:i._A.Promise,MO:i._A.MutationObserver,FETCH:i._A.fetch}),e}function c(e,t,r){let i=a();const o=i.initializedAgents||{},s=o[e]||{};return Object.keys(s).length||(s.initializedAt={ms:(0,n.z)(),date:new Date}),i.initializedAgents={...o,[e]:{...s,[r]:t}},i}function u(e,t){a()[e]=t}function d(){return function(){let e=a();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=a();const t=e.init||{};e.init={...t}}(),s(),function(){let e=a();const t=e.loader_config||{};e.loader_config={...t}}(),a()}},7956:(e,t,r)=>{r.d(t,{N:()=>i});var n=r(3239);function i(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0;return void(0,n.iz)("visibilitychange",(function(){if(t)return void("hidden"==document.visibilityState&&e());e(document.visibilityState)}),r,i)}},1214:(e,t,r)=>{r.d(t,{em:()=>v,u5:()=>N,QU:()=>S,_L:()=>I,Gm:()=>L,Lg:()=>M,gy:()=>U,BV:()=>Q,Kf:()=>ee});var n=r(2177);const i="nr@original";var o=Object.prototype.hasOwnProperty,a=!1;function s(e,t){return e||(e=n.ee),r.inPlace=function(e,t,n,i,o){n||(n="");var a,s,c,u="-"===n.charAt(0);for(c=0;c 2?n-2:0),o=2;o {r(A[T],e,w),r(E[T],e,w)})),r(l._A,"fetch",y),t.on(y+"end",(function(e,r){var n=this;if(r){var i=r.headers.get("content-length");null!==i&&(n.rxSize=i),t.emit(y+"done",[null,r],n)}else t.emit(y+"done",[e],n)})),t}const O={},j=["pushState","replaceState"];function S(e){const t=function(e){return(e||n.ee).get("history")}(e);return!l.il||O[t.debugId]++||(O[t.debugId]=1,s(t).inPlace(window.history,j,"-")),t}var P=r(3239);const C={},R=["appendChild","insertBefore","replaceChild"];function I(e){const t=function(e){return(e||n.ee).get("jsonp")}(e);if(!l.il||C[t.debugId])return t;C[t.debugId]=!0;var r=s(t),i=/[?&](?:callback|cb)=([^&#]+)/,o=/(.*)\.([^.]+)/,a=/^(\w+)(\.|$)(.*)$/;function c(e,t){var r=e.match(a),n=r[1],i=r[3];return i?c(i,t[n]):t[n]}return r.inPlace(Node.prototype,R,"dom-"),t.on("dom-start",(function(e){!function(e){if(!e||"string"!=typeof e.nodeName||"script"!==e.nodeName.toLowerCase())return;if("function"!=typeof e.addEventListener)return;var n=(a=e.src,s=a.match(i),s?s[1]:null);var a,s;if(!n)return;var u=function(e){var t=e.match(o);if(t&&t.length>=3)return{key:t[2],parent:c(t[1],window)};return{key:e,parent:window}}(n);if("function"!=typeof u.parent[u.key])return;var d={};function f(){t.emit("jsonp-end",[],d),e.removeEventListener("load",f,(0,P.m$)(!1)),e.removeEventListener("error",l,(0,P.m$)(!1))}function l(){t.emit("jsonp-error",[],d),t.emit("jsonp-end",[],d),e.removeEventListener("load",f,(0,P.m$)(!1)),e.removeEventListener("error",l,(0,P.m$)(!1))}r.inPlace(u.parent,[u.key],"cb-",d),e.addEventListener("load",f,(0,P.m$)(!1)),e.addEventListener("error",l,(0,P.m$)(!1)),t.emit("new-jsonp",[e.src],d)}(e[0])})),t}var k=r(5763);const H={};function L(e){const t=function(e){return(e||n.ee).get("mutation")}(e);if(!l.il||H[t.debugId])return t;H[t.debugId]=!0;var r=s(t),i=k.Yu.MO;return i&&(window.MutationObserver=function(e){return this instanceof i?new i(r(e,"fn-")):i.apply(this,arguments)},MutationObserver.prototype=i.prototype),t}const z={};function M(e){const t=function(e){return(e||n.ee).get("promise")}(e);if(z[t.debugId])return t;z[t.debugId]=!0;var r=n.c,o=s(t),a=k.Yu.PR;return a&&function(){function e(r){var n=t.context(),i=o(r,"executor-",n,null,!1);const s=Reflect.construct(a,[i],e);return t.context(s).getCtx=function(){return n},s}l._A.Promise=e,Object.defineProperty(e,"name",{value:"Promise"}),e.toString=function(){return a.toString()},Object.setPrototypeOf(e,a),["all","race"].forEach((function(r){const n=a[r];e[r]=function(e){let i=!1;[...e||[]].forEach((e=>{this.resolve(e).then(a("all"===r),a(!1))}));const o=n.apply(this,arguments);return o;function a(e){return function(){t.emit("propagate",[null,!i],o,!1,!1),i=i||!e}}}})),["resolve","reject"].forEach((function(r){const n=a[r];e[r]=function(e){const r=n.apply(this,arguments);return e!==r&&t.emit("propagate",[e,!0],r,!1,!1),r}})),e.prototype=a.prototype;const n=a.prototype.then;a.prototype.then=function(){var e=this,i=r(e);i.promise=e;for(var a=arguments.length,s=new Array(a),c=0;c e())),t};function m(e,t){i.inPlace(t,["onreadystatechange"],"fn-",E)}function b(){var e=this,t=r.context(e);e.readyState>3&&!t.resolved&&(t.resolved=!0,r.emit("xhr-resolved",[],e)),i.inPlace(e,f,"fn-",E)}if(function(e,t){for(var r in e)t[r]=e[r]}(o,p),p.prototype=o.prototype,i.inPlace(p.prototype,J,"-xhr-",E),r.on("send-xhr-start",(function(e,t){m(e,t),function(e){h.push(e),a&&(y?y.then(A):u?u(A):(w=-w,x.data=w))}(t)})),r.on("open-xhr-start",m),a){var y=c&&c.resolve();if(!u&&!c){var w=1,x=document.createTextNode(w);new a(A).observe(x,{characterData:!0})}}else t.on("fn-end",(function(e){e[0]&&e[0].type===d||A()}));function A(){for(var e=0;e {r.d(t,{t:()=>n});const n=r(3325).D.ajax},6660:(e,t,r)=>{r.d(t,{A:()=>i,t:()=>n});const n=r(3325).D.jserrors,i="nr@seenError"},3081:(e,t,r)=>{r.d(t,{gF:()=>o,mY:()=>i,t9:()=>n,vz:()=>s,xS:()=>a});const n=r(3325).D.metrics,i="sm",o="cm",a="storeSupportabilityMetrics",s="storeEventMetrics"},4649:(e,t,r)=>{r.d(t,{t:()=>n});const n=r(3325).D.pageAction},7633:(e,t,r)=>{r.d(t,{Dz:()=>i,OJ:()=>a,qw:()=>o,t9:()=>n});const n=r(3325).D.pageViewEvent,i="firstbyte",o="domcontent",a="windowload"},9251:(e,t,r)=>{r.d(t,{t:()=>n});const n=r(3325).D.pageViewTiming},3614:(e,t,r)=>{r.d(t,{BST_RESOURCE:()=>i,END:()=>s,FEATURE_NAME:()=>n,FN_END:()=>u,FN_START:()=>c,PUSH_STATE:()=>d,RESOURCE:()=>o,START:()=>a});const n=r(3325).D.sessionTrace,i="bstResource",o="resource",a="-start",s="-end",c="fn"+a,u="fn"+s,d="pushState"},7836:(e,t,r)=>{r.d(t,{BODY:()=>A,CB_END:()=>E,CB_START:()=>u,END:()=>x,FEATURE_NAME:()=>i,FETCH:()=>_,FETCH_BODY:()=>v,FETCH_DONE:()=>m,FETCH_START:()=>p,FN_END:()=>c,FN_START:()=>s,INTERACTION:()=>l,INTERACTION_API:()=>d,INTERACTION_EVENTS:()=>o,JSONP_END:()=>b,JSONP_NODE:()=>g,JS_TIME:()=>T,MAX_TIMER_BUDGET:()=>a,REMAINING:()=>f,SPA_NODE:()=>h,START:()=>w,originalSetTimeout:()=>y});var n=r(5763);const i=r(3325).D.spa,o=["click","submit","keypress","keydown","keyup","change"],a=999,s="fn-start",c="fn-end",u="cb-start",d="api-ixn-",f="remaining",l="interaction",h="spaNode",g="jsonpNode",p="fetch-start",m="fetch-done",v="fetch-body-",b="jsonp-end",y=n.Yu.ST,w="-start",x="-end",A="-body",E="cb"+x,T="jsTime",_="fetch"},5938:(e,t,r)=>{r.d(t,{W:()=>o});var n=r(5763),i=r(2177);class o{constructor(e,t,r){this.agentIdentifier=e,this.aggregator=t,this.ee=i.ee.get(e,(0,n.OP)(this.agentIdentifier).isolatedBacklog),this.featureName=r,this.blocked=!1}}},9144:(e,t,r)=>{r.d(t,{j:()=>m});var n=r(3325),i=r(5763),o=r(5546),a=r(2177),s=r(7894),c=r(8e3),u=r(3960),d=r(385),f=r(50),l=r(3081),h=r(8632);function g(){const e=(0,h.gG)();["setErrorHandler","finished","addToTrace","inlineHit","addRelease","addPageAction","setCurrentRouteName","setPageViewName","setCustomAttribute","interaction","noticeError","setUserId"].forEach((t=>{e[t]=function(){for(var r=arguments.length,n=new Array(r),i=0;i 1?r-1:0),i=1;i {e.exposed&&e.api[t]&&o.push(e.api[t](...n))})),o.length>1?o:o[0]}(t,...n)}}))}var p=r(2587);function m(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},m=arguments.length>2?arguments[2]:void 0,v=arguments.length>3?arguments[3]:void 0,{init:b,info:y,loader_config:w,runtime:x={loaderType:m},exposed:A=!0}=t;const E=(0,h.gG)();y||(b=E.init,y=E.info,w=E.loader_config),(0,i.Dg)(e,b||{}),(0,i.GE)(e,w||{}),(0,i.sU)(e,x),y.jsAttributes??={},d.v6&&(y.jsAttributes.isWorker=!0),(0,i.CX)(e,y),g();const T=function(e,t){t||(0,c.R)(e,"api");const h={};var g=a.ee.get(e),p=g.get("tracer"),m="api-",v=m+"ixn-";function b(t,r,n,o){const a=(0,i.C5)(e);return null===r?delete a.jsAttributes[t]:(0,i.CX)(e,{...a,jsAttributes:{...a.jsAttributes,[t]:r}}),x(m,n,!0,o||null===r?"session":void 0)(t,r)}function y(){}["setErrorHandler","finished","addToTrace","inlineHit","addRelease"].forEach((e=>h[e]=x(m,e,!0,"api"))),h.addPageAction=x(m,"addPageAction",!0,n.D.pageAction),h.setCurrentRouteName=x(m,"routeName",!0,n.D.spa),h.setPageViewName=function(t,r){if("string"==typeof t)return"/"!==t.charAt(0)&&(t="/"+t),(0,i.OP)(e).customTransaction=(r||"http://custom.transaction")+t,x(m,"setPageViewName",!0)()},h.setCustomAttribute=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof e){if(["string","number"].includes(typeof t)||null===t)return b(e,t,"setCustomAttribute",r);(0,f.Z)("Failed to execute setCustomAttribute.\nNon-null value must be a string or number type, but a type of was provided."))}else(0,f.Z)("Failed to execute setCustomAttribute.\nName must be a string type, but a type of was provided."))},h.setUserId=function(e){if("string"==typeof e||null===e)return b("enduser.id",e,"setUserId",!0);(0,f.Z)("Failed to execute setUserId.\nNon-null value must be a string type, but a type of was provided."))},h.interaction=function(){return(new y).get()};var w=y.prototype={createTracer:function(e,t){var r={},i=this,a="function"==typeof t;return(0,o.p)(v+"tracer",[(0,s.z)(),e,r],i,n.D.spa,g),function(){if(p.emit((a?"":"no-")+"fn-start",[(0,s.z)(),i,a],r),a)try{return t.apply(this,arguments)}catch(e){throw p.emit("fn-err",[arguments,this,"string"==typeof e?new Error(e):e],r),e}finally{p.emit("fn-end",[(0,s.z)()],r)}}}};function x(e,t,r,i){return function(){return(0,o.p)(l.xS,["API/"+t+"/called"],void 0,n.D.metrics,g),i&&(0,o.p)(e+t,[(0,s.z)(),...arguments],r?null:this,i,g),r?void 0:this}}function A(){r.e(439).then(r.bind(r,7438)).then((t=>{let{setAPI:r}=t;r(e),(0,c.L)(e,"api")})).catch((()=>(0,f.Z)("Downloading runtime APIs failed...")))}return["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach((e=>{w[e]=x(v,e,void 0,n.D.spa)})),h.noticeError=function(e,t){"string"==typeof e&&(e=new Error(e)),(0,o.p)(l.xS,["API/noticeError/called"],void 0,n.D.metrics,g),(0,o.p)("err",[e,(0,s.z)(),!1,t],void 0,n.D.jserrors,g)},d.il?(0,u.b)((()=>A()),!0):A(),h}(e,v);return(0,h.Qy)(e,T,"api"),(0,h.Qy)(e,A,"exposed"),(0,h.EZ)("activatedFeatures",p.T),T}},3325:(e,t,r)=>{r.d(t,{D:()=>n,p:()=>i});const n={ajax:"ajax",jserrors:"jserrors",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",spa:"spa"},i={[n.pageViewEvent]:1,[n.pageViewTiming]:2,[n.metrics]:3,[n.jserrors]:4,[n.ajax]:5,[n.sessionTrace]:6,[n.pageAction]:7,[n.spa]:8,[n.sessionReplay]:9}}},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var o=n[e]={exports:{}};return r[e](o,o.exports,i),o.exports}i.m=r,i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>(({78:"page_action-aggregate",147:"metrics-aggregate",242:"session-manager",317:"jserrors-aggregate",348:"page_view_timing-aggregate",412:"lazy-feature-loader",439:"async-api",538:"recorder",590:"session_replay-aggregate",675:"compressor",733:"session_trace-aggregate",786:"page_view_event-aggregate",873:"spa-aggregate",898:"ajax-aggregate"}[e]||e)+"."+{78:"ac76d497",147:"3dc53903",148:"1a20d5fe",242:"2a64278a",317:"49e41428",348:"bd6de33a",412:"2f55ce66",439:"30bd804e",538:"1b18459f",590:"cf0efb30",675:"ae9f91a8",733:"83105561",786:"06482edd",860:"03a8b7a5",873:"e6b09d52",898:"998ef92b"}[e]+"-1.236.0.min.js"),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="NRBA:",i.l=(r,n,o,a)=>{if(e[r])e[r].push(n);else{var s,c;if(void 0!==o)for(var u=document.getElementsByTagName("script"),d=0;d {s.onerror=s.onload=null,clearTimeout(h);var i=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),i&&i.forEach((e=>e(n))),t)return t(n)},h=setTimeout(l.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=l.bind(null,s.onerror),s.onload=l.bind(null,s.onload),c&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.j=364,i.p="https://js-agent.newrelic.com/",(()=>{var e={364:0,953:0};i.f.j=(t,r)=>{var n=i.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise(((r,i)=>n=e[t]=[r,i]));r.push(n[2]=o);var a=i.p+i.u(t),s=new Error;i.l(a,(r=>{if(i.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",s.name="ChunkLoadError",s.type=o,s.request=a,n[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var n,o,[a,s,c]=r,u=0;if(a.some((t=>0!==e[t]))){for(n in s)i.o(s,n)&&(i.m[n]=s[n]);if(c)c(i)}for(t&&t(r);u {i.r(o);var e=i(3325),t=i(5763);const r=Object.values(e.D);function n(e){const n={};return r.forEach((r=>{n[r]=function(e,r){return!1!==(0,t.Mt)(r,"".concat(e,".enabled"))}(r,e)})),n}var a=i(9144);var s=i(5546),c=i(385),u=i(8e3),d=i(5938),f=i(3960),l=i(50);class h extends d.W{constructor(e,t,r){let n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];super(e,t,r),this.auto=n,this.abortHandler,this.featAggregate,this.onAggregateImported,n&&(0,u.R)(e,r)}importAggregator(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(this.featAggregate||!this.auto)return;const r=c.il&&!0===(0,t.Mt)(this.agentIdentifier,"privacy.cookies_enabled");let n;this.onAggregateImported=new Promise((e=>{n=e}));const o=async()=>{let t;try{if(r){const{setupAgentSession:e}=await Promise.all([i.e(860),i.e(242)]).then(i.bind(i,3228));t=e(this.agentIdentifier)}}catch(e){(0,l.Z)("A problem occurred when starting up session manager. This page will not start or extend any session.",e)}try{if(!this.shouldImportAgg(this.featureName,t))return void(0,u.L)(this.agentIdentifier,this.featureName);const{lazyFeatureLoader:r}=await i.e(412).then(i.bind(i,8582)),{Aggregate:o}=await r(this.featureName,"aggregate");this.featAggregate=new o(this.agentIdentifier,this.aggregator,e),n(!0)}catch(e){(0,l.Z)("Downloading and initializing ".concat(this.featureName," failed..."),e),this.abortHandler?.(),n(!1)}};c.il?(0,f.b)((()=>o()),!0):o()}shouldImportAgg(r,n){return r!==e.D.sessionReplay||!1!==(0,t.Mt)(this.agentIdentifier,"session_trace.enabled")&&(!!n?.isNew||!!n?.state.sessionReplay)}}var g=i(7633),p=i(7894);class m extends h{static featureName=g.t9;constructor(r,n){let i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(super(r,n,g.t9,i),("undefined"==typeof PerformanceNavigationTiming||c.Tt)&&"undefined"!=typeof PerformanceTiming){const n=(0,t.OP)(r);n[g.Dz]=Math.max(Date.now()-n.offset,0),(0,f.K)((()=>n[g.qw]=Math.max((0,p.z)()-n[g.Dz],0))),(0,f.b)((()=>{const t=(0,p.z)();n[g.OJ]=Math.max(t-n[g.Dz],0),(0,s.p)("timing",["load",t],void 0,e.D.pageViewTiming,this.ee)}))}this.importAggregator()}}var v=i(1117),b=i(1284);class y extends v.w{constructor(e){super(e),this.aggregatedData={}}store(e,t,r,n,i){var o=this.getBucket(e,t,r,i);return o.metrics=function(e,t){t||(t={count:0});return t.count+=1,(0,b.D)(e,(function(e,r){t[e]=w(r,t[e])})),t}(n,o.metrics),o}merge(e,t,r,n,i){var o=this.getBucket(e,t,n,i);if(o.metrics){var a=o.metrics;a.count+=r.count,(0,b.D)(r,(function(e,t){if("count"!==e){var n=a[e],i=r[e];i&&!i.c?a[e]=w(i.t,n):a[e]=function(e,t){if(!t)return e;t.c||(t=x(t.t));return t.min=Math.min(e.min,t.min),t.max=Math.max(e.max,t.max),t.t+=e.t,t.sos+=e.sos,t.c+=e.c,t}(i,a[e])}}))}else o.metrics=r}storeMetric(e,t,r,n){var i=this.getBucket(e,t,r);return i.stats=w(n,i.stats),i}getBucket(e,t,r,n){this.aggregatedData[e]||(this.aggregatedData[e]={});var i=this.aggregatedData[e][t];return i||(i=this.aggregatedData[e][t]={params:r||{}},n&&(i.custom=n)),i}get(e,t){return t?this.aggregatedData[e]&&this.aggregatedData[e][t]:this.aggregatedData[e]}take(e){for(var t={},r="",n=!1,i=0;i t.max&&(t.max=e),e 2&&void 0!==arguments[2])||arguments[2];super(e,r,j.t,n),c.il&&((0,t.OP)(e).initHidden=Boolean("hidden"===document.visibilityState),(0,N.N)((()=>(0,s.p)("docHidden",[(0,p.z)()],void 0,j.t,this.ee)),!0),(0,O.bP)("pagehide",(()=>(0,s.p)("winPagehide",[(0,p.z)()],void 0,j.t,this.ee))),this.importAggregator())}}var P=i(3081);class C extends h{static featureName=P.t9;constructor(e,t){let r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];super(e,t,P.t9,r),this.importAggregator()}}var R,I=i(2210),k=i(1214),H=i(2177),L={};try{R=localStorage.getItem("__nr_flags").split(","),console&&"function"==typeof console.log&&(L.console=!0,-1!==R.indexOf("dev")&&(L.dev=!0),-1!==R.indexOf("nr_dev")&&(L.nrDev=!0))}catch(e){}function z(e){try{L.console&&z(e)}catch(e){}}L.nrDev&&H.ee.on("internal-error",(function(e){z(e.stack)})),L.dev&&H.ee.on("fn-err",(function(e,t,r){z(r.stack)})),L.dev&&(z("NR AGENT IN DEVELOPMENT MODE"),z("flags: "+(0,b.D)(L,(function(e,t){return e})).join(", ")));var M=i(6660);class B extends h{static featureName=M.t;constructor(r,n){let i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];super(r,n,M.t,i),this.skipNext=0;try{this.removeOnAbort=new AbortController}catch(e){}const o=this;o.ee.on("fn-start",(function(e,t,r){o.abortHandler&&(o.skipNext+=1)})),o.ee.on("fn-err",(function(t,r,n){o.abortHandler&&!n[M.A]&&((0,I.X)(n,M.A,(function(){return!0})),this.thrown=!0,(0,s.p)("err",[n,(0,p.z)()],void 0,e.D.jserrors,o.ee))})),o.ee.on("fn-end",(function(){o.abortHandler&&!this.thrown&&o.skipNext>0&&(o.skipNext-=1)})),o.ee.on("internal-error",(function(t){(0,s.p)("ierr",[t,(0,p.z)(),!0],void 0,e.D.jserrors,o.ee)})),this.origOnerror=c._A.onerror,c._A.onerror=this.onerrorHandler.bind(this),c._A.addEventListener("unhandledrejection",(t=>{const r=function(e){let t="Unhandled Promise Rejection: ";if(e instanceof Error)try{return e.message=t+e.message,e}catch(t){return e}if(void 0===e)return new Error(t);try{return new Error(t+(0,D.P)(e))}catch(e){return new Error(t)}}(t.reason);(0,s.p)("err",[r,(0,p.z)(),!1,{unhandledPromiseRejection:1}],void 0,e.D.jserrors,this.ee)}),(0,O.m$)(!1,this.removeOnAbort?.signal)),(0,k.gy)(this.ee),(0,k.BV)(this.ee),(0,k.em)(this.ee),(0,t.OP)(r).xhrWrappable&&(0,k.Kf)(this.ee),this.abortHandler=this.#e,this.importAggregator()}#e(){this.removeOnAbort?.abort(),this.abortHandler=void 0}onerrorHandler(t,r,n,i,o){"function"==typeof this.origOnerror&&this.origOnerror(...arguments);try{this.skipNext?this.skipNext-=1:(0,s.p)("err",[o||new F(t,r,n),(0,p.z)()],void 0,e.D.jserrors,this.ee)}catch(t){try{(0,s.p)("ierr",[t,(0,p.z)(),!0],void 0,e.D.jserrors,this.ee)}catch(e){}}return!1}}function F(e,t,r){this.message=e||"Uncaught error with no additional information",this.sourceURL=t,this.line=r}let U=1;const q="nr@id";function G(e){const t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===c._A?0:(0,I.X)(e,q,(function(){return U++}))}function V(e){if("string"==typeof e&&e.length)return e.length;if("object"==typeof e){if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer&&e.byteLength)return e.byteLength;if("undefined"!=typeof Blob&&e instanceof Blob&&e.size)return e.size;if(!("undefined"!=typeof FormData&&e instanceof FormData))try{return(0,D.P)(e).length}catch(e){return}}}var X=i(7243);class W{constructor(e){this.agentIdentifier=e,this.generateTracePayload=this.generateTracePayload.bind(this),this.shouldGenerateTrace=this.shouldGenerateTrace.bind(this)}generateTracePayload(e){if(!this.shouldGenerateTrace(e))return null;var r=(0,t.DL)(this.agentIdentifier);if(!r)return null;var n=(r.accountID||"").toString()||null,i=(r.agentID||"").toString()||null,o=(r.trustKey||"").toString()||null;if(!n||!i)return null;var a=(0,_.M)(),s=(0,_.Ht)(),c=Date.now(),u={spanId:a,traceId:s,timestamp:c};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(u.traceContextParentHeader=this.generateTraceContextParentHeader(a,s),u.traceContextStateHeader=this.generateTraceContextStateHeader(a,c,n,i,o)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(u.newrelicHeader=this.generateTraceHeader(a,s,c,n,i,o)),u}generateTraceContextParentHeader(e,t){return"00-"+t+"-"+e+"-01"}generateTraceContextStateHeader(e,t,r,n,i){return i+"@nr=0-1-"+r+"-"+n+"-"+e+"----"+t}generateTraceHeader(e,t,r,n,i,o){if(!("function"==typeof c._A?.btoa))return null;var a={v:[0,1],d:{ty:"Browser",ac:n,ap:i,id:e,tr:t,ti:r}};return o&&n!==o&&(a.d.tk=o),btoa((0,D.P)(a))}shouldGenerateTrace(e){return this.isDtEnabled()&&this.isAllowedOrigin(e)}isAllowedOrigin(e){var r=!1,n={};if((0,t.Mt)(this.agentIdentifier,"distributed_tracing")&&(n=(0,t.P_)(this.agentIdentifier).distributed_tracing),e.sameOrigin)r=!0;else if(n.allowed_origins instanceof Array)for(var i=0;i 2&&void 0!==arguments[2])||arguments[2];super(r,n,Z.t,i),(0,t.OP)(r).xhrWrappable&&(this.dt=new W(r),this.handler=(e,t,r,n)=>(0,s.p)(e,t,r,n,this.ee),(0,k.u5)(this.ee),(0,k.Kf)(this.ee),function(r,n,i,o){function a(e){var t=this;t.totalCbs=0,t.called=0,t.cbTime=0,t.end=E,t.ended=!1,t.xhrGuids={},t.lastSize=null,t.loadCaptureCalled=!1,t.params=this.params||{},t.metrics=this.metrics||{},e.addEventListener("load",(function(r){_(t,e)}),(0,O.m$)(!1)),c.IF||e.addEventListener("progress",(function(e){t.lastSize=e.loaded}),(0,O.m$)(!1))}function s(e){this.params={method:e[0]},T(this,e[1]),this.metrics={}}function u(e,n){var i=(0,t.DL)(r);i.xpid&&this.sameOrigin&&n.setRequestHeader("X-NewRelic-ID",i.xpid);var a=o.generateTracePayload(this.parsedOrigin);if(a){var s=!1;a.newrelicHeader&&(n.setRequestHeader("newrelic",a.newrelicHeader),s=!0),a.traceContextParentHeader&&(n.setRequestHeader("traceparent",a.traceContextParentHeader),a.traceContextStateHeader&&n.setRequestHeader("tracestate",a.traceContextStateHeader),s=!0),s&&(this.dt=a)}}function d(e,t){var r=this.metrics,i=e[0],o=this;if(r&&i){var a=V(i);a&&(r.txSize=a)}this.startTime=(0,p.z)(),this.listener=function(e){try{"abort"!==e.type||o.loadCaptureCalled||(o.params.aborted=!0),("load"!==e.type||o.called===o.totalCbs&&(o.onloadCalled||"function"!=typeof t.onload)&&"function"==typeof o.end)&&o.end(t)}catch(e){try{n.emit("internal-error",[e])}catch(e){}}};for(var s=0;s 1?e[1]=i:e.push(i)}else e[0]&&e[0].headers&&s(e[0].headers,n)&&(this.dt=n);function s(e,t){var r=!1;return t.newrelicHeader&&(e.set("newrelic",t.newrelicHeader),r=!0),t.traceContextParentHeader&&(e.set("traceparent",t.traceContextParentHeader),t.traceContextStateHeader&&e.set("tracestate",t.traceContextStateHeader),r=!0),r}}function x(e,t){this.params={},this.metrics={},this.startTime=(0,p.z)(),this.dt=t,e.length>=1&&(this.target=e[0]),e.length>=2&&(this.opts=e[1]);var r,n=this.opts||{},i=this.target;"string"==typeof i?r=i:"object"==typeof i&&i instanceof Y?r=i.url:c._A?.URL&&"object"==typeof i&&i instanceof URL&&(r=i.href),T(this,r);var o=(""+(i&&i instanceof Y&&i.method||n.method||"GET")).toUpperCase();this.params.method=o,this.txSize=V(n.body)||0}function A(t,r){var n;this.endTime=(0,p.z)(),this.params||(this.params={}),this.params.status=r?r.status:0,"string"==typeof this.rxSize&&this.rxSize.length>0&&(n=+this.rxSize);var o={txSize:this.txSize,rxSize:n,duration:(0,p.z)()-this.startTime};i("xhr",[this.params,o,this.startTime,this.endTime,"fetch"],this,e.D.ajax)}function E(t){var r=this.params,n=this.metrics;if(!this.ended){this.ended=!0;for(var o=0;o 2&&void 0!==arguments[2])||arguments[2];super(e,t,we.t,r),this.importAggregator()}}new class{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(0,_.ky)(16);c._A?(this.agentIdentifier=t,this.sharedAggregator=new y({agentIdentifier:this.agentIdentifier}),this.features={},this.desiredFeatures=new Set(e.features||[]),this.desiredFeatures.add(m),Object.assign(this,(0,a.j)(this.agentIdentifier,e,e.loaderType||"agent")),this.start()):(0,l.Z)("Failed to initial the agent. Could not determine the runtime environment.")}get config(){return{info:(0,t.C5)(this.agentIdentifier),init:(0,t.P_)(this.agentIdentifier),loader_config:(0,t.DL)(this.agentIdentifier),runtime:(0,t.OP)(this.agentIdentifier)}}start(){const t="features";try{const r=n(this.agentIdentifier),i=[...this.desiredFeatures];i.sort(((t,r)=>e.p[t.featureName]-e.p[r.featureName])),i.forEach((t=>{if(r[t.featureName]||t.featureName===e.D.pageViewEvent){const n=function(t){switch(t){case e.D.ajax:return[e.D.jserrors];case e.D.sessionTrace:return[e.D.ajax,e.D.pageViewEvent];case e.D.sessionReplay:return[e.D.sessionTrace];case e.D.pageViewTiming:return[e.D.pageViewEvent];default:return[]}}(t.featureName);n.every((e=>r[e]))||(0,l.Z)("".concat(t.featureName," is enabled but one or more dependent features has been disabled (").concat((0,D.P)(n),"). This may cause unintended consequences or missing data...")),this.features[t.featureName]=new t(this.agentIdentifier,this.sharedAggregator)}})),(0,T.Qy)(this.agentIdentifier,this.features,t)}catch(e){(0,l.Z)("Failed to initialize all enabled instrument classes (agent aborted) -",e);for(const e in this.features)this.features[e].abortHandler?.();const r=(0,T.fP)();return delete r.initializedAgents[this.agentIdentifier]?.api,delete r.initializedAgents[this.agentIdentifier]?.[t],delete this.sharedAggregator,r.ee?.abort(),delete r.ee?.get(this.agentIdentifier),!1}}}({features:[J,m,S,class extends h{static featureName=oe;constructor(t,r){if(super(t,r,oe,!(arguments.length>2&&void 0!==arguments[2])||arguments[2]),!c.il)return;const n=this.ee;let i;(0,k.QU)(n),this.eventsEE=(0,k.em)(n),this.eventsEE.on(se,(function(e,t){this.bstStart=(0,p.z)()})),this.eventsEE.on(ae,(function(t,r){(0,s.p)("bst",[t[0],r,this.bstStart,(0,p.z)()],void 0,e.D.sessionTrace,n)})),n.on(ce+ne,(function(e){this.time=(0,p.z)(),this.startPath=location.pathname+location.hash})),n.on(ce+ie,(function(t){(0,s.p)("bstHist",[location.pathname+location.hash,this.startPath,this.time],void 0,e.D.sessionTrace,n)}));try{i=new PerformanceObserver((t=>{const r=t.getEntries();(0,s.p)(te,[r],void 0,e.D.sessionTrace,n)})),i.observe({type:re,buffered:!0})}catch(e){}this.importAggregator({resourceObserver:i})}},C,xe,B,class extends h{static featureName=de;constructor(e,r){if(super(e,r,de,!(arguments.length>2&&void 0!==arguments[2])||arguments[2]),!c.il)return;if(!(0,t.OP)(e).xhrWrappable)return;try{this.removeOnAbort=new AbortController}catch(e){}let n,i=0;const o=this.ee.get("tracer"),a=(0,k._L)(this.ee),s=(0,k.Lg)(this.ee),u=(0,k.BV)(this.ee),d=(0,k.Kf)(this.ee),f=this.ee.get("events"),l=(0,k.u5)(this.ee),h=(0,k.QU)(this.ee),g=(0,k.Gm)(this.ee);function m(e,t){h.emit("newURL",[""+window.location,t])}function v(){i++,n=window.location.hash,this[ve]=(0,p.z)()}function b(){i--,window.location.hash!==n&&m(0,!0);var e=(0,p.z)();this[pe]=~~this[pe]+e-this[ve],this[ye]=e}function y(e,t){e.on(t,(function(){this[t]=(0,p.z)()}))}this.ee.on(ve,v),s.on(be,v),a.on(be,v),this.ee.on(ye,b),s.on(ge,b),a.on(ge,b),this.ee.buffer([ve,ye,"xhr-resolved"],this.featureName),f.buffer([ve],this.featureName),u.buffer(["setTimeout"+le,"clearTimeout"+fe,ve],this.featureName),d.buffer([ve,"new-xhr","send-xhr"+fe],this.featureName),l.buffer([me+fe,me+"-done",me+he+fe,me+he+le],this.featureName),h.buffer(["newURL"],this.featureName),g.buffer([ve],this.featureName),s.buffer(["propagate",be,ge,"executor-err","resolve"+fe],this.featureName),o.buffer([ve,"no-"+ve],this.featureName),a.buffer(["new-jsonp","cb-start","jsonp-error","jsonp-end"],this.featureName),y(l,me+fe),y(l,me+"-done"),y(a,"new-jsonp"),y(a,"jsonp-end"),y(a,"cb-start"),h.on("pushState-end",m),h.on("replaceState-end",m),window.addEventListener("hashchange",m,(0,O.m$)(!0,this.removeOnAbort?.signal)),window.addEventListener("load",m,(0,O.m$)(!0,this.removeOnAbort?.signal)),window.addEventListener("popstate",(function(){m(0,i>1)}),(0,O.m$)(!0,this.removeOnAbort?.signal)),this.abortHandler=this.#e,this.importAggregator()}#e(){this.removeOnAbort?.abort(),this.abortHandler=void 0}}],loaderType:"spa"})})(),window.NRBA=o})(); window.jQuery || document.write(' ') CKEDITOR_BASEPATH='https://f1000research.com/js/vendor/ckeditor/' window.reactTheme = 'research'; window.MathJax = { CommonHTML: { linebreaks: { automatic: true } }, 'HTML-CSS': { linebreaks: { automatic: true } }, SVG: { linebreaks: { automatic: true } }, AuthorInit: function() { MathJax.Hub.Register.MessageHook('End Process', function () { let timeout = false; // holder for timeout id const delay = 250; // delay after event is "complete" to run callback const reflowMath = function() { const dispFormulas = document.querySelectorAll('.disp-formula.panel'); if (!dispFormulas) { return; } for (const dispFormula of dispFormulas) { const child = dispFormula.querySelector('.MathJax_Preview').nextSibling.firstChild; const isMultiline = MathJax.Hub.getAllJax(dispFormula)[0].root.isMultiline; if (dispFormula.offsetWidth < child.offsetWidth || isMultiline) { MathJax.Hub.Queue(['Rerender', MathJax.Hub, dispFormula]); } } }; window.addEventListener('resize', function() { clearTimeout(timeout); // clear the timeout timeout = setTimeout(reflowMath, delay); // start timing for event "completion" }); }); }, }; if (window.location.hash == '#_=_'){ window.location = window.location.href.split('#')[0] } !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function() {n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)} ;if(!f._fbq)f._fbq=n; n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, document,'script','https://connect.facebook.net/en_US/fbevents.js'); fbq('init', '1641728616063202'); fbq('track', "PixelInitialized", {}); (function(h,o,t,j,a,r){ h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)}; h._hjSettings={hjid:2318163,hjsv:6}; a=o.getElementsByTagName('head')[0]; r=o.createElement('script');r.async=1; r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv; a.appendChild(r); })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv='); search file_upload Submit your research search menu close search Browse Gateways & Collections How to Publish Submit your Research My Submissions Article Guidelines Article Guidelines (New Versions) Open Data, Software and Code Guidelines Open Data and Accessible Source Materials Guidelines (HSS) Open Data, Software and Code Guidelines (PSE) Prepublication Checks Production Process Posters and Slides Guidelines Document Guidelines Article Processing Charges Peer Review Finding Article Reviewers About How it Works For Reviewers Our Advisors Policies Glossary FAQs For Developers Newsroom Contact My Research Submissions Content and Tracking Alerts My Details Sign In file_upload Submit your research { "@context": "https://schema.org", "@type": "ScholarlyArticle", "mainEntityOfPage": { "@type": "WebPage", "@id": "https://f1000research.com/articles/15-498" }, "headline": "An Ontology‑Guided Drug–Herb–Food Interaction Checker with Mechanism‑Based Knowledge...", "datePublished": "2026-04-10T06:31:35", "dateModified": "2026-04-10T06:31:35", "author": [ { "@type": "Person", "name": "Nitchamon Kriengkraisuk" }, { "@type": "Person", "name": "Natapol Pornputtapong" } ], "publisher": { "@type": "Organization", "name": "F1000Research", "logo": { "@type": "ImageObject", "url": "https://f1000research.com/img/AMP/F1000Research_image.png", "height": 480, "width": 60 } }, "image": { "@type": "ImageObject", "url": "https://f1000research.com/img/AMP/F1000Research_image.png", "height": 1200, "width": 150 }, "description": " Background The concurrent use of prescription medicines with herbal products, dietary supplements, and foods is common, particularly among individuals with chronic diseases. Such real-world co-consumption generates interaction patterns beyond conventional drug–drug interactions. Existing interaction-checking systems remain largely drug-centric, rely on predefined interaction pairs, and provide limited mechanistic transparency and condition-aware interpretation. Consequently, they are poorly equipped to represent interactions influenced by health-related conditions such as age, renal impairment, pregnancy, and lifestyle. Methods We developed the Drug–Herb–Food Interaction Checker (DHFI-C), an ontology-guided knowledge graph platform for mechanism-based and condition-inclusive interaction assessment. Evidence was curated from open-access literature under PRISMA 2020 and transformed into a structured data model spanning drugs, herbs, foods, health-related conditions, and underlying diseases. Entities and interaction components were aligned with external biomedical ontologies where appropriate, whereas a DHFI mini-ontology captured underrepresented interaction concepts. The model was implemented as a graph-native representation paired with a deterministic inference engine that derives pharmacokinetic and pharmacodynamic interactions through shared mechanistic pathways. We evaluated the DHFI-C using a comprehensive, predefined use case. Results The knowledge graph integrated >24,000 drug entities, 92 herb/food entities, and 1,277 curated interaction records, along with mechanistic nodes for enzymes, transporters, and pharmacodynamic effects. The DHFI-C reports both curated and mechanism-inferred interactions with explicit provenance. In the use case, the system handled multi-domain interactions, produced condition-level interpretations, detected pharmacological effect duplication, decomposed combination products, and supported disease-driven drug suggestions. Outputs are available in consumer and expert presentation modes, with mechanistic explanations. Conclusions The DHFI-C provides a transparent and extensible framework for assessing drug–herb–food interactions through integrated, mechanism-based reasoning. By modeling health-related conditions as first-class entities and unifying heterogeneous domains within a single knowledge graph, the platform addresses the key limitations of existing interaction checkers and enables context-aware, mechanism-driven interpretation. " } { "@context": "http://schema.org", "@type": "BreadcrumbList", "itemListElement": [ { "@type": "ListItem", "position": "1", "item": { "@id": "https://f1000research.com/", "name": "Home" } }, { "@type": "ListItem", "position": "2", "item": { "@id": "https://f1000research.com/browse/articles", "name": "Browse" } }, { "@type": "ListItem", "position": "3", "item": { "@id": "https://f1000research.com/articles/15-498/v1", "name": "An Ontology‑Guided Drug–Herb–Food Interaction Checker with Mechanism‑Based..." } } ] } Home Browse An Ontology‑Guided Drug–Herb–Food Interaction Checker with Mechanism‑Based... ALL Metrics - Views Downloads Get PDF Get XML Cite How to cite this article Kriengkraisuk N and Pornputtapong N. An Ontology‑Guided Drug–Herb–Food Interaction Checker with Mechanism‑Based Knowledge Graph Reasoning and Condition‑Aware Interpretation [version 1; peer review: awaiting peer review] . F1000Research 2026, 15 :498 ( https://doi.org/10.12688/f1000research.179045.1 ) NOTE: If applicable, it is important to ensure the information in square brackets after the title is included in all citations of this article. Close Copy Citation Details Export Export Citation Sciwheel EndNote Ref. Manager Bibtex ProCite Sente EXPORT Select a format first Track Share ▬ ✚ Software Tool Article An Ontology‑Guided Drug–Herb–Food Interaction Checker with Mechanism‑Based Knowledge Graph Reasoning and Condition‑Aware Interpretation [version 1; peer review: awaiting peer review] Nitchamon Kriengkraisuk https://orcid.org/0009-0007-5201-4278 1 , Natapol Pornputtapong https://orcid.org/0000-0002-3833-0537 1 Nitchamon Kriengkraisuk https://orcid.org/0009-0007-5201-4278 1 , Natapol Pornputtapong https://orcid.org/0000-0002-3833-0537 1 PUBLISHED 10 Apr 2026 Author details Author details 1 Department of Biochemistry and Microbiology, Faculty of Pharmaceutical Sciences,Chulalongkorn University, Bangkok, 10330, Thailand Nitchamon Kriengkraisuk Roles: Conceptualization, Data Curation, Formal Analysis, Funding Acquisition, Investigation, Methodology, Software, Validation, Visualization, Writing – Original Draft Preparation Natapol Pornputtapong Roles: Conceptualization, Investigation, Methodology, Project Administration, Supervision, Writing – Review & Editing OPEN PEER REVIEW REVIEWER STATUS AWAITING PEER REVIEW Abstract Background The concurrent use of prescription medicines with herbal products, dietary supplements, and foods is common, particularly among individuals with chronic diseases. Such real-world co-consumption generates interaction patterns beyond conventional drug–drug interactions. Existing interaction-checking systems remain largely drug-centric, rely on predefined interaction pairs, and provide limited mechanistic transparency and condition-aware interpretation. Consequently, they are poorly equipped to represent interactions influenced by health-related conditions such as age, renal impairment, pregnancy, and lifestyle. Methods We developed the Drug–Herb–Food Interaction Checker (DHFI-C), an ontology-guided knowledge graph platform for mechanism-based and condition-inclusive interaction assessment. Evidence was curated from open-access literature under PRISMA 2020 and transformed into a structured data model spanning drugs, herbs, foods, health-related conditions, and underlying diseases. Entities and interaction components were aligned with external biomedical ontologies where appropriate, whereas a DHFI mini-ontology captured underrepresented interaction concepts. The model was implemented as a graph-native representation paired with a deterministic inference engine that derives pharmacokinetic and pharmacodynamic interactions through shared mechanistic pathways. We evaluated the DHFI-C using a comprehensive, predefined use case. Results The knowledge graph integrated >24,000 drug entities, 92 herb/food entities, and 1,277 curated interaction records, along with mechanistic nodes for enzymes, transporters, and pharmacodynamic effects. The DHFI-C reports both curated and mechanism-inferred interactions with explicit provenance. In the use case, the system handled multi-domain interactions, produced condition-level interpretations, detected pharmacological effect duplication, decomposed combination products, and supported disease-driven drug suggestions. Outputs are available in consumer and expert presentation modes, with mechanistic explanations. Conclusions The DHFI-C provides a transparent and extensible framework for assessing drug–herb–food interactions through integrated, mechanism-based reasoning. By modeling health-related conditions as first-class entities and unifying heterogeneous domains within a single knowledge graph, the platform addresses the key limitations of existing interaction checkers and enables context-aware, mechanism-driven interpretation. READ ALL READ LESS Keywords drug–herb–food interactions, knowledge graphs, ontology mapping, pharmacokinetics, pharmacodynamics, condition‑inclusive reasoning, interaction inference, FAIR principles Corresponding Author(s) Natapol Pornputtapong ( [email protected] ) Close Corresponding author: Natapol Pornputtapong Competing interests: No competing interests were disclosed. Grant information: This work was supported by The Second Century Fund (C2F), Chulalongkorn University, Thailand. The funders had no role in study design, data collection and analysis, decision to publish, or preparation of the manuscript. Copyright: © 2026 Kriengkraisuk N and Pornputtapong N. This is an open access article distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. How to cite: Kriengkraisuk N and Pornputtapong N. An Ontology‑Guided Drug–Herb–Food Interaction Checker with Mechanism‑Based Knowledge Graph Reasoning and Condition‑Aware Interpretation [version 1; peer review: awaiting peer review] . F1000Research 2026, 15 :498 ( https://doi.org/10.12688/f1000research.179045.1 ) First published: 10 Apr 2026, 15 :498 ( https://doi.org/10.12688/f1000research.179045.1 ) Latest published: 10 Apr 2026, 15 :498 ( https://doi.org/10.12688/f1000research.179045.1 ) 1. Introduction The use of herbal medicines, dietary supplements, and functional foods has grown sharply over the past decade, 1 especially among individuals with chronic diseases who often co-administer these products with prescription drugs. 2 This real-world poly-product use creates complex interaction patterns that conventional interaction checkers, typically optimized for drug–drug pairs, struggle to represent. Public tools generally provide pairwise textual summaries with limited coverage of herbs and foods and rarely incorporate health-related conditions (e.g., age, pregnancy, hepatic/renal impairment, and smoking) that materially influence PK/PD processes. Consequently, the interpretations are uniform rather than patient-context aware. Research-oriented resources such as FIDEO and DDInter 2.0 advance structure and coverage but leave important gaps in the data. FIDEO focuses on FAIR-aligned formalization 3 for food–drug interactions without mechanism-level reasoning or an end-user interface, 4 while DDInter 2.0 omits drug–herb interactions using structured knowledge and does not treat health-related conditions as explicit reasoning entities. 5 To address these limitations, we developed the Drug–Herb–Food Interaction Checker (DHFI-C), a mechanism-transparent, condition-integrated platform that unifies drug, herb, food, and condition domains within a single interoperable framework. DHFI-C combines an ontology-structured data model and knowledge graph with a deterministic inference engine capable of reasoning across shared enzymes, transporters, and pharmacodynamic pathways. Conditions (e.g., age, pregnancy, hepatic/renal impairment, and smoking) were modeled as first-class entities to enable context-aware interpretation. Supporting modules provide therapeutic duplication detection, combination drug decomposition, and disease-to-drug suggestions. By integrating these capabilities within a single interoperable platform, the DHFI-C is intended to support more transparent interaction assessments in settings where polypharmacy, herbal product use, and contextual clinical factors intersect, including patient self-checking, pharmacist consultation, and exploratory research on interaction mechanisms. 2. Methods 2.1 Overall system implementation workflow DHFI-C was implemented through a staged, FAIR-aligned workflow informed by extended FAIR concepts 3 , 6 – 8 that ensures transparent, reproducible construction of a condition-integrated interaction platform: (i) PRISMA-guided evidence acquisition and curation 9 ; (ii) structured data model definition separating entities, interaction records, and mechanistic context; (iii) ontology mapping for semantic normalization; (iv) graph-native knowledge graph construction; (v) rule-guided, mechanism-based inference; and (vi) supporting functional modules for realistic assessment, including disease-to-drug suggestion, combination decomposition, and effect-duplication detection. 2.2 Data acquisition and curation Searches of PubMed/MEDLINE, PubMed Central, and major open-access publishers (MDPI, Wiley, BMC) will be restricted to the period from January 2015 to December 2025. The search queries will combine terms focused on interactions and mechanisms (e.g., “drug interaction,” “herb–drug interaction,” “food–drug interaction,” “pharmacokinetics,” “pharmacodynamic interaction,” “enzyme inhibition,” and “enzyme induction”) with terms related to specific conditions, such as age, pregnancy, hepatic impairment, renal impairment, and smoking status. Boolean operators will be used to identify evidence where interaction outcomes are influenced by health-related conditions. The initial search yielded 312 records, with an additional 28 records identified through manual screening of reference lists and targeted, open-access sources. After deduplication, screening, and removal of 74 duplicate records, 266 unique records were screened based on their titles and abstracts. Of these, 221 records were excluded because of a lack of relevance to pharmacological interactions, absence of mechanistic or condition-dependent content, non-peer-reviewed status, or inappropriate study design. The remaining 45 articles were assessed for full-text eligibility. Following the full-text review, 25 articles were excluded because they did not provide extractable interaction data, lacked PK/PD relevance, or were incompatible with the structured data extraction. The literature selection process is illustrated in Figure 1 . Ultimately, 20 studies met all inclusion criteria and were included for data curation. These studies are cited collectively in References ( 10 – 29 ), with complete study-level metadata and extracted interaction fields provided in Extended Data 1. Figure 1. PRISMA 2020 flow diagram of literature selection and study inclusion. The diagram summarizes the literature identification, screening, eligibility assessment, and inclusion process used for evidence acquisition and curation. Records were identified through database searches and manual screening of reference lists and open-access sources. Following duplicate removal, titles and abstracts were screened for relevance to pharmacological interactions and mechanistic or condition-dependent evidence. Full-text articles were then assessed for eligibility, resulting in the final set of studies included for structured data curation. 2.3 Structured data model implementation A structured data model was developed to facilitate condition-integrated interaction modeling across the domains of drugs, herbs, food, and health-related conditions. This model distinguishes entities, interaction records, and mechanistic contexts into separate yet interconnected components, allowing for the reproducible transformation of curated evidence into the construction and inference of downstream knowledge graphs. Entities were modeled as first-class objects across five categories: drugs, drug classes, products (herbs and foods), health-related conditions, and underlying diseases. Drugs were represented as individual active pharmaceutical entities, and drug classes were implemented as separate entities to support class-level grouping and reference. The products encompassed both herbal and food entities and were treated uniformly at the entity level. Health-related conditions, including age, pregnancy, hepatic impairment, renal impairment, and smoking status, were implemented as controlled entities using fixed semantic identifiers to ensure consistent usage across interaction records. Underlying diseases represent chronic disease contexts, such as diabetes mellitus, hyperlipidemia, hypertension, and cardiovascular diseases, and are implemented to support disease-driven input assistance. Each entity is assigned a persistent internal identifier according to a domain-specific scheme. Drugs receive identifiers like ENT_000001, drug classes are labeled as ENT_100001, and products, including herbs and foods, are designated as ENT_200001. Conditions are represented with controlled identifiers such as ENT_COND_PREGNANCY, ENT_COND_HEPATIC_IMPAIRMENT, ENT_COND_RENAL_IMPAIRMENT, ENT_COND_ELDERLY, and ENT_COND_SMOKING, while underlying diseases are marked as ENT_ULD_000001. These identifiers offer stable internal references that are independent of external ontology identifiers, thus facilitating reproducible data transformation and system evolution. Interaction records link subject and object entities with explicit roles and directionality. Each interaction record includes a unique interaction identifier (e.g., INT_000001), a pair type indicating the interacting domains (Drug–Drug, Herb–Drug, Food–Drug, or Condition–Drug), subject and object entity identifiers, a mechanistic interaction type descriptor, a mechanism domain label (PK or PD), and reference provenance. This structure allows the interaction interpretation to be derived from a mechanistic context rather than relying solely on predefined interaction pairs. The mechanistic context was implemented separately from the interaction records and was organized into two primary domains. The pharmacokinetic (PK) domain captures the biological determinants of drug disposition, including phase I and II enzymes, such as UDP-glucuronosyltransferases, transporters, and metabolism-related cofactors, such as glutathione. The pharmacodynamic (PD) domain captures pharmacological effect descriptors, including effect types relevant to interaction interpretation and duplication. Mechanistic descriptors are linked to interaction records through structured attributes rather than being embedded directly as entities, enabling consistent classification and downstream reasoning. The structured data model was implemented using normalized tabular representations to facilitate validation, version control, and reproducible transformations into a knowledge graph, as described in the following sections. 2.4 Ontology mapping implementation Ontology mapping followed rule-guided alignment while preserving internal identifiers as the primary reference system of the DHFI. Mapping was treated as a secondary semantic layer applied after structured data modeling to ensure that ontology alignment does not alter internal data integrity or interaction logic. 2.4.1 Mapping strategy and general rules Ontology resources were selected based on predefined criteria, including domain relevance, community adoption, identifier stability, and suitability for pharmacokinetic or pharmacodynamic interpretations. Mapping was applied by entity category, and only when a suitable external ontology provided stable concept-level coverage for that category. For each entity, ontology alignment followed a consistent procedure in which curated canonical labels and synonyms from the structured data model were first used to identify exact or semantically close matches in the candidate ontologies. When an appropriate external identifier was available, the entity was linked to the ontology through an explicit mapping association. When no suitable external reference existed, the entity was retained using a persistent internal identifier and represented within the DHFI mini-ontology to preserve semantic consistency without forcing mismatched alignment. In all cases, ontology mappings were recorded as explicit associations without replacing internal identifiers, ensuring that the internal identifiers remained the primary reference system for data integrity and downstream reasoning. This strategy ensures that ontology alignment enhances semantic interoperability while maintaining reproducibility, extensibility, and independence from specific ontological versions. 2.4.2 Drug and drug class mapping Drug entities were mapped to the National Cancer Institute Thesaurus (NCIT) 30 to support the standardized representation of active pharmaceutical ingredients and interoperability with established biomedical resources. Mapping was performed at the active ingredient level, independent of the formulation or brand representation. Drug class entities were derived from curated parent concepts of individual drug entities within the NCIT hierarchy, restricted to drug- and pharmacologic substance–related categories. Parent concepts from non-drug semantic domains were excluded, and duplicate class concepts were consolidated to form a non-redundant set of drug class entities. Although drug class entities were derived from individual drug mappings, class-level ontology mappings were maintained as explicit and independent semantic references, and class properties were not automatically inferred from member drugs. This design preserves the explicit class-level semantics and prevents unintended hierarchical inference during downstream reasoning. In all cases, internal drug and drug class identifiers were the primary keys. Drugs and drug classes were mapped to NCIT identifiers stored as linked semantic references. 2.4.3 Product entity mapping (Herbs and foods) Product entities encompassing herbs and foods were mapped using domain-specific external ontologies. Herbal entities were aligned to NCBI Taxonomy identifiers at the species level, where applicable, enabling standardized taxonomic representation and cross-resource compatibility. 31 Food entities were aligned with FoodOn concepts to support consistent food classification and interoperability. 32 When suitable external identifiers were not available, such as for food preparations, mixtures, or exposure-related concepts, product entities were retained using internal identifiers within the DHFI mini-ontology. These cases were explicitly recorded to preserve semantic consistency without forcing a mismatched alignment. 2.4.4 Condition and underlying disease mapping Health-related condition entities, including age, pregnancy, hepatic impairment, renal impairment, and smoking status, were not mapped to external disease ontologies. These entities represent physiological or behavioral modifiers rather than formal disease diagnoses. Accordingly, condition entities were represented using a domain-specific controlled ontology (DHFI mini-ontology) defined by persistent internal identifiers, resolvable URIs, controlled labels, and mechanistic descriptions. Underlying disease entities were implemented to support disease-driven input assistance and were mapped to the MONDO Disease Ontology at the disease concept level. 33 Mapping was applied to support standardized disease naming and interoperability, but was not directly used as a mechanistic inference target. 2.4.5 Mechanistic interaction types and target mapping Mechanistic interaction types were represented using a controlled classification scheme. Where available, the interaction types were aligned with the Drug Interaction Ontology (DINTO). 34 To accommodate interaction patterns not covered by DINTO, such as physiological change–based effects and explicit no-interaction assertions, the interaction type set was extended using the DHFI mini-ontology. Each interaction type was assigned a persistent identifier and annotated with its mechanism domain (pharmacokinetic, pharmacodynamic, or combined) and default semantic interpretation. Interaction records directly reference these identifiers, enabling consistent classification and reuse across inference use cases. Pharmacokinetic targets were mapped at both the protein and protein family levels. Individual enzymes and transporters were aligned to UniProt identifiers, 35 whereas protein family or functional domain information was aligned to Pfam accessions. 36 Pharmacodynamic effect descriptors were represented using the DHFI mini-ontology owing to the absence of a mature, widely adopted external ontology suitable for interaction-level pharmacological effect representation. 2.4.6 Mapping storage and decoupling strategy All ontology mappings were stored as explicit associations linked to internal identifiers, including the mapping source, external identifier, and mapping relation. This decoupled mapping strategy allows the semantic layer to evolve independently of the core data model, supporting FAIR-aligned interoperability, controlled extensibility, and future ontology updates without disrupting the system logic. 2.5 Knowledge graph construction and graph-native representation Following structured data modeling and ontology mapping, a knowledge graph was constructed to serve as the core representation layer of the DHFI. Graph construction was implemented as a deterministic transformation process that converted normalized tabular data into a graph-native structure, preserving entity categories, interaction semantics, mechanistic context, and ontology-aligned references in an inference-ready format. Graphs were constructed by instantiating entities as typed nodes according to their predefined categories, including drugs, drug classes, products (herbs and foods), health-related conditions, underlying diseases, pharmacokinetic targets, and pharmacodynamic effect descriptors. Each node was created using its persistent internal identifier as the primary key and annotated with entity-type metadata and, where applicable, linked external ontology references. Node typing was explicitly preserved during graph instantiation to enable domain-constrained querying and rule-guided inferences in the subsequent stages. Interaction records were transformed into directed edges connecting the subject and object entity nodes. Directionality was preserved based on the subject–object roles defined in structured interaction records. Each interaction edge was annotated with structured attributes, including an interaction type identifier, mechanism domain (pharmacokinetic, pharmacodynamic, or combined), and reference provenance. Interaction types were represented using controlled identifiers aligned with external ontologies or the DHFI mini-ontology, ensuring consistent classification across the curated and inferred interactions. The mechanistic context was explicitly encoded within the graph to support inferences beyond the enumerated interaction pairs. Pharmacokinetic targets, including enzymes, transporters, phase II enzymes, and metabolism-related cofactors, were instantiated as intermediate nodes and linked to relevant drug, product, or condition entities through mechanistic relationships, such as inhibition, induction, or modulation. Pharmacodynamic effects were instantiated as effect nodes and connected to entities through effect-direction relationships that represented increases, decreases, or antagonistic actions on physiological functions. These mechanistic structures were encoded independently of the specific interaction pairs to enable shared-pathway reasoning during inference. The resulting graph-native representation supports controlled multi-hop traversal, mechanism-constrained reasoning, and explicit traceability between the interaction outputs and underlying evidence structures. By preserving entity typing, interaction semantics, mechanistic mediation, and ontology-aligned references during graph construction, the DHFI establishes a reproducible and extensible foundation for the mechanism-based inference engine described in the following section. 2.6 Mechanism-based inference engine A Mechanism-Based Inference Engine was developed to derive interaction interpretations through explicit pharmacokinetic and pharmacodynamic mechanisms encoded within the knowledge graph, rather than relying solely on pre-enumerated interaction pairs. The engine operates deterministically on the graph-native representation described in Section 2.5 and employs rule-guided traversal to identify mechanistically plausible interactions within a given assessment context. Inference execution starts by constructing an interaction query context, which includes a resolved set of entity nodes representing drugs, products, health-related conditions, and underlying diseases provided as input. For each entity in this query context, the engine directly retrieves curated interaction edges linked to the entity and identifies associated mechanistic nodes, such as pharmacokinetic targets and pharmacodynamic effect descriptors. This initial retrieval step ensures that curated evidence is explicitly incorporated before any inference-driven interpretation. Mechanism-based inference is conducted through constrained graph traversal, guided by mechanism domain labels and semantic interaction types. Traversal rules are applied separately to the pharmacokinetic and pharmacodynamic domains to prevent inappropriate cross-domain inferences. In the pharmacokinetic domain, inference is triggered when two or more entities are connected to a shared pharmacokinetic target through complementary mechanistic relationships such as inhibition, induction, or substrate association. When such patterns are detected, the engine derives a structured pharmacokinetic interaction interpretation consistent with altered clearance or exposure based on predefined interaction type semantics. Pharmacodynamic inference is performed by identifying overlapping, opposing, or reinforcing pharmacodynamic effect nodes associated with co-administered entities. Effect-direction relationships were evaluated to determine whether the combined effects corresponded to potentiation, antagonism, or additive action. This approach enables pharmacodynamic interaction interpretation even in the absence of a directly curated interaction record for a specific entity pair while preserving explicit mechanistic justification. To maintain transparency and reproducibility, the inferred interaction outcomes were explicitly distinguished from the directly curated interaction records. Each interaction result is annotated with its derivation pathway, indicating whether it originates from curated evidence or mechanism-based inference, and is linked to specific graph paths, interaction types, and reference-associated entities. The inference engine operates as a deterministic, rule-based system over explicitly encoded graph structures and controlled interaction-type semantics, producing structured mechanistic interpretations rather than probabilistic predictions or quantitative risk scores. This design ensures reproducible interaction interpretation, clear traceability from output to underlying mechanistic evidence, and extensibility as additional interaction types, mechanistic descriptors, or condition entities are incorporated into the knowledge graph. 2.7 Supporting functional modules In addition to the core mechanism-based inference engine, the DHFI incorporates supporting functional modules implemented as modular components operating on the same structured data model and knowledge graph. These modules were developed to improve the accuracy of user input, mitigate the limitations arising from insufficient or incomplete interaction evidence in the literature, and enhance the clarity and interpretability of interaction outputs for end users. Disease-to-Drug Suggestion Module The Disease-to-Drug Suggestion module was implemented as an input-support mechanism to improve the completeness and correctness of interaction assessment use cases. A limited set of underlying disease entities (initially diabetes mellitus, hyperlipidemia, hypertension, and cardiovascular diseases) was defined, and each disease entity was linked to representative drug substances curated from the WHO Model List of Essential Medicines (24th list, 2025). 37 Disease–drug associations were encoded as reference-level relationships and were used solely to suggest candidate drug entities during the input construction. These associations do not participate in mechanism-based inferences or causal interpretations. Drug Combination Handling Module The Drug Combination Handling module was implemented to enable interaction assessment for multi-ingredient products in the absence of sufficient combination-level interaction evidence. Combination products are represented as composite entities linked to their constituent active entities through explicit composition relationships. During the assessment, composite entities were deterministically decomposed into individual active components, which were evaluated independently using the same mechanism-based inference process applied to single-ingredient entities. The decomposed components were annotated with provenance tags indicating their origin from a combination product to preserve traceability Pharmacological Effect Duplication Detection Module The Pharmacological Effect Duplication Detection module was implemented as a rule-based component operating on pharmacodynamic effect descriptors encoded in the knowledge graph. Pharmacodynamic effects were represented as structured effect entities linked to drugs, herbs, or products through effect–direction relationships. During the assessment, overlapping or functionally equivalent pharmacodynamic effect descriptors across co-administered entities were identified and reported as pharmacological effect duplication, with drug class information incorporated as an additional abstraction to support duplication detection. 2.8 Operation The DHFI-C web interface is accessible via a public server endpoint ( http://34.142.141.239/ ). The system has been tested on modern web browsers, with Google Chrome recommended for optimal performance. 2.9 Evaluation design and use case-based assessment The DHFI evaluation aimed to determine if the system aligns with methodological capabilities outlined in its design objectives. A capability-based evaluation framework was employed, focusing on the presence, integration, and transparency of essential functionalities related to mechanism-based reasoning, condition-inclusive interaction modeling, and multi-domain interaction integration. A use-case-based evaluation strategy was implemented to mirror complex interaction assessment tasks. Instead of assessing functions separately, a single integrated use case was developed to test the interaction-assessment workflow within a cohesive context. The evaluation use case was predefined to include drug–drug, herb–drug, food–drug, and condition–drug interactions, encompassing pharmacokinetic and pharmacodynamic mechanisms. This use case involves multiple interacting substances, health conditions, and underlying diseases, allowing observation of condition-inclusive interaction interpretation and cross-domain integration within a unified workflow. The use case definition was established before evaluation and remained unchanged based on system outputs, ensuring methodological independence between evaluation design and observed results. The evaluation criteria were specified as discrete capability dimensions derived from the methodological objectives of the system. These include support for mechanism-based inference beyond explicitly curated interaction pairs, explicit distinction between curated and inferred interactions, condition-level interaction interpretation using health-related condition entities, handling of multi-ingredient drug combinations, detection of pharmacological effect duplication, disease-driven input support, and provision of machine-readable ontology-aligned outputs. The capabilities were assessed qualitatively based on demonstrable system behavior and observable structured outputs. The evaluation results are reported using structured qualitative representations, including use case walkthrough descriptions, representative system outputs, and capability-oriented summary tables, providing a transparent and traceable basis for the assessment presented in the Results section. 2.10 Use of artificial intelligence tools The authors used ChatGPT (OpenAI, GPT-5) to assist with structural organization and language refinement of the manuscript to improve clarity and organization. Paperpal (version 4.11.0) was used for grammar and language checking. All scientific content, methodological decisions, data interpretation, and conclusions were independently developed, critically reviewed, and approved by the authors. 2.11 Ethics statement This study did not involve human participants, patient data, or identifiable personal information. The research was conducted using publicly available literature and structured datasets derived from published sources. Therefore, ethical approval from an institutional review board (IRB) and informed consent from participants were not required. 3. Results 3.1 System overview and operational architecture Figure 2 presents an overview of the DHFI-C system architecture, illustrating how user inputs are processed through ontology-aligned data layers and a mechanism-based inference pipeline to generate interaction-assessment outputs. Figure 2. System architecture of the Drug–Herb–Food Interaction Checker (DHFI-C). The figure illustrates the overall operational architecture of DHFI-C, comprising a backend and frontend layer. User inputs—including drugs, herbs, foods, and health-related conditions—are collected through dedicated frontend modules and processed via an Interaction and Inference API. The backend integrates an ontology mapping layer, a knowledge graph layer, and a graph database to support graph-native reasoning. A mechanism-based inference engine operates over the knowledge graph and is complemented by supporting functional modules, including disease-to-drug suggestion, drug combination handling, and pharmacological effect duplication detection. Interaction assessment outputs are delivered through two presentation modes: a public mode providing simplified summaries and basic advice, and an expert mode offering detailed mechanistic pathways, PK/PD explanations, ontology paths, evidence tags, and reference links. The system is organized into backend and frontend architectures. The backend integrates a graph database, ontology mapping layer, and knowledge graph layer, which together serve as the semantic foundation for the interaction assessment. Interaction queries are handled through a dedicated Interaction and Inference API that mediates communication between the user-facing web interface and mechanism-based inference engine. This design enables interaction reasoning to be performed directly over a graph-native representation of drugs, products (herbs and foods), health-related conditions, and mechanisms. The mechanism-based inference engine is complemented by supporting functional modules, including disease-to-drug suggestions, drug combination handling, and pharmacological effect duplication detection. These modules contribute complementary functionalities while remaining decoupled from the core inference logic. User inputs are collected through dedicated frontend modules for multi-entity search and health profile specification, allowing users to provide substance combinations with relevant physiological or clinical contexts. The interaction assessment results are delivered through two presentation modes: public mode, which provides simplified summaries and basic advice, and expert mode, which offers detailed mechanistic pathways, PK/PD explanations, evidence tagging, ontology paths, and reference links. This dual-mode output design allows the same inference logic to support both consumer-facing interpretation and expert-level transparency while preserving consistency across system outputs. 3.2 Dataset composition and interaction coverage The scale and composition of the DHFI-C database are summarized in Tables 1 and 2 . Table 1. Dataset composition and entity coverage of DHFI-C. Category Component Count Entities Drug entities 24,216 Product entities (herbs + foods) 92 Drug Classes 1,009 Protein targets & transporters 21 Pharmacological-effect terms 8 Interaction Dataset Interaction records 1,277 Target–entity associations 383 Pharmacological-effect associations 39 Table 2. Classification of interaction records by pair type and mechanism. Category Type Count Interaction Pair Types Drug–Drug 443 Herb–Drug 514 Food–Drug 159 Condition–Drug 161 Mechanistic Interaction Types Physiological effect antagonism 17 Physiological effect potentiation 146 Enzyme activity induction 132 Enzyme activity inhibition 569 Non-absorbable complex formation 22 Transporter activity induction 32 Transporter activity inhibition 240 Physiological change effect potentiation 20 Physiological change effect antagonism 71 No interaction 28 As shown in Table 1 , the database contains 24,216 drug entities representing active pharmaceutical substances and related drug components, alongside 92 product entities encompassing herbs and foods. In addition, 1,009 drug class entities were included to support the class-level grouping and reference. The mechanistic layer of the dataset comprised 21 protein targets and transporters and eight pharmacological-effect terms, which were used to support mechanism-based interaction interpretation and duplication detection. The curated interaction dataset included 1,277 interaction records, complemented by 383 target–entity associations and 39 pharmacological effect associations, forming the structural basis for graph-based inference. Table 2 summarizes the classification of interaction records by interaction pair and mechanistic interaction types. The interaction pair coverage spans multiple domains, including 443 drug–drug interactions, 514 herb–drug interactions, 159 food–drug interactions, and 161 condition–drug interactions, reflecting the multi-domain integration capability of the system. Mechanistic interaction types are distributed across pharmacokinetic and pharmacodynamic categories. Pharmacokinetic mechanisms were predominantly represented by enzyme activity inhibition (569 records) and transporter activity inhibition (240 records), with additional representation of enzyme activity induction (132 records), transporter activity induction (32 records), and non-absorbable complex formation (22 records). Pharmacodynamic and physiological mechanisms included physiological effect potentiation (146 records), physiological effect antagonism (17 records), physiological change effect potentiation (20 records), and physiological change effect antagonism (71 records), reflecting a range of effect-based interaction patterns captured in the dataset. A subset of 28 records was explicitly classified as having no interaction, enabling the representation of evidence-supported non-interacting pairs. Together, these results demonstrate that the DHFI-C supports broad interaction coverage across substances, conditions, and mechanistic domains while maintaining a structured and interpretable representation suitable for mechanism-based reasoning and transparent interaction assessment. 3.3 Ontology mapping coverage and semantic alignment The ontology mapping coverage across dataset domains is summarized in Table 3 , reflecting the extent to which DHFI entities and interaction components were aligned with external biomedical ontologies following the controlled, rule-guided mapping strategy described in Section 2.4 . Table 3. Ontology mapping coverage across dataset domains. Domain Total items Mapped Coverage (%) Drug entities (NCIT) 24,216 24,216 100% Drug Class entities (NCIT) 1,009 1,009 100% Products: herbs + foods (NCBITaxon/FOODON) 92 74 80.4% Mechanistic Interaction Types (DINTO) 12 9 75% Protein targets (UNIPROT/Pfam) 17 17 100% Pharmacological-effect terms 8 0 0% Underlying diseases (MONDO) 4 4 100% All drug entities (24,216 items) and drug class entities (1,009 items) were successfully mapped to the National Cancer Institute Thesaurus (NCIT), resulting in 100% external ontology coverage in both domains. Mapping was performed at the active ingredient and class concept levels, while preserving internal identifiers as primary references. Product entities representing herbs and foods demonstrated partial external ontology coverage (80.4% of the total). Of the 92 product entities included in the dataset, 74 were mapped to external ontologies: herbal entities to NCBI Taxonomy at the species level and food entities to FoodOn concepts. The remaining product entities corresponded to food preparations, mixtures, or exposure-related concepts for which no suitable stable external identifiers were available and were therefore retained using DHFI mini-ontology. Mechanistic interaction types demonstrated partial alignment with the Drug Interaction Ontology (DINTO), with nine of 12 interaction types mapped, yielding 75% coverage for this domain. These mappings support the standardized representation of common interaction mechanisms, whereas the remaining interaction types are represented using the DHFI mini-ontology to accommodate patterns not fully captured by DINTO. Pharmacokinetic targets, including enzymes and transporters, were fully mapped to external protein reference systems, with 100% coverage achieved through alignment with UniProt identifiers and Pfam accessions at the protein and protein family levels. Underlying disease entities used for disease-driven input assistance were fully mapped to the MONDO Disease Ontology, resulting in 100% external ontology coverage. These mappings support standardized disease naming and interoperability without direct participation in mechanistic inference. In contrast, no pharmacological effect terms were mapped to external ontologies (0% coverage). All pharmacological effect descriptors were represented exclusively using the DHFI mini-ontology, reflecting the absence of a mature, widely adopted external ontology capable of representing interaction-level pharmacodynamic effects with sufficient semantic granularity. These effect terms were fully integrated into the knowledge graph and inference process using controlled internal identifiers, as described in Section 2.4.5 . Overall, the ontology mapping coverage varied by domain according to the availability and suitability of external reference ontologies. External mappings were applied where stable and semantically appropriate resources existed, whereas the DHFI mini-ontology was used to ensure consistent representation for domains lacking adequate external ontology support. 3.4 Knowledge graph assembly and structural validation The DHFI knowledge graph comprised approximately 232,630 RDF statements, including 202,540 explicitly asserted triples and 30,090 inference-derived triples, resulting in an expansion ratio of 1.15. The graph integrates drugs, herbs, foods, health-related conditions, underlying diseases, pharmacokinetic targets, transporters, pharmacodynamic effects, and drug class entities into a unified semantic structure. Structural validation was performed using SPARQL-based integrity checks to confirm the correct node typing, domain–range consistency of relationships, and preservation of interaction directionality. Validation queries further verified the existence of valid traversal paths for pharmacokinetic mechanisms, including enzyme- and transporter-mediated interaction pathways. Multi-step mechanistic paths, such as herbal inhibitor → shared metabolic enzyme → drug substrate, were successfully detected through controlled graph traversal, confirming that the constructed knowledge graph supports the mechanism-constrained reasoning required for downstream inference tasks. 3.5 Comprehensive use case demonstration To demonstrate the integrated capabilities of DHFI-C, a comprehensive use case was constructed to reflect a realistic and clinically complex interaction assessment task. The use case was designed to simultaneously exercise disease-driven input assistance, mechanism-based inference, condition-level interaction interpretation, and multi-domain interaction integration within a single workflow. Use Case description A 72-year-old male with stage 3 chronic kidney disease and chronic cardiovascular disease with atrial fibrillation was assessed using DHFI-C. The patient is prescribed metoprolol, warfarin, digoxin, lamotrigine, and a fixed-dose combination product containing ezetimibe/simvastatin. The patient also reported chronic knee pain and was self-administering ibuprofen, while naproxen was recently prescribed by a physician. In addition, the patient self-administers Ginkgo biloba supplements, regularly consumes grapefruit and goji berry juice, and uses melatonin for sleep. The patient was an active smoker. This regimen encompasses drug–drug, herb–drug, food–drug, condition–drug, and disease-driven input contexts involving both pharmacokinetic and pharmacodynamic mechanisms, as well as condition-dependent modifiers related to age, renal impairment, smoking status, and chronic disease. The complete operational workflow of DHFI-C as applied to this comprehensive use case is illustrated in Figure 3A–B . The figure summarizes the end-to-end processing pipeline, including entity normalization, curated interaction retrieval, mechanism-based inference, and integrated dual-mode output presentation. Figure 3. End-to-end DHFI-C workflow and integrated interaction output. (A) Upstream interaction assessment pipeline. User inputs include health-related conditions (e.g., age, renal impairment, smoking) and substances (drugs, herbs, foods). Step 1 performs entity recognition and normalization through the health profile and multi-entity search modules, with optional disease-to-drug suggestion support. Step 2 retrieves curated interaction records stored in the knowledge graph. Step 3 performs mechanism-based inference across shared pharmacokinetic (PK) and pharmacodynamic (PD) pathways, such as enzyme- and transporter-mediated mechanisms. (B) Integrated output and interpretation layer. Results are presented in dual modes. The public mode provides simplified summaries, basic advice, and evidence tags. The expert mode displays detailed mechanistic pathways (PK/PD), ontology paths, reference links, and explicit distinction between curated database interactions and mechanism-based inferred interactions. Supporting functional modules include combination drug handling and pharmacological effect duplication detection. Step 1: Entity recognition and normalization. Upon input, DHFI-C identified and normalized all substances, health-related conditions, and underlying diseases to standardized entity representations within the knowledge graph. Prescription drugs, herbal products, food items, smoking status, advanced age, and chronic kidney disease were resolved to their corresponding entities. For the Disease-to-Drug Suggestion module, when “Cardiovascular disease” was entered as an underlying disease, the module returned a shortlist of representative antiarrhythmic medicines based on curated condition–drug associations, allowing digoxin—which is part of the patient’s existing regimen—to be selected without manual entry of the drug name. Combination drug formulations were decomposed into their constituent active components, enabling ezetimibe and simvastatin to be treated as independent entities while preserving traceability to the original combination product. All entities were linked to relevant drug classes, protein targets, metabolic enzymes, transporters, pharmacodynamic effect descriptors, and conditions. The system recognized the presence of a multi-domain interaction context rather than treating interactions as isolated substance pairs. Step 2: Curated interaction retrieval. The system retrieves curated interaction records supported by structured evidence. These included pharmacokinetic interactions between simvastatin and grapefruit mediated by CYP3A4 inhibition, and pharmacodynamic interactions between warfarin and G. biloba associated with increased bleeding risk. In addition, pharmacodynamic overlap between ibuprofen and naproxen was identified based on shared anti-inflammatory and analgesic effects. Condition-level reasoning further contextualizes the interpretation of interactions by incorporating physiological modifiers. Advanced age was associated with altered pharmacodynamic sensitivity, resulting in potentiation of beta-blocker–related effects for metoprolol. Chronic kidney disease modifies the pharmacokinetics of digoxin by reducing clearance and increasing systemic exposure. Smoking status was evaluated as a condition-level modifier for relevant drug entities. While smoking-related induction mechanisms were considered for multiple substrates, lamotrigine was not considered to have clinically meaningful interactions with smoking-related pathways. This outcome was explicitly represented as a no-interaction interpretation, rather than being omitted. All curated interactions were explicitly labeled and distinguished from the inferred results. Step 3: Mechanism-based inference across shared pathways. Beyond curated records, DHFI-C generated inferred interactions through shared mechanistic pathways encoded within the knowledge graph. Smoking status was associated with the induction of CYP1A2-related mechanisms, leading to inferred pharmacokinetic interactions affecting melatonin, which is a CYP1A2 substrate. In addition, Goji berry juice, represented as a CYP2C9 inhibitor, enabled mechanistic inference of altered warfarin exposure through shared metabolic pathways. These inferred interactions were generated independently of pre-enumerated interaction pairs and were accompanied by transparent explanations tracing the underlying mechanistic reasoning paths within a knowledge graph. Step 4: Integrated output and interpretation. The final interaction output presents a consolidated view of curated interactions, inferred interactions, condition-mediated interpretations, pharmacological effect duplication alerts, and no-interaction assertions across drug–drug, herb–drug, food–drug, condition–drug, and disease-driven input domains. The consolidated interaction outputs generated for this use case are listed in Table 4 . Table 4. Representative interaction outputs from the comprehensive use case. Interaction domain Subject entity Object entity Interaction type Mechanism basis Interaction source Food–Drug Grapefruit Simvastatin Enzyme activity inhibition CYP3A4 inhibition Curated evidence Herb–Drug Ginkgo Warfarin Physiological effect potentiation Antiplatelet effect potentiation Curated evidence Condition–Drug Advanced age Metoprolol Physiological change effect potentiation Increased pharmacodynamic sensitivity (beta-blocker) Curated evidence Condition–Drug Renal impairment Digoxin Physiological change effect potentiation Reduced renal elimination Curated evidence Condition–Drug Smoking Lamotrigine No interaction No significant mechanistic link identified Curated evidence Condition–Drug Smoking Melatonin Enzyme activity induction CYP1A2 induction Mechanistic inference Condition–Drug Smoking Warfarin Enzyme activity induction CYP1A2 induction Mechanistic inference Condition–Drug Smoking Naproxen Enzyme activity induction CYP1A2 induction Mechanistic inference Food–Drug Goji berry juice Warfarin Enzyme activity inhibition CYP2C9 inhibition Mechanistic inference Food–Drug Grapefruit Digoxin Transporter activity inhibition P-glycoprotein inhibition Mechanistic inference Food–Drug Goji berry juice Simvastatin Enzyme activity inhibition CYP3A4 inhibition Mechanistic inference Herb–Drug Ginkgo Simvastatin Enzyme activity induction CYP3A4 induction Mechanistic inference Pharmacological Effects Duplication Ibuprofen Naproxen Pharmacological effects duplication Shared drug class: cyclooxygenase inhibitors Drug class Evidence-supported interactions and mechanism-inferred interpretations were clearly differentiated. Supported no-interaction outcomes were explicitly reported when available evidence indicated no clinically relevant interaction, whereas entity pairs for which no interaction output was generated were clearly interpreted as reflecting insufficient or unavailable evidence rather than a confirmed absence of interaction. This distinction was communicated within the output to ensure a transparent interpretation of system results. Mechanistic explanations and the decomposition of combination drug products are displayed cohesively. This integrated presentation enabled users to understand not only which interactions were identified but also how pharmacokinetic, pharmacodynamic, physiological, disease-context, and formulation-level factors jointly shaped interaction relevance within the specific use case. 3.6 Capability-based evaluation summary This section summarizes the system-level capabilities demonstrated by DHFI-C through a comprehensive use case evaluation. The assessment confirmed that DHFI-C supports mechanism-based interaction reasoning grounded in explicit pharmacokinetic and pharmacodynamic pathways, with clear distinction between curated evidence and mechanism-based inferred interactions. The system consistently provides transparent mechanistic explanations, enabling the traceable interpretation of interaction outcomes. The capabilities evaluated in the use case are summarized in Table 5 . Table 5. Capability-based evaluation summary demonstrated by the comprehensive use case. Use-case-driven capability Capability assessed DHFI-C support Evidence demonstrated in use case Multi-domain interaction checking (drug, herb, food, condition) Unified handling of heterogeneous interaction domains ✓ Supported Single integrated use case (Section 3.6 ) PK/PD mechanism inference beyond explicit pairs Inference via shared enzymes, transporters, and targets ✓ Supported CYP1A2 (smoking–melatonin), CYP2C9 (goji berry juice–warfarin) Explicit distinction: curated vs inferred interactions Separate labeling of evidence-based and inferred results ✓ Supported Clear differentiation in use case outputs Condition-level interaction interpretation Mechanistic modification based on physiological conditions ✓ Supported Age–metoprolol, Renal impairment–digoxin interpretation Therapeutic duplication detection Identification of overlapping pharmacological effects ✓ Supported Demonstrated via pharmacodynamic effect analysis Drug combination decomposition Decomposition of multi-ingredient products into active components ✓ Supported Drug inputs handled at the component level Disease-to-drug suggestion support Disease-driven input assistance for medication selection ✓ Supported Cardiovascular disease → digoxin inclusion Consumer and professional user views Dual-mode presentation of interaction outputs ✓ Supported Public vs expert-oriented explanations Machine-readable/ontology-aligned output Structured, ontology-linked interaction representation ✓ Supported Mechanistic paths and ontology references in output 4. Discussion 4.1 Dataset characteristics and implications for interaction interpretation The characteristics of the DHFI-C dataset distinguish it from existing drug–drug and food–drug interaction resources in several important ways. A defining feature of the platform is the scale and granularity of its drug entity representation, which comprises over 24,000 drug entities derived from the National Cancer Institute Thesaurus (NCIT). 30 This level of granularity reflects NCIT’s fine-grained subdivision of pharmacologic substances, including explicit representation of salt forms and stereochemical variants of drugs, as well as related pharmacologic categories such as multidrug resistance modulators, adjuvants, and radiopharmaceutical compounds. DHFI-C can accommodate interaction evidence that specifies particular drug forms, such as S-warfarin or warfarin sodium, rather than collapsing all variants into a single generic label. This design supports form-specific interaction interpretation and aligns more closely with the way pharmacokinetic and pharmacodynamic interactions are reported in the literature, thereby enabling more precise mechanism-based reasoning than that possible in systems that rely on aggregated drug representations. In addition to its drug coverage, the DHFI-C incorporates a broad and culturally diverse set of herbal entities, including widely used medicinal herbs and components of traditional Chinese medicine. This includes commonly used herbs such as Astragalus membranaceus (Huangqi) and Cassia ( Cassia fistula ), 10 as well as other botanicals frequently encountered in integrative and traditional medicine practices. This scope extends the drug–herb interaction space beyond that typically represented in public interaction checkers or ontology-centric repositories, which often focus on a limited subset of Western herbal products. By capturing a wider range of commonly used herbal substances, 38 the dataset enhances the real-world relevance of interaction assessment, particularly in settings where patients routinely combine prescription medicines with traditional or culturally specific remedies. Together, the granularity of drug representation and the breadth of herbal coverage position DHFI-C as a dataset designed not merely for interaction lookup but for context-aware, mechanism-driven interpretation across diverse medication and product use cases. 4.2 Hybrid ontology design The ontology mapping results reflect a hybrid design using external ontologies where semantically appropriate, while employing a domain-specific mini-ontology for interaction reasoning where existing resources were insufficient. Core biomedical entities were aligned with established ontologies for interoperability, while health conditions and pharmacodynamic effects were represented internally as contextual modifiers for interaction interpretation. This hybrid approach enables the DHFI-C to balance semantic interoperability with mechanistic interpretability. By avoiding forced alignment of condition and effect concepts to disease- or molecule-centric ontologies, the system maintains transparent, mechanism-aware reasoning without semantic distortions. Simultaneously, retaining external mappings for stable biomedical entities ensures that DHFI-C remains compatible with existing knowledge ecosystems and FAIR-aligned infrastructures. This design positions the DHFI-C between ontology-centric systems focused on formal completeness and conventional interaction databases lacking semantic depth, supporting context-aware interaction assessment while remaining extensible as new ontology standards emerge. 4.3 Use case–driven capability differentiation from existing interaction checkers The use case in Section 3.5 demonstrates how DHFI-C enables interaction assessments beyond standard interaction-checking platforms. The use case evaluates prescription drugs, herbs, foods, lifestyle factors, and health conditions within one workflow to identify interactions. This evaluation examines system capabilities during realistic assessments rather than relying on feature lists or dataset coverage. Based on the qualitative capability assessment summarized in Table 6 , commonly used interaction checkers, including DrugBank ( https://go.drugbank.com ), 39 Medscape ( https://reference.medscape.com/drug-interactionchecker ), Drugs.com ( https://www.drugs.com/drug_interactions.html ), and DDInter 2.0 ( http://ddinter2.scbdd.com ), 5 were observed to provide partial support for multi-domain interaction checking, primarily through explicitly curated substance pairs (all accessed January 2026). However, within the evaluated use case context, these platforms did not demonstrate mechanism-based inference beyond predefined interaction records, nor did they explicitly distinguish between evidence-supported interactions and interactions inferred through mechanistic reasoning pathways. Table 6. Use case–driven capability comparison with existing interaction-checking platforms. Use-case–driven capability DHFI-C DrugBank Medscape Drugs.com DDInter 2.0 Multi-domain interaction checking (drug, herb, food, condition) ✓ Partial Partial Partial Partial PK/PD mechanism inference beyond explicit pairs ✓ ✗ ✗ ✗ ✗ Explicit distinction: curated vs inferred interactions ✓ ✗ ✗ ✗ ✗ Condition-level interaction interpretation ✓ ✗ ✗ ✗ ✗ Pharmacological Effects Duplication Detection ✓ Partial ✓ ✓ ✓ Drug combination decomposition ✓ ✗ ✗ ✗ ✗ Disease-to-drug suggestion support ✓ ✗ ✗ ✗ ✗ Consumer and professional user views ✓ ✗ ✗ ✓ ✗ Machine-readable/ontology-aligned output ✓ ✗ ✗ ✗ ✗ A key differentiating capability demonstrated by the DHFI-C in the use case is the condition-level interaction interpretation. While comparator systems typically present age, renal impairment, or lifestyle factors as static warnings or advisory annotations, the DHFI-C incorporates health-related conditions directly into mechanistic reasoning processes. In the demonstrated use case, age-related physiological changes and chronic kidney disease modified the interaction interpretation for metoprolol and digoxin, respectively, while smoking status enabled mechanistic inference through CYP1A2-associated pathways. Such condition-inclusive reasoning behavior was not observed in the evaluated comparator platforms in the same assessment context. Additional capabilities exercised in the use case, including drug combination decomposition, disease-to-drug suggestion support, and pharmacological effect duplication detection, further differentiate DHFI-C from existing interaction checkers. Although therapeutic duplication alerts are supported by several platforms, the DHFI-C uniquely integrates this function within a broader mechanism-driven and context-aware interaction assessment framework. Taken together, these observations indicate that the comparative advantage of DHFI-C lies not in any single feature in isolation but in the coordinated integration of mechanistic inference, condition-inclusive reasoning, and multi-domain interaction handling within a transparent and reproducible assessment workflow. 4.4 Limitations and future directions The coverage of herb and food entities remains limited, reflecting the relative scarcity of publicly available, mechanism-resolved evidence for these product categories. Although widely used in real-world settings, many herbal and food-related interactions have been reported descriptively rather than with explicit pharmacokinetic or pharmacodynamic characterizations. As additional open-access literature and structured repositories emerge, the dataset can be systematically expanded to enhance both its completeness and mechanistic granularity. The current Mechanism-Based Inference Engine is implemented as a deterministic, rule-based system operating over graph-encoded pharmacological knowledge. This design enables transparent and reproducible mechanistic interpretation but does not provide probabilistic risk estimation or a predictive confidence score. Future studies may explore complementary data-driven approaches, such as knowledge graph embeddings, graph neural networks, or transformer-assisted evidence extraction, provided that the interpretability and traceability of inferred interactions are preserved. Further validation using independent real-world datasets and expert-reviewed case collections represents an additional direction for strengthening the generalizability and practical utility of the platform as the curated evidence base continues to expand. 4.5 Conclusion This study aimed to address the structural and methodological limitations of existing interaction-checking systems, particularly their restricted support for multi-domain interaction assessment, condition-inclusive interpretation, and transparent mechanistic reasoning. Through the design and implementation of DHFI-C, these challenges were addressed by integrating drugs, herbs, foods, health-related conditions, and underlying diseases within a unified knowledge graph and inference framework. The results demonstrate that DHFI-C operationalizes mechanism-based interaction reasoning across pharmacokinetic and pharmacodynamic domains, while explicitly distinguishing curated evidence from mechanism-derived interpretations. The system further supports condition-level interaction interpretation, drug combination decomposition, disease-driven input assistance, and pharmacological effect duplication detection within a single coherent assessment workflow. By combining these capabilities within a transparent, ontology-aligned, and machine-readable architecture, the DHFI-C establishes a methodological foundation for context-aware interaction assessment that extends beyond the scope of existing public interaction-checking tools. This framework provides a basis for future expansion as additional evidence sources, interaction domains, and reasoning strategies become accessible. Data availability Underlying data Zenodo: DHFI-C Knowledge Graph and Supporting Materials (Version 1.0). DOI: 10.5281/zenodo.18892483 . 40 This repository contains: • dhfi_schema_v1.ttl • Ontology schema defining classes, properties, and semantic relations used in the DHFI-C framework. • dhfi_triples_v1.ttl • RDF instance data representing curated drug–herb–food interaction statements and associated mechanistic context. Data are available under the terms of the Creative Commons Attribution 4.0 International (CC-BY 4.0) license . Extended data Zenodo: DHFI-C Knowledge Graph and Supporting Materials (Version 1.0). DOI: 10.5281/zenodo.18892483 . 40 This repository contains: • dhfi_source_curation_master_v1.xlsx Structured source-level abstraction tables are used for entity normalization, interaction definition, and ontology alignment prior to ETL transformation. • dhfi_reference_curation_table_v1.docx Bibliographic records and curated primary studies (n = 20) supporting the interaction modeling framework. • prisma_2020_checklist_dhfi-c.pdf Completed PRISMA 2020 checklist describing the literature search, screening, and study selection process used for evidence acquisition in this study. Extended data are available under the terms of the Creative Commons Attribution 4.0 International (CC-BY 4.0) license . Software availability Source code available from: https://github.com/NitchamonKitty/dhf-interaction-checker Archived source code at time of publication: Zenodo. DHFI-C Software Archive (Version 1.0). DOI: 10.5281/zenodo.18861730 License: The source code is distributed under the terms of the Apache 2.0 License. Acknowledgements The scholarship from Chulalongkorn University, The Second Century Fund (C2F), is gratefully acknowledged. References 1. World Health Organization: WHO global report on traditional and complementary medicine, 2019. Geneva, Switzerland: World Health Organization; 2019; 226. 2. Qato DM, Wilder J, Schumm LP, et al. : Changes in Prescription and Over-the-Counter Medication and Dietary Supplement Use Among Older Adults in the United States, 2005 vs 2011. JAMA Intern Med. 2016 Apr 1; 176 (4): 473–482. PubMed Abstract | Publisher Full Text | Free Full Text 3. Wilkinson MD, Dumontier M, Aalbersberg IJ, et al. : The FAIR Guiding Principles for scientific data management and stewardship. Sci Data. 2016 Mar 15; 3 (1): 160018. Publisher Full Text 4. Azzi R, Bordea G, Griffier R, et al. : Enriching the FIDEO ontology with food-drug interactions from online knowledge sources. J Biomed Semant. 2024 Mar 4; 15 (1): 1. PubMed Abstract | Publisher Full Text | Free Full Text 5. Tian Y, Yi J, Wang N, et al. : DDInter 2.0: an enhanced drug interaction resource with expanded data coverage, new interaction types, and improved user interface. Nucleic Acids Research. 2025 Jan 6; 53 (D1): D1356–D1362. PubMed Abstract | Publisher Full Text | Free Full Text 6. Chue Hong NP, Katz DS, Barker M, et al. : FAIR Principles for Research Software (FAIR4RS Principles).2021. Publisher Full Text 7. Vogt L: The CLEAR Principles: Organizing data and metadata into semantically meaningful types of FAIR Digital Objects to increase their human explorability and cognitive interoperability. J Biomed Semant. 2025 Oct 28; 16 (1): 18. Publisher Full Text 8. Vogt L, Strömert P, Matentzoglu N, et al. : FAIR 2.0: Extending the FAIR Guiding Principles to Address Semantic Interoperability.2024. Publisher Full Text 9. Page MJ, McKenzie JE, Bossuyt PM, et al. : The PRISMA 2020 statement: an updated guideline for reporting systematic reviews. BMJ. 2021 Mar 29; n71. Publisher Full Text 10. Gupta RC, Chang D, Nammi S, et al. : Interactions between antidiabetic drugs and herbs: an overview of mechanisms of action and clinical implications. Diabetol Metab Syndr. 2017 Dec; 9 (1): 59. PubMed Abstract | Publisher Full Text | Free Full Text 11. Nicoletti MA, Ricci EL, Delorenzi JC, et al. : Foods and Herbs That May Interact with Medications Used for Arterial Hypertension and Dyslipidemia. FNS. 2023; 14 (01): 18–25. Publisher Full Text 12. Lippert A, Renner B: Herb–Drug Interaction in Inflammatory Diseases: Review of Phytomedicine and Herbal Supplements. JCM. 2022 Mar 12; 11 (6): 1567. Publisher Full Text 13. D’Alessandro C, Benedetti A, Di Paolo A, et al. : Interactions between Food and Drugs, and Nutritional Status in Renal Patients: A Narrative Review. Nutrients. 2022 Jan 4; 14 (1): 212. PubMed Abstract | Publisher Full Text | Free Full Text 14. Bukowska B, Grzegorowska A, Szczerkowska-Majchrzak E, et al. : Hazardous Interactions Between Food, Herbs, and Drugs in the First Stage of Biotransformation: Case Reports of Adverse Drug Interactions in Humans. IJMS. 2025 May 28; 26 (11): 5188. PubMed Abstract | Publisher Full Text | Free Full Text 15. Mansoor K, Bardees R, Alkhawaja B, et al. : Impact of Pomegranate Juice on the Pharmacokinetics of CYP3A4- and CYP2C9-Mediated Drugs Metabolism: A Preclinical and Clinical Review. Molecules. 2023 Feb 24; 28 (5): 2117. PubMed Abstract | Publisher Full Text | Free Full Text 16. Prieto-Garcia JM, Graham L, Alkhabbaz O, et al. : Potential Pharmacokinetic Interactions of Common Cardiovascular Drugs and Selected European and Latin American Herbal Medicines: A Scoping Review. Plants. 2023 Jan 31; 12 (3): 623. PubMed Abstract | Publisher Full Text | Free Full Text 17. Radkowski P, Derkaczew M, Mazuchowski M, et al. : Antibiotic–Drug Interactions in the Intensive Care Unit: A Literature Review. Antibiotics. 2024 May 29; 13 (6): 503. Publisher Full Text 18. Nyulas KI, Simon-Szabó Z, Pál S, et al. : Cardiovascular Effects of Herbal Products and Their Interaction with Antihypertensive Drugs—Comprehensive Review. IJMS. 2024 Jun 9; 25 (12): 6388. PubMed Abstract | Publisher Full Text | Free Full Text 19. Ferri N, Colombo E, Tenconi M, et al. : Drug-Drug Interactions of Direct Oral Anticoagulants (DOACs): From Pharmacological to Clinical Practice. Pharmaceutics. 2022 May 24; 14 (6): 1120. PubMed Abstract | Publisher Full Text | Free Full Text 20. Hladun O, Papaseit E, Martín S, et al. : Interaction of Energy Drinks with Prescription Medication and Drugs of Abuse. Pharmaceutics. 2021 Sep 22; 13 (10): 1532. PubMed Abstract | Publisher Full Text | Free Full Text 21. Zhuang W, Liu S, Zhao X, et al. : Interaction Between Chinese Medicine and Warfarin: Clinical and Research Update. Front Pharmacol. 2021 Sep 20; (12): 751107. PubMed Abstract | Publisher Full Text | Free Full Text 22. Wang CZ, Moss J, Yuan CS: Commonly Used Dietary Supplements on Coagulation Function during Surgery. Medicines. 2015 Jul 27; 2 (3): 157–185. PubMed Abstract | Publisher Full Text | Free Full Text 23. Zanni S, Del Prete J, Capogrossi A, et al. : Influence of cigarette smoking on drugs’ metabolism and effects: a systematic review. Eur J Clin Pharmacol. 2025 May; 81 (5): 667–695. Publisher Full Text 24. Pariente G, Leibson T, Carls A, et al. : Pregnancy-Associated Changes in Pharmacokinetics: A Systematic Review. Chappell LC, editor. PLoS Med. 2016 Nov 1; 13 (11): e1002160. Publisher Full Text 25. Ruiz A, DiCristina S: Absorption to Excretion: The Aging Body’s Take on Drugs – A Review of Pharmacokinetic Changes and their Impact on Medication Management. Current Pharmacology Reports. 2025 Jul 26; 11 (1): 42. Publisher Full Text 26. Borda LA, Någård M, Boulton DW, et al. : A systematic review of pregnancy-related clinical intervention of drug regimens due to pharmacokinetic reasons. Front Med. 2023 Nov 29; 10 : 1241456. PubMed Abstract | Publisher Full Text | Free Full Text 27. Wang D, Jackson C, Hung N, et al. : Oral docetaxel plus encequidar – A pharmacokinetic model and evaluation against IV docetaxel. J Pharmacokinet Pharmacodyn. 2024 Aug; 51 (4): 335–352. PubMed Abstract | Publisher Full Text | Free Full Text 28. Chiang M, Back H, Lee JB, et al. : Pharmacokinetic Modeling of the Effect of Tariquidar on Ondansetron Disposition into the Central Nervous System. Pharm Res. 2024 Jul; 41 (7): 1401–1411. PubMed Abstract | Publisher Full Text | Free Full Text 29. Zannat R, Lee J, Muzaffar J, et al. : The potential interaction between medical treatment and radioiodine treatment success: A systematic review. Front Endocrinol. 2023 Jan 4; 13 : 1061555. PubMed Abstract | Publisher Full Text | Free Full Text 30. National Cancer Institute: National Cancer Institute Thesaurus (NCIt) [Ontology]. Bethesda, MD: National Cancer Institute; 2019. Report No: 25.08d. Reference Source 31. Federhen S: The NCBI Taxonomy database. Nucleic Acids Research. 2012 Jan 1; 40 (D1): D136–D143. PubMed Abstract | Publisher Full Text | Free Full Text 32. Dooley DM, Griffiths EJ, Gosal GS, et al. : FoodOn: a harmonized food ontology to increase global food traceability, quality control and data integration. npj Sci Food. 2018 Dec 18; 2 (1): 23. PubMed Abstract | Publisher Full Text | Free Full Text 33. Vasilevsky NA, Toro S, Matentzoglu N, et al. : Mondo: Integrating Disease Terminology Across Communities. GENETICS. 2025 Oct 6; iyaf215. Publisher Full Text 34. Herrero-Zazo M, Segura-Bedmar I, Hastings J, et al. : DINTO: Using OWL Ontologies and SWRL Rules to Infer Drug–Drug Interactions and Their Mechanisms. J Chem Inf Model. 2015 Aug 24; 55 (8): 1698–1707. Publisher Full Text 35. The UniProt ConsortiumBateman A, Martin MJ, et al. : UniProt: the universal protein knowledgebase in 2021. Nucleic Acids Research. 2021 Jan 8; 49 (D1): D480–9. Publisher Full Text 36. El-Gebali S, Mistry J, Bateman A, et al. : The Pfam protein families database in 2019. Nucleic Acids Research. 2019 Jan 8; 47 (D1): D427–32. Publisher Full Text 37. World Health Organization: The selection and use of essential medicines, 2025: WHO Model List of Essential Medicines, 24th list. World Health Organization; 2025 Sep [cited 2026 Jan 15]. Publisher Full Text Reference Source 38. Bent S: Herbal Medicine in the United States: Review of Efficacy, Safety, and Regulation: Grand Rounds at University of California, San Francisco Medical Center. J GEN INTERN MED. 2008 Jun; 23 (6): 854–859. PubMed Abstract | Publisher Full Text | Free Full Text 39. Wishart DS, Feunang YD, Guo AC, et al. : DrugBank 5.0: a major update to the DrugBank database for 2018. Nucleic Acids Research. 2018 Jan 4; 46 (D1): D1074–D1082. PubMed Abstract | Publisher Full Text | Free Full Text 40. Kriengkraisuk N, Pornputtapong N: DHFI-C Knowledge Graph and Supporting Materials (Version 1.0). Zenodo. 2026 [cited 2026 Mar 11]. Publisher Full Text Comments on this article Comments (0) Version 1 VERSION 1 PUBLISHED 10 Apr 2026 ADD YOUR COMMENT Comment Author details Author details 1 Department of Biochemistry and Microbiology, Faculty of Pharmaceutical Sciences,Chulalongkorn University, Bangkok, 10330, Thailand Nitchamon Kriengkraisuk Roles: Conceptualization, Data Curation, Formal Analysis, Funding Acquisition, Investigation, Methodology, Software, Validation, Visualization, Writing – Original Draft Preparation Natapol Pornputtapong Roles: Conceptualization, Investigation, Methodology, Project Administration, Supervision, Writing – Review & Editing Competing interests No competing interests were disclosed. Grant information This work was supported by The Second Century Fund (C2F), Chulalongkorn University, Thailand. The funders had no role in study design, data collection and analysis, decision to publish, or preparation of the manuscript. Article Versions (1) version 1 Published: 10 Apr 2026, 15:498 https://doi.org/10.12688/f1000research.179045.1 Copyright © 2026 Kriengkraisuk N and Pornputtapong N. This is an open access article distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. Download Export To Sciwheel Bibtex EndNote ProCite Ref. Manager (RIS) Sente metrics Views Downloads F1000Research - - PubMed Central info_outline Data from PMC are received and updated monthly. - - Citations open_in_new 0 open_in_new 0 open_in_new SEE MORE DETAILS CITE how to cite this article Kriengkraisuk N and Pornputtapong N. An Ontology‑Guided Drug–Herb–Food Interaction Checker with Mechanism‑Based Knowledge Graph Reasoning and Condition‑Aware Interpretation [version 1; peer review: awaiting peer review] . F1000Research 2026, 15 :498 ( https://doi.org/10.12688/f1000research.179045.1 ) NOTE: If applicable, it is important to ensure the information in square brackets after the title is included in all citations of this article. COPY CITATION DETAILS track receive updates on this article Track an article to receive email alerts on any updates to this article. TRACK THIS ARTICLE Share Open Peer Review Current Reviewer Status: AWAITING PEER REVIEW AWAITING PEER REVIEW ? Key to Reviewer Statuses VIEW HIDE Approved The paper is scientifically sound in its current form and only minor, if any, improvements are suggested Approved with reservations A number of small changes, sometimes more significant revisions are required to address specific details and improve the papers academic merit. Not approved Fundamental flaws in the paper seriously undermine the findings and conclusions Comments on this article Comments (0) Version 1 VERSION 1 PUBLISHED 10 Apr 2026 ADD YOUR COMMENT Comment keyboard_arrow_left keyboard_arrow_right Open Peer Review Reviewer Status AWAITING PEER REVIEW Comments on this article All Comments (0) Add a comment Sign up for content alerts Sign Up You are now signed up to receive this alert Browse by related subjects Alongside their report, reviewers assign a status to the article: Approved - the paper is scientifically sound in its current form and only minor, if any, improvements are suggested Approved with reservations - A number of small changes, sometimes more significant revisions are required to address specific details and improve the papers academic merit. Not approved - fundamental flaws in the paper seriously undermine the findings and conclusions Adjust parameters to alter display View on desktop for interactive features Includes Interactive Elements View on desktop for interactive features Competing Interests Policy Provide sufficient details of any financial or non-financial competing interests to enable users to assess whether your comments might lead a reasonable person to question your impartiality. Consider the following examples, but note that this is not an exhaustive list: Examples of 'Non-Financial Competing Interests' Within the past 4 years, you have held joint grants, published or collaborated with any of the authors of the selected paper. You have a close personal relationship (e.g. parent, spouse, sibling, or domestic partner) with any of the authors. You are a close professional associate of any of the authors (e.g. scientific mentor, recent student). You work at the same institute as any of the authors. You hope/expect to benefit (e.g. favour or employment) as a result of your submission. You are an Editor for the journal in which the article is published. Examples of 'Financial Competing Interests' You expect to receive, or in the past 4 years have received, any of the following from any commercial organisation that may gain financially from your submission: a salary, fees, funding, reimbursements. You expect to receive, or in the past 4 years have received, shared grant support or other funding with any of the authors. You hold, or are currently applying for, any patents or significant stocks/shares relating to the subject matter of the paper you are commenting on. Stay Updated Sign up for content alerts and receive a weekly or monthly email with all newly published articles Register with F1000Research Already registered? Sign in Not now, thanks close PLEASE NOTE If you are an AUTHOR of this article, please check that you signed in with the account associated with this article otherwise we cannot automatically identify your role as an author and your comment will be labelled as a “User Comment”. If you are a REVIEWER of this article, please check that you have signed in with the account associated with this article and then go to your account to submit your report, please do not post your review here. If you do not have access to your original account, please contact us . All commenters must hold a formal affiliation as per our Policies . The information that you give us will be displayed next to your comment. User comments must be in English, comprehensible and relevant to the article under discussion. We reserve the right to remove any comments that we consider to be inappropriate, offensive or otherwise in breach of the User Comment Terms and Conditions . Commenters must not use a comment for personal attacks. When criticisms of the article are based on unpublished data, the data should be made available. I accept the User Comment Terms and Conditions Please confirm that you accept the User Comment Terms and Conditions. Affiliation ✕ refresh Please enter your institution. Note: To add your institution or organisation, start typing the name and then select the correct name from the list. Where applicable, the name will appear in both the original language and in English. Do not paste in the name. If the name does not appear in the drop-down list, we will display the information you have entered. ✕ refresh Country/Region * USA UK Canada China France Germany Afghanistan Aland Islands Albania Algeria American Samoa Andorra Angola Anguilla Antarctica Antigua and Barbuda Argentina Armenia Aruba Australia Austria Azerbaijan Bahamas Bahrain Bangladesh Barbados Belarus Belgium Belize Benin Bermuda Bhutan Bolivia Bosnia and Herzegovina Botswana Bouvet Island Brazil British Indian Ocean Territory British Virgin Islands Brunei Bulgaria Burkina Faso Burundi Cambodia Cameroon Canada Cape Verde Cayman Islands Central African Republic Chad Chile China Christmas Island Cocos (Keeling) Islands Colombia Comoros Congo Cook Islands Costa Rica Cote d'Ivoire Croatia Cuba Cyprus Czech Republic Democratic Republic of the Congo Denmark Djibouti Dominica Dominican Republic Ecuador Egypt El Salvador Equatorial Guinea Eritrea Estonia Ethiopia Falkland Islands Faroe Islands Federated States of Micronesia Fiji Finland France French Guiana French Polynesia French Southern Territories Gabon Georgia Germany Ghana Gibraltar Greece Greenland Grenada Guadeloupe Guam Guatemala Guernsey Guinea Guinea-Bissau Guyana Haiti Heard Island and Mcdonald Islands Holy See (Vatican City State) Honduras Hong Kong Hungary Iceland India Indonesia Iran Iraq Ireland Israel Italy Jamaica Japan Jersey Jordan Kazakhstan Kenya Kiribati Kosovo (Serbia and Montenegro) Kuwait Kyrgyzstan Lao People's Democratic Republic Latvia Lebanon Lesotho Liberia Libya Liechtenstein Lithuania Luxembourg Macao Madagascar Malawi Malaysia Maldives Mali Malta Marshall Islands Martinique Mauritania Mauritius Mayotte Mexico Minor Outlying Islands of the United States Moldova Monaco Mongolia Montenegro Montserrat Morocco Mozambique Myanmar Namibia Nauru Nepal Netherlands Antilles New Caledonia New Zealand Nicaragua Niger Nigeria Niue Norfolk Island North Korea North Macedonia Northern Mariana Islands Norway Oman Pakistan Palau Palestinian Territory Panama Papua New Guinea Paraguay Peru Philippines Pitcairn Poland Portugal Puerto Rico Qatar Reunion Romania Russian Federation Rwanda Saint Helena Saint Kitts and Nevis Saint Lucia Saint Pierre and Miquelon Saint Vincent and the Grenadines Samoa San Marino Sao Tome and Principe Saudi Arabia Senegal Serbia Seychelles Sierra Leone Singapore Slovakia Slovenia Solomon Islands Somalia South Africa South Georgia and the South Sandwich Is South Korea South Sudan Spain Sri Lanka Sudan Suriname Svalbard and Jan Mayen Swaziland Sweden Switzerland Syria Taiwan Tajikistan Tanzania Thailand The Gambia The Netherlands Timor-Leste Togo Tokelau Tonga Trinidad and Tobago Tunisia Turkey Turkmenistan Turks and Caicos Islands Tuvalu UK USA Uganda Ukraine United Arab Emirates United States Virgin Islands Uruguay Uzbekistan Vanuatu Venezuela Vietnam Wallis and Futuna West Bank and Gaza Strip Western Sahara Yemen Zambia Zimbabwe Please select your country/region. You must enter a comment. Competing Interests Please disclose any competing interests that might be construed to influence your judgment of the article's or peer review report's validity or importance. Competing Interests Policy Provide sufficient details of any financial or non-financial competing interests to enable users to assess whether your comments might lead a reasonable person to question your impartiality. Consider the following examples, but note that this is not an exhaustive list: Examples of 'Non-Financial Competing Interests' Within the past 4 years, you have held joint grants, published or collaborated with any of the authors of the selected paper. You have a close personal relationship (e.g. parent, spouse, sibling, or domestic partner) with any of the authors. You are a close professional associate of any of the authors (e.g. scientific mentor, recent student). You work at the same institute as any of the authors. You hope/expect to benefit (e.g. favour or employment) as a result of your submission. You are an Editor for the journal in which the article is published. Examples of 'Financial Competing Interests' You expect to receive, or in the past 4 years have received, any of the following from any commercial organisation that may gain financially from your submission: a salary, fees, funding, reimbursements. You expect to receive, or in the past 4 years have received, shared grant support or other funding with any of the authors. You hold, or are currently applying for, any patents or significant stocks/shares relating to the subject matter of the paper you are commenting on. Please state your competing interests The comment has been saved. An error has occurred. Please try again. Cancel Post var lTitle = "An Ontology\u2011Guided Drug\–Herb\–Food...".replace("'", ''); var linkedInUrl = "http://www.linkedin.com/shareArticle?url=https://f1000research.com/articles/15-498/v1" + "&title=" + encodeURIComponent(lTitle) + "&summary=" + encodeURIComponent('Read the article by '); var deliciousUrl = "https://del.icio.us/post?url=https://f1000research.com/articles/15-498/v1&title=" + encodeURIComponent(lTitle); var redditUrl = "http://reddit.com/submit?url=https://f1000research.com/articles/15-498/v1" + "&title=" + encodeURIComponent(lTitle); linkedInUrl += encodeURIComponent('Kriengkraisuk N and Pornputtapong N'); var offsetTop = /chrome/i.test( navigator.userAgent ) ? 4 : -10; var addthis_config = { ui_offset_top: offsetTop, services_compact : "facebook,twitter,www.linkedin.com,www.mendeley.com,reddit.com", services_expanded : "facebook,twitter,www.linkedin.com,www.mendeley.com,reddit.com", services_custom : [ { name: "LinkedIn", url: linkedInUrl, icon:"/img/icon/at_linkedin.svg" }, { name: "Mendeley", url: "http://www.mendeley.com/import/?url=https://f1000research.com/articles/15-498/v1/mendeley", icon:"/img/icon/at_mendeley.svg" }, { name: "Reddit", url: redditUrl, icon:"/img/icon/at_reddit.svg" }, ] }; var addthis_share = { url: "https://f1000research.com/articles/15-498", templates : { twitter : "An Ontology\u2011Guided Drug\–Herb\–Food Interaction.... Kriengkraisuk N and Pornputtapong N, published by " + "@F1000Research" + ", https://f1000research.com/articles/15-498/v1" } }; if (typeof(addthis) != "undefined"){ addthis.addEventListener('addthis.ready', checkCount); addthis.addEventListener('addthis.menu.share', checkCount); } $(".f1r-shares-twitter").attr("href", "https://twitter.com/intent/tweet?text=" + addthis_share.templates.twitter); $(".f1r-shares-facebook").attr("href", "https://www.facebook.com/sharer/sharer.php?u=" + addthis_share.url); $(".f1r-shares-linkedin").attr("href", addthis_config.services_custom[0].url); $(".f1r-shares-reddit").attr("href", addthis_config.services_custom[2].url); $(".f1r-shares-mendelay").attr("href", addthis_config.services_custom[1].url); function checkCount(){ setTimeout(function(){ $(".addthis_button_expanded").each(function(){ var count = $(this).text(); if (count !== "" && count != "0") $(this).removeClass("is-hidden"); else $(this).addClass("is-hidden"); }); }, 1000); } close How to cite this report {{reportCitation}} Cancel Copy Citation Details $(function(){R.ui.buttonDropdowns('.dropdown-for-downloads');}); $(function(){R.ui.toolbarDropdowns('.toolbar-dropdown-for-downloads');}); $.get("/articles/acj/179045/197502") new F1000.Clipboard(); new F1000.ThesaurusTermsDisplay("articles", "article", "197502"); $(document).ready(function() { $( "#frame1" ).on('load', function() { var mydiv = $(this).contents().find("div"); var h = mydiv.height(); console.log(h) }); var tooltipLivingFigure = jQuery(".interactive-living-figure-label .icon-more-info"), titleLivingFigure = tooltipLivingFigure.attr("title"); tooltipLivingFigure.simpletip({ fixed: true, position: ["-115", "30"], baseClass: 'small-tooltip', content:titleLivingFigure + " " }); tooltipLivingFigure.removeAttr("title"); $("body").on("click", ".cite-living-figure", function(e) { e.preventDefault(); var ref = $(this).attr("data-ref"); $(this).closest(".living-figure-list-container").find("#" + ref).fadeIn(200); }); $("body").on("click", ".close-cite-living-figure", function(e) { e.preventDefault(); $(this).closest(".popup-window-wrapper").fadeOut(200); }); $(document).on("mouseup", function(e) { var metricsContainer = $(".article-metrics-popover-wrapper"); if (!metricsContainer.is(e.target) && metricsContainer.has(e.target).length === 0) { $(".article-metrics-close-button").click(); } }); var articleId = $('#articleId').val(); if($("#main-article-count-box").attachArticleMetrics) { $("#main-article-count-box").attachArticleMetrics(articleId, { articleMetricsView: true }); } }); var figshareWidget = $(".new_figshare_widget"); if (figshareWidget.length > 0) { window.figshare.load("f1000", function(Widget) { // Select a tag/tags defined in your page. In this tag we will place the widget. _.map(figshareWidget, function(el){ var widget = new Widget({ articleId: $(el).attr("figshare_articleId") //height:300 // this is the height of the viewer part. [Default: 550] }); widget.initialize(); // initialize the widget widget.mount(el); // mount it in a tag that's on your page // this will save the widget on the global scope for later use from // your JS scripts. This line is optional. //window.widget = widget; }); }); } close Error Close Add Reset F1000.MICROSERVICES.AFFILIATION = ''; $(document).ready(function () { $('.js-affiliations-form').each((index, form) => { new AffiliationForm({ formId: form.id, institutionErrorSelector: '.comment-enter-institution', departmentErrorSelector: '.comment-enter-department', placeSelector: '.js-add-comment-place', stateSelector: '.js-add-comment-state', zipCodeSelector: '.js-add-comment-zipcode', countrySelector: '.js-add-comment-country', countryErrorSelector: '.comment-enter-country', }); }); }); $(document).ready(function () { var reportIds = { "475527": 0, "483334": 0, "475526": 0, "483333": 0, "475525": 0, "483332": 0, "475524": 0, "483331": 0, "475523": 0, "483330": 0, "475522": 0, "483329": 0, "483328": 0, "475531": 0, "475530": 0, "475529": 0, "475528": 0, "481199": 0, "481198": 0, "481197": 0, "481196": 0, "481195": 0, "481194": 0, "481203": 0, "481202": 0, "481201": 0, "481200": 0, "485223": 0, "485222": 0, "485221": 0, "485220": 0, "485219": 0, "485218": 0, "485217": 0, "485216": 0, "479215": 0, "479214": 0, "479213": 0, "485225": 0, "485224": 0, "479222": 0, "479221": 0, "479220": 0, "479219": 0, "479218": 0, "479217": 0, "479216": 0, "483327": 0, "483326": 0, "483325": 0, }; $(".referee-response-container,.js-referee-report").each(function(index, el) { var reportId = $(el).attr("data-reportid"), reportCount = reportIds[reportId] || 0; $(el).find(".comments-count-container,.js-referee-report-views").html(reportCount); }); var uuidInput = $("#article_uuid"), oldUUId = uuidInput.val(), newUUId = "a893faac-9d26-4ceb-9789-e3811db953f4"; uuidInput.val(newUUId); $("a[href*='article_uuid=']").each(function(index, el) { var newHref = $(el).attr("href").replace(oldUUId, newUUId); $(el).attr("href", newHref); }); }); An innovative open access publishing platform offering rapid publication and open peer review, whilst supporting data deposition and sharing. Browse Gateways Collections How it Works Contact For Developers Cookie Notice Privacy Notice RSS Submit Your Research Follow us © 2012-2026 F1000 Research Ltd. ISSN 2046-1402 | Legal | Partner of Research4Life • CrossRef • ORCID • FAIRSharing R.templateTests.simpleTemplate = R.template(' $text $text $text $text $text '); R.templateTests.runTests(); var F1000platform = new F1000.Platform({ name: "f1000research", displayName: "F1000Research", hostName: "f1000research.com", id: "1", editorialEmail: "[email protected]", infoEmail: "[email protected]", usePmcStats: true }); $(function(){R.ui.dropdowns('.dropdown-for-authors, .dropdown-for-about, .dropdown-for-myresearch');}); // $(function(){R.ui.dropdowns('.dropdown-for-referees');}); $(document).ready(function () { if ($(".cookie-warning").is(":visible")) { $(".sticky").css("margin-bottom", "35px"); $(".devices").addClass("devices-and-cookie-warning"); } $(".cookie-warning .close-button").click(function (e) { $(".devices").removeClass("devices-and-cookie-warning"); $(".sticky").css("margin-bottom", "0"); }); $("#tweeter-feed .tweet-message").each(function (i, message) { var self = $(message); self.html(linkify(self.html())); }); $(".partner").on("mouseenter mouseleave", function() { $(this).find(".gray-scale, .colour").toggleClass("is-hidden"); }); }); Sign In Remember me Forgotten your password? Sign In Cancel Email or password not correct. Please try again Please wait... $(function(){ // Note: All the setup needs to run against a name attribute and *not* the id due the clonish // nature of facebox... $("a[id=googleSignInButton]").click(function(event){ event.preventDefault(); $("input[id=oAuthSystem]").val("GOOGLE"); $("form[id=oAuthForm]").submit(); }); $("a[id=facebookSignInButton]").click(function(event){ event.preventDefault(); $("input[id=oAuthSystem]").val("FACEBOOK"); $("form[id=oAuthForm]").submit(); }); $("a[id=orcidSignInButton]").click(function(event){ event.preventDefault(); $("input[id=oAuthSystem]").val("ORCID"); $("form[id=oAuthForm]").submit(); }); }); If you've forgotten your password, please enter your email address below and we'll send you instructions on how to reset your password. The email address should be the one you originally registered with F1000. Email address not valid, please try again You registered with F1000 via Google, so we cannot reset your password. To sign in, please click here . If you still need help with your Google account password, please click here . You registered with F1000 via Facebook, so we cannot reset your password. To sign in, please click here . If you still need help with your Facebook account password, please click here . Code not correct, please try again Reset password Cancel Email us for further assistance. Server error, please try again. If your email address is registered with us, we will email you instructions to reset your password. If you think you should have received this email but it has not arrived, please check your spam filters and/or contact for further assistance. Please wait... Register $(document).ready(function () { signIn.createSignInAsRow($("#sign-in-form-gfb-popup")); $(".target-field").each(function () { var uris = $(this).val().split("/"); if (uris.pop() === "login") { $(this).val(uris.toString().replace(",","/")); } }); });

Text is read by the "Ask this paper" AI Q&A widget below. Extraction quality varies by source — PMC NXML preserves structure cleanly, OA-HTML may include some navigation residue, and OA-PDF can have broken hyphenation. The publisher copy (via DOI) is the canonical version.

My notes (saved in your browser only)

Ask this paper AI returns verbatim quotes from the full text · source: preprint-html

Answers must be backed by verbatim quotes from this paper's full text. Hallucinated quotes are dropped automatically; if no verbatim passage answers the question, we say so. How this works

Citation neighborhood (no data yet)

We don't have any in-corpus citations linked to this paper yet. This is a recent paper (2026) — citers typically take a year or two to land, and the OpenAlex reference graph may still be filling in.

Source provenance

europepmc
last seen: 2026-05-20T01:45:00.602351+00:00
unpaywall
last seen: 2026-05-22T02:00:06.705733+00:00
License: CC-BY-4.0