dailymed-database について
dailymed-databaseは、DailyMedのFDA承認薬ラベルを検索するスキルです。薬剤研究や臨床データ処理向けに、薬剤名、NDC、set ID、RxCUIで検索し、構造化されたラベル情報を取得できます。
主な機能
- 01薬剤名、NDC、set IDで検索
- 02薬剤ラベル全体の取得
- 03LOINCコード別セクション抽出
- 04包装情報とNDCの検索
- 05RxCUIによるラベル検索
活用シーン
- 01先発薬とジェネリックのラベル比較
- 02警告と副作用の抽出
- 03有効成分別の製剤検索
- 04薬剤ラベル処理パイプラインの構築
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jaechang-hits/ sciagent-skills --skill dailymed-databaseインストール後、Claude Code で/dailymed-databaseを入力して読み込まれたか確認します。
詳細
DailyMed 医薬品ラベルデータベース
概要
DailyMed は、米国国立医学図書館が提供する FDA 承認医薬品ラベル情報の公式リポジトリです。処方薬、市販薬、生物学的製剤、ワクチンの構造化製品ラベル(SPL)を 140,000 件以上収録しています。REST API(v2)を使用すると、認証なしで、適応症、用法・用量、警告、禁忌、副作用、包装データなど、ラベルの全内容に構造化された JSON/XML 形式でアクセスできます。
使用する場面
- 医薬品名、NDC コード、またはセット ID を指定して、FDA 承認済みの公式な処方情報を取得する場合
- 薬理学研究のために、ラベルのセクション(適応症、警告、用法・用量、副作用)を構造化データとして抽出する場合
- 有効成分の市販製剤を、包装情報や NDC コードとともにすべて検索する場合
- RxNorm 連携で取得した RxCUI 識別子を使って医薬品ラベルを相互参照する場合
- 信頼できる FDA のラベル情報(ユーザーからの報告データではないもの)を必要とする医薬品情報パイプラインを構築する場合
- 同じ医薬品のブランド製剤とジェネリック製剤のラベル内容を比較する場合
- FAERS の有害事象報告については、代わりに
fda-databaseを使用してください。DailyMed に含まれるのはラベルの文章であり、市販後の安全性シグナルではありません - 医薬品間相互作用の重症度データについては、
ddinter-databaseを使用してください。DailyMed のラベルでは、相互作用に関する情報は構造化されていません
前提条件
- Python パッケージ:
requests、pandas、matplotlib - データ要件:医薬品名、NDC コード、セット ID、または RxCUI 識別子
- 環境:インターネット接続が必要です。API キーは不要です
- レート制限:公式に公開された制限はありません。節度ある利用であれば、毎分約 100 リクエストが安全です。バッチループには
time.sleep(0.3)を追加してください
pip install requests pandas matplotlib
クイックスタート
import requests
BASE = "https://dailymed.nlm.nih.gov/dailymed/services/v2"
# Search drug labels by name
r = requests.get(f"{BASE}/spls.json", params={"drug_name": "metformin", "pagesize": 5})
r.raise_for_status()
data = r.json()
print(f"Total labels found: {data['metadata']['total_elements']}")
for spl in data["data"][:3]:
print(f" {spl['title']!r:60s} setid={spl['setid']}")
コア API
クエリ 1:医薬品名でラベルを検索する
医薬品名を使って構造化製品ラベル(SPL)を検索します。セット ID を含む、一致するラベルのページ分けされた一覧を返します。
import requests
import pandas as pd
BASE = "https://dailymed.nlm.nih.gov/dailymed/services/v2"
def search_spls(drug_name, pagesize=20, page=1):
"""Search DailyMed SPLs by drug name. Returns list of label summaries."""
r = requests.get(f"{BASE}/spls.json",
params={"drug_name": drug_name, "pagesize": pagesize, "page": page},
timeout=15)
r.raise_for_status()
return r.json()
result = search_spls("atorvastatin", pagesize=10)
meta = result["metadata"]
print(f"Search: 'atorvastatin' → {meta['total_elements']} labels across {meta['total_pages']} pages")
df = pd.DataFrame(result["data"])
print(df[["setid", "title", "published_date"]].to_string(index=False))
# setid title published_date
# 8f6c7c7c-... ATORVASTATIN CALCIUM tablet 2024-03-15
# a4b7d3e1-... ATORVASTATIN CALCIUM tablet, film coated 2023-11-20
クエリ 2:セット ID で完全なラベルを取得する
セット ID を使って、指定した医薬品の構造化製品ラベル全体を取得します。適応症、警告、用法・用量、副作用など、すべてのラベルセクションを返します。
import requests
BASE = "https://dailymed.nlm.nih.gov/dailymed/services/v2"
def get_spl(setid):
"""Retrieve full SPL document by set ID. Returns label metadata and XML/JSON."""
r = requests.get(f"{BASE}/spls/{setid}.json", timeout=20)
r.raise_for_status()
return r.json()
# Use a known set ID from search results
setid = "8f6c7c7c-1f7f-4f1a-af86-8b2eef2a8b2c" # example atorvastatin label
label = get_spl(setid)
data = label["data"]
print(f"Title: {data.get('title')}")
print(f"Set ID: {data.get('setid')}")
print(f"Published: {data.get('published_date')}")
print(f"Version: {data.get('version')}")
# Access structured sections
if "sections" in data:
sections = data["sections"]
print(f"\nLabel sections ({len(sections)} total):")
for sec in sections[:5]:
print(f" [{sec.get('loinc_code', 'N/A')}] {sec.get('title', 'Untitled')}")
クエリ 3:NDC コードで検索する
National Drug Code(NDC)を使って医薬品ラベルを検索します。製品バーコードや調剤記録がある場合に便利です。
import requests
BASE = "https://dailymed.nlm.nih.gov/dailymed/services/v2"
def search_by_ndc(ndc_code):
"""Find SPL by NDC code (formatted as XXXXX-XXXX-XX or without dashes)."""
r = requests.get(f"{BASE}/spls.json",
params={"ndc": ndc_code},
timeout=15)
r.raise_for_status()
return r.json()
# NDC for Lipitor 10mg (atorvastatin)
result = search_by_ndc("0071-0155-23")
if result["data"]:
spl = result["data"][0]
print(f"Drug: {spl['title']}")
print(f"Set ID: {spl['setid']}")
print(f"Published: {spl['published_date']}")
else:
print("No label found for this NDC")
クエリ 4:包装情報を取得する
セット ID を指定して、特定の医薬品ラベルの詳細な包装データ(NDC コード、包装形態、数量)を取得します。
import requests
import pandas as pd
BASE = "https://dailymed.nlm.nih.gov/dailymed/services/v2"
def get_packaging(setid):
"""Retrieve packaging information for a label (NDC codes, dosage forms, quantities)."""
r = requests.get(f"{BASE}/spls/{setid}/packaging.json", timeout=15)
r.raise_for_status()
return r.json()
setid = "8f6c7c7c-1f7f-4f1a-af86-8b2eef2a8b2c" # example setid
pkg = get_packaging(setid)
if pkg["data"]:
packages = pkg["data"]
print(f"Packaging variants: {len(packages)}")
df = pd.DataFrame(packages)
# Common fields: ndc, dosage_form, route, marketing_status
for col in ["ndc", "dosage_form", "route", "marketing_status"]:
if col in df.columns:
print(f"\n{col.upper()}:")
print(df[col].value_counts().head(5))
クエリ 5:RxCUI で検索する
RxNorm Concept Unique Identifier(RxCUI)を使って医薬品ラベルを取得し、RxNorm ベースの臨床システムと連携します。
import requests
import time
BASE = "https://dailymed.nlm.nih.gov/dailymed/services/v2"
def get_spls_by_rxcui(rxcui):
"""Get all SPLs associated with an RxCUI. Returns list of set IDs and titles."""
r = requests.get(f"{BASE}/rxcuis/{rxcui}/spls.json", timeout=15)
r.raise_for_status()
return r.json()
# RxCUI for atorvastatin: 83367
rxcui = "83367"
result = get_spls_by_rxcui(rxcui)
print(f"SPLs for RxCUI {rxcui} (atorvastatin):")
for spl in result["data"][:5]:
print(f" {spl['setid']} | {spl['title'][:70]}")
print(f" Total: {result['metadata']['total_elements']} labels")
クエリ 6:医薬品名インデックスを検索する
DailyMed に登録された標準化医薬品名をすべて一覧表示します。医薬品検索パイプラインで、名称の正規化やオートコンプリートを行う際に便利です。
import requests
BASE = "https://dailymed.nlm.nih.gov/dailymed/services/v2"
def search_drug_names(query, pagesize=20):
"""Search the DailyMed drug name index for name normalization."""
r = requests.get(f"{BASE}/drugnames.json",
params={"drug_name": query, "pagesize": pagesize},
timeout=15)
r.raise_for_status()
return r.json()
result = search_drug_names("metformin")
print(f"Drug name matches for 'metformin': {result['metadata']['total_elements']}")
for entry in result["data"][:8]:
print(f" {entry['drug_name']}")
# METFORMIN HYDROCHLORIDE
# METFORMIN HYDROCHLORIDE AND SITAGLIPTIN PHOSPHATE
# METFORMIN HYDROCHLORIDE AND SAXAGLIPTIN
クエリ 7:ラベルセクションを一括抽出する
比較分析のために、複数の医薬品ラベルから特定のセクション(例:適応症、警告)を抽出します。
import requests
import time
import pandas as pd
BASE = "https://dailymed.nlm.nih.gov/dailymed/services/v2"
# LOINC codes for common SPL sections
SECTION_LOINC = {
"34067-9": "Indications and Usage",
"34068-7": "Dosage and Administration",
"34071-1": "Warnings",
"34084-4": "Adverse Reactions",
"34070-3": "Contraindications",
"43685-7": "Warnings and Precautions",
}
def get_label_sections(setid):
"""Extract structured sections from an SPL by set ID."""
r = requests.get(f"{BASE}/spls/{setid}.json", timeout=20)
r.raise_for_status()
data = r.json()["data"]
sections = {}
for sec in data.get("sections", []):
loinc = sec.get("loinc_code")
if loinc in SECTION_LOINC:
sections[SECTION_LOINC[loinc]] = sec.get("text", "")
return sections
# Get indications for two statin labels
statins = [
("Atorvastatin", "8f6c7c7c-1f7f-4f1a-af86-8b2eef2a8b2c"),
("Rosuvastatin", "a3b2c4d5-1234-5678-abcd-ef0123456789"), # example
]
records = []
for drug_name, setid in statins:
try:
sections = get_label_sections(setid)
records.append({"drug": drug_name, "indications_length": len(sections.get("Indications and Usage", ""))})
except Exception as e:
print(f"Warning: {drug_name} failed — {e}")
time.sleep(0.3)
df = pd.DataFrame(records)
print(df.to_string(index=False))
主な概念
構造化製品ラベル(SPL)とセット ID
SPL は、Health Level 7(HL7)Clinical Document Architecture(CDA)を使用して構造化された XML 形式の、FDA 承認済み医薬品ラベルです。一意の医薬品製品ラベルごとに、グローバルに一意な セット ID(UUID 形式)が割り当てられます。同じラベルの複数のバージョンは同じセット ID を共有しますが、バージョン番号は異なります。最新の処方情報を確認するには、必ず最新の公開バージョンを使用してください。
LOINC セクションコード
DailyMed の SPL では、標準化された LOINC コードを使ってラベルのセクションを識別します。これにより、すべてのラベルから一貫した方法でプログラムにより情報を抽出できます。
| LOINC コード | セクション名 |
|---|---|
34067-9 | 適応症と使用法 |
34068-7 | 用法・用量と投与方法 |
34070-3 | 禁忌 |
34071-1 | 警告 |
43685-7 | 警告と使用上の注意 |
34084-4 | 副作用 |
34073-7 | 薬物相互作用 |
34076-0 | 患者への服薬指導情報 |
42229-5 | 作用機序 |
34069-5 | 供給形態/保管方法 |
NDC コード形式
National Drug Code(NDC)は、labeler-product-package の3つの数値セグメントからなる形式で医薬品を識別します(例:0071-0155-23)。システムによっては、ハイフンなしのNDCが使われることもあります。DailyMed の API クエリでは、どちらの形式も使用できます。
よくあるワークフロー
ワークフロー 1:有効成分別の医薬品ラベルの比較
目的:ある有効成分のすべての製剤についてラベルの内容を取得して比較します。ジェネリック医薬品とブランド医薬品の比較に役立ちます。
import requests
import time
import pandas as pd
BASE = "https://dailymed.nlm.nih.gov/dailymed/services/v2"
def search_spls(drug_name, pagesize=50):
r = requests.get(f"{BASE}/spls.json",
params={"drug_name": drug_name, "pagesize": pagesize},
timeout=15)
r.raise_for_status()
return r.json()
def get_packaging(setid):
r = requests.get(f"{BASE}/spls/{setid}/packaging.json", timeout=15)
r.raise_for_status()
return r.json()
# Search for all metformin labels
result = search_spls("metformin", pagesize=20)
labels = result["data"]
print(f"Found {len(labels)} metformin labels")
rows = []
for label in labels[:10]: # limit for demo
setid = label["setid"]
try:
pkg = get_packaging(setid)
for item in pkg["data"][:2]:
rows.append({
"title": label["title"][:60],
"setid": setid,
"ndc": item.get("ndc"),
"dosage_form": item.get("dosage_form"),
"route": item.get("route"),
"marketing_status": item.get("marketing_status"),
"published_date": label.get("published_date"),
})
except Exception as e:
print(f"Skipping {setid}: {e}")
time.sleep(0.3)
df = pd.DataFrame(rows)
print(f"\nFormulations with packaging data: {len(df)}")
print(df[["title", "dosage_form", "route", "marketing_status"]].drop_duplicates().to_string(index=False))
df.to_csv("metformin_formulations.csv", index=False)
print("\nSaved: metformin_formulations.csv")
ワークフロー 2:安全性分析のための警告および副作用の抽出
目的:薬剤監視研究のため、一連の医薬品ラベルから警告および副作用のテキストを構造化して体系的に抽出します。
import requests
import time
import pandas as pd
BASE = "https://dailymed.nlm.nih.gov/dailymed/services/v2"
TARGET_SECTIONS = {
"34071-1": "Warnings",
"43685-7": "Warnings_and_Precautions",
"34084-4": "Adverse_Reactions",
"34070-3": "Contraindications",
}
def search_and_get_sections(drug_name, max_labels=5):
"""Search for labels and extract safety-relevant sections."""
search_r = requests.get(f"{BASE}/spls.json",
params={"drug_name": drug_name, "pagesize": max_labels},
timeout=15)
search_r.raise_for_status()
labels = search_r.json()["data"][:max_labels]
records = []
for label in labels:
setid = label["setid"]
try:
label_r = requests.get(f"{BASE}/spls/{setid}.json", timeout=20)
label_r.raise_for_status()
spl_data = label_r.json()["data"]
row = {"drug_name": drug_name, "title": label["title"][:80], "setid": setid}
for loinc, col in TARGET_SECTIONS.items():
text = ""
for sec in spl_data.get("sections", []):
if sec.get("loinc_code") == loinc:
text = sec.get("text", "")[:500] # first 500 chars
break
row[col] = text
records.append(row)
except Exception as e:
print(f" Skipping {setid}: {e}")
time.sleep(0.3)
return pd.DataFrame(records)
# Compare safety sections across ACE inhibitor labels
drugs = ["lisinopril", "enalapril"]
all_records = []
for drug in drugs:
print(f"Processing: {drug}")
df = search_and_get_sections(drug, max_labels=3)
all_records.append(df)
combined = pd.concat(all_records, ignore_index=True)
print(f"\nExtracted safety sections: {len(combined)} labels")
print(combined[["drug_name", "title"]].to_string(index=False))
combined.to_csv("ace_inhibitor_safety_sections.csv", index=False)
print("Saved: ace_inhibitor_safety_sections.csv")
ワークフロー 3:薬効分類別のラベル分布の可視化
目的:ある分類に属する複数の医薬品をクエリし、ラベルが付与された製剤数を数えて、その分布を可視化します。
import requests
import time
import pandas as pd
import matplotlib.pyplot as plt
BASE = "https://dailymed.nlm.nih.gov/dailymed/services/v2"
def count_labels(drug_name):
"""Return total SPL count for a drug name."""
r = requests.get(f"{BASE}/spls.json",
params={"drug_name": drug_name, "pagesize": 1},
timeout=15)
r.raise_for_status()
return r.json()["metadata"]["total_elements"]
# Count labels for common statins
statins = {
"atorvastatin": "Atorvastatin",
"rosuvastatin": "Rosuvastatin",
"simvastatin": "Simvastatin",
"pravastatin": "Pravastatin",
"lovastatin": "Lovastatin",
"fluvastatin": "Fluvastatin",
"pitavastatin": "Pitavastatin",
}
counts = {}
for query, label in statins.items():
try:
counts[label] = count_labels(query)
print(f" {label}: {counts[label]} labels")
except Exception as e:
print(f" {label}: error — {e}")
time.sleep(0.3)
# Visualization
df = pd.DataFrame(list(counts.items()), columns=["Drug", "Label_Count"])
df = df.sort_values("Label_Count", ascending=True)
fig, ax = plt.subplots(figsize=(9, 5))
bars = ax.barh(df["Drug"], df["Label_Count"], color="#2196F3", edgecolor="white")
ax.bar_label(bars, fmt="%d", padding=4, fontsize=9)
ax.set_xlabel("Number of DailyMed SPL Entries")
ax.set_title("DailyMed: FDA Drug Label Count by Statin\n(includes brand + generic formulations)")
ax.set_xlim(0, df["Label_Count"].max() * 1.15)
plt.tight_layout()
plt.savefig("statin_label_counts.png", dpi=150, bbox_inches="tight")
print(f"Saved: statin_label_counts.png (total labels: {df['Label_Count'].sum()})")
主なパラメーター
| パラメーター | エンドポイント | デフォルト | 範囲/オプション | 効果 |
|---|---|---|---|---|
drug_name | /spls、/drugnames | — | 任意の医薬品名文字列 | 医薬品名でラベルを絞り込みます(一部一致に対応) |
ndc | /spls | — | NDC コード文字列 | National Drug Code でラベルを絞り込みます |
pagesize | /spls、/drugnames | 20 | 1~100 | 1ページあたりの結果数。最大100件 |
page | /spls、/drugnames | 1 | 正の整数 | ページネーションで使用するページ番号 |
setid | /spls/{setid}、/spls/{setid}/packaging | — | UUID 文字列 | 一意のラベル識別子。直接アクセスに必要です |
rxcui | /rxcuis/{rxcui}/spls | — | RxNorm の概念 ID | 臨床システムとの統合のため、RxCUI でラベルを検索します |
format | すべてのエンドポイント | json | json、xml | レスポンス形式。JSON がデフォルトで推奨されます |
ベストプラクティス
-
一括処理の前に set ID を解決する:
/spls検索で set ID を取得してから、set ID を使って完全なラベルを取得します。FDA が割り当てた UUID 識別子であるため、医薬品名から set ID を作成しないでください。 -
一括処理のループに
time.sleep(0.3)を追加する:DailyMed は公表されたレート制限を設けていませんが、NIH の公開インフラストラクチャです。適切な間隔を置くことで、リクエストのスロットリングを防げます。import time for drug in drug_list: result = search_spls(drug) time.sleep(0.3) # 200 requests/minute safe upper bound -
セクションの抽出にはテキスト解析ではなく LOINC コードを使用する:ラベルのセクションは LOINC コードでインデックス化されているため、セクション見出しに対する壊れやすい正規表現を使わずに、すべての SPL 文書から一貫してセクションにアクセスできます。
-
包括的な結果を得るにはページネーションを使用する:デフォルトの
pagesize=20では製剤を見落とす可能性があります。ページネーションが必要かどうかは、metadata["total_elements"]を使って確認します。meta = result["metadata"] total_pages = meta["total_pages"] if total_pages > 1: for p in range(2, total_pages + 1): result = search_spls(drug_name, page=p) -
臨床システムとの統合には RxCUI を優先する:臨床システム(EHR、調剤)と統合する場合は、標準化された曖昧さのない医薬品識別のため、RxCUI ベースの検索(
/rxcuis/{rxcui}/spls)を使用します。
よく使うレシピ
レシピ:医薬品にブラックボックス警告があるか確認する
使用する場面:医薬品に FDA の最も強い警告レベルが適用されているか、すばやく確認します。
import requests
BASE = "https://dailymed.nlm.nih.gov/dailymed/services/v2"
BLACK_BOX_LOINC = "34066-1"
def has_black_box_warning(setid):
"""Return True and warning text if drug label has a black box (boxed) warning."""
r = requests.get(f"{BASE}/spls/{setid}.json", timeout=20)
r.raise_for_status()
sections = r.json()["data"].get("sections", [])
for sec in sections:
if sec.get("loinc_code") == BLACK_BOX_LOINC:
return True, sec.get("text", "")[:300]
return False, ""
# Example: check warfarin label
setid = "8b7c3d4e-5678-90ab-cdef-1234567890ab" # example warfarin setid
has_warning, text = has_black_box_warning(setid)
print(f"Black box warning: {has_warning}")
if has_warning:
print(f"Warning text (first 300 chars): {text}")
レシピ:複数ページを検索してすべての結果を取得する
使用する場面:合計件数が1ページを超える場合に、医薬品に一致するラベルをすべて取得します。
import requests
import time
BASE = "https://dailymed.nlm.nih.gov/dailymed/services/v2"
def search_all_spls(drug_name, pagesize=100, delay=0.3):
"""Retrieve all SPLs for a drug name across multiple pages."""
all_labels = []
page = 1
while True:
r = requests.get(f"{BASE}/spls.json",
params={"drug_name": drug_name, "pagesize": pagesize, "page": page},
timeout=15)
r.raise_for_status()
data = r.json()
all_labels.extend(data["data"])
if page >= data["metadata"]["total_pages"]:
break
page += 1
time.sleep(delay)
return all_labels
labels = search_all_spls("ibuprofen")
print(f"Total ibuprofen labels: {len(labels)}")
レシピ:ラベルの概要を CSV にエクスポートする
使用する場面:オフライン分析用に、医薬品ラベルのフラットな参照テーブルを作成します。
import requests
import pandas as pd
BASE = "https://dailymed.nlm.nih.gov/dailymed/services/v2"
def export_drug_labels(drug_name, pagesize=50):
"""Export label summaries for a drug name to DataFrame."""
r = requests.get(f"{BASE}/spls.json",
params={"drug_name": drug_name, "pagesize": pagesize},
timeout=15)
r.raise_for_status()
data = r.json()
df = pd.DataFrame(data["data"])
df["drug_query"] = drug_name
return df, data["metadata"]["total_elements"]
df, total = export_drug_labels("amoxicillin")
print(f"Retrieved {len(df)} of {total} amoxicillin labels")
df[["setid", "title", "published_date"]].to_csv("amoxicillin_labels.csv", index=False)
print(f"Saved: amoxicillin_labels.csv (columns: {list(df.columns[:5])})")
トラブルシューティング
| 問題 | 原因 | 解決策 |
|---|---|---|
/spls/{setid} で 404 Not Found が発生する | set ID が無効、または廃止されています | 薬剤名で再検索し、現在の set ID を取得してください |
検索結果の data リストが空です | 薬剤名がいずれのラベルにも一致していません | 短い名前を試してください(例:"metformin HCl tablets" ではなく "metformin")。スペルも確認してください |
| SPL JSON のセクションが欠けています | 古いラベルには、LOINC コード付きのセクションがすべて含まれていない場合があります | 反復処理の前に len(sections) を確認してください。従来のラベルについては XML 形式に切り替えてください |
ConnectionError/タイムアウトが発生する | DailyMed サーバーが過負荷です | 指数バックオフで再試行し、timeout=30 に設定してください |
| ページネーションで重複が返される | ページ境界で競合状態が発生しています | すべてのページを取得した後、setid で結果の重複を除去してください |
| 包装情報のエンドポイントが空の結果を返す | ラベルは存在しますが、包装記録がありません | 一部の生物製剤やワクチンには包装データがありません。ラベルデータをそのまま使用してください |
| RxCUI の検索で結果が返されない | RxCUI が DailyMed にマッピングされていません | クエリを実行する前に、RxNorm API で RxCUI を確認してください。一部の実験薬はマッピングされていません |
関連スキル
fda-database— openFDA の有害事象報告(FAERS)、医薬品のリコール、規制措置ddinter-database— DDInter の薬物間相互作用の重症度とメカニズムdrugbank-database-access— 標的、経路、化学的特性などを含む包括的な医薬品情報clinicaltrials-database-search— 医薬品の臨床試験データを提供する ClinicalTrials.gov
参考資料
- DailyMed — 公式の医薬品ラベルリポジトリ(NLM/NIH)
- DailyMed Web Services API v2 — REST API の完全なドキュメント
- SPL Standard (HL7) — Structured Product Labeling 標準のドキュメント
- LOINC Document Ontology — SPL セクションの識別に使用する LOINC コード
- NLM DailyMed Overview — データの収録範囲と更新頻度