From a937dfcaae61f0e80ced45a6968cdcb2cd2be17f Mon Sep 17 00:00:00 2001
From: ognome-dev <236690662+ognome-dev@users.noreply.github.com>
Date: Wed, 13 May 2026 04:50:25 +0000
Subject: [PATCH] feat(examples): add biomedical healthcare research use case
---
examples/biomedical-research.js | 164 ++++++++++++++++++++++++++++++++
1 file changed, 164 insertions(+)
create mode 100644 examples/biomedical-research.js
diff --git a/examples/biomedical-research.js b/examples/biomedical-research.js
new file mode 100644
index 00000000..7b16030b
--- /dev/null
+++ b/examples/biomedical-research.js
@@ -0,0 +1,164 @@
+/**
+ * Biomedical Research Example
+ *
+ * Demonstrates publishing a healthcare knowledge asset to the OriginTrail DKG
+ * using the schema.org/MedicalStudy vocabulary with PubMed citation provenance.
+ *
+ * Use case: OpenGenome (https://opengenome.bio) publishes AI-generated biomedical
+ * research reports as verifiable knowledge assets on the DKG after minting
+ * the corresponding NFT on Solana. This creates a dual-anchor for each report:
+ * one on-chain (Solana NFT) and one on the knowledge graph (DKG UAL).
+ *
+ * Run:
+ * node examples/biomedical-research.js
+ *
+ * Prerequisites:
+ * - Copy .env.example to .env and fill in PRIVATE_KEY
+ * - Ensure your wallet has testnet TRAC and Base Sepolia ETH
+ * TRAC faucet: https://faucet.origintrail.io
+ * ETH faucet: https://www.alchemy.com/faucets/base-sepolia
+ */
+
+import DKG from '../index.js';
+import { BLOCKCHAIN_IDS } from '../constants/constants.js';
+import 'dotenv/config';
+
+const OT_NODE_HOSTNAME = 'https://v6-pegasus-node-02.origin-trail.network';
+const OT_NODE_PORT = '8900';
+const BLOCKCHAIN_NAME = BLOCKCHAIN_IDS.BASE_TESTNET;
+
+// IMPORTANT: Don't forget to add your PRIVATE_KEY to the .env file.
+const DkgClient = new DKG({
+ endpoint: OT_NODE_HOSTNAME,
+ port: OT_NODE_PORT,
+ blockchain: {
+ name: BLOCKCHAIN_NAME,
+ privateKey: process.env.PRIVATE_KEY,
+ },
+ maxNumberOfRetries: 300,
+ frequency: 2,
+ contentType: 'all',
+ nodeApiVersion: '/v1',
+});
+
+function divider() {
+ console.log('==================================================');
+ console.log('==================================================');
+ console.log('==================================================');
+}
+
+/**
+ * A biomedical research report structured as a schema.org/MedicalStudy.
+ *
+ * The `og:` prefix is a custom vocabulary namespace for OpenGenome-specific
+ * fields (confidence scores, Solana mint address, herb recommendations).
+ * All standard medical metadata uses schema.org types directly.
+ *
+ * PubMed citations are included as ScholarlyArticle references so the
+ * knowledge asset carries full source provenance on-chain.
+ */
+const researchContent = {
+ public: {
+ '@context': {
+ '@vocab': 'https://schema.org/',
+ og: 'https://opengenome.bio/schema/v1/',
+ },
+ '@id': 'urn:opengenome:analysis:1',
+ '@type': 'MedicalStudy',
+ name: 'Hantavirus Pulmonary Syndrome - OpenGenome Research #1',
+ description:
+ 'AI-assisted biomedical research report identifying Hantavirus Pulmonary Syndrome ' +
+ 'with supporting PubMed evidence and evidence-backed herbal adjunct recommendations.',
+ 'og:analysisId': 1,
+ 'og:primarySignal': 'Hantavirus Pulmonary Syndrome',
+ 'og:confidenceScore': 87,
+ 'og:signalStrength': 82,
+ 'og:solanaMint': 'ExampleSolanaAddressHere',
+ 'og:platform': 'https://opengenome.bio',
+ dateCreated: new Date().toISOString(),
+ studySubject: {
+ '@type': 'MedicalCondition',
+ name: 'Hantavirus Pulmonary Syndrome',
+ code: {
+ '@type': 'MedicalCode',
+ codeValue: 'B33.4',
+ codingSystem: 'ICD-10',
+ },
+ },
+ 'og:herbs': [
+ {
+ '@type': 'Drug',
+ name: 'Ginger',
+ alternateName: 'Zingiber officinale',
+ 'og:pmid': '21945235',
+ description: 'Anti-inflammatory and antiviral properties studied in respiratory conditions.',
+ },
+ {
+ '@type': 'Drug',
+ name: 'Turmeric',
+ alternateName: 'Curcuma longa',
+ 'og:pmid': '37105214',
+ description: 'Curcumin shown to modulate cytokine response relevant to viral lung injury.',
+ },
+ ],
+ citation: [
+ {
+ '@type': 'ScholarlyArticle',
+ identifier: 'PMID:21945235',
+ url: 'https://pubmed.ncbi.nlm.nih.gov/21945235/',
+ name: 'Antiviral properties of ginger extracts against respiratory viruses',
+ },
+ {
+ '@type': 'ScholarlyArticle',
+ identifier: 'PMID:37105214',
+ url: 'https://pubmed.ncbi.nlm.nih.gov/37105214/',
+ name: 'Curcumin modulates cytokine storm in viral pneumonia models',
+ },
+ ],
+ },
+};
+
+(async () => {
+ const nodeInfo = await DkgClient.node.info();
+ console.log('======================== NODE INFO RECEIVED');
+ console.log(nodeInfo);
+
+ divider();
+
+ // Publish the knowledge asset to the DKG
+ const createResult = await DkgClient.asset.create(researchContent, {
+ epochsNum: 2,
+ });
+
+ console.log('======================== KNOWLEDGE ASSET CREATED');
+ console.log('UAL:', createResult.UAL);
+ console.log('View on DKG Explorer:');
+ console.log('https://dkg.origintrail.io/explore?ual=' + createResult.UAL);
+
+ divider();
+
+ // Retrieve the asset back to verify
+ const getResult = await DkgClient.asset.get(createResult.UAL);
+
+ console.log('======================== KNOWLEDGE ASSET RETRIEVED');
+ console.log(JSON.stringify(getResult, null, 2));
+
+ divider();
+
+ // SPARQL query: find all OpenGenome research assets
+ const queryResult = await DkgClient.graph.query(
+ `PREFIX schema:
+ PREFIX og:
+
+ SELECT ?id ?signal ?confidence WHERE {
+ ?s a schema:MedicalStudy ;
+ og:analysisId ?id ;
+ og:primarySignal ?signal ;
+ og:confidenceScore ?confidence .
+ }`,
+ 'SELECT',
+ );
+
+ console.log('======================== SPARQL QUERY RESULTS');
+ console.log(JSON.stringify(queryResult, null, 2));
+})();