Database Snapshot
Key metrics and visualizations from the selected version of the AOP-Wiki database. Use the version selector to compare different database snapshots over time.
Current Database State
This section displays key metrics and visualizations from the most recent version of the AOP-Wiki database. These charts provide a snapshot of the current state of the knowledge base, showing entity counts, component distributions, and data quality metrics.
- Current State: View entity counts and database composition
- Network Analysis: Understand AOP connectivity and structural relationships
- Data Quality: Assess annotation completeness and ontology usage patterns
Bulk Download
Download all plots at once in multiple formats
Current Database State
Entity Counts
Total number of each entity type and unique authors in the latest version of the AOP-Wiki database.
Methodology
What this measures: Counts the total number of each major entity type (AOPs, Key Events, Key Event Relationships, Stressors) and unique authors in the selected version of the AOP-Wiki RDF database. Provides a high-level overview of database size and composition.
Data source: SPARQL queries against the AOP-Wiki RDF endpoint count instances of each entity class (aopo:AdverseOutcomePathway, aopo:KeyEvent, aopo:KeyEventRelationship, nci:C54571 for Stressors) and distinct creator URIs within a single named graph version.
Known limitations: Data reflects the RDF transformation of AOP-Wiki, not the raw database. Author counts are based on unique dc:creator URIs and may not correspond exactly to AOP-Wiki user accounts. Entities without RDF type annotations would not be counted.
View SPARQL Query
SELECT ?graph (COUNT(?aop) AS ?count)
WHERE {
GRAPH ?graph {
?aop a aopo:AdverseOutcomePathway .
}
}
GROUP BY ?graph
ORDER BY DESC(?graph) LIMIT 1
Network Analysis
AOP Connectivity
Analysis of AOP connectivity based on shared Key Events. Connected AOPs share at least one Key Event with other AOPs, while isolated AOPs have unique Key Events.
Methodology
What this measures: Analyzes the connectivity of AOPs based on shared Key Events. Connected AOPs share at least one Key Event with other AOPs, while isolated AOPs have entirely unique Key Events. This reveals the degree of overlap and interconnection in the AOP knowledge base.
Data source: Two SPARQL queries: one counts total AOPs, the other counts AOPs that share at least one Key Event with another AOP (via aopo:has_key_event). The difference gives the isolated AOP count.
Known limitations: Connectivity is determined solely by shared Key Events declared via aopo:has_key_event. Implicit relationships or shared stressors are not considered. Network density depends on explicitly declared KE-KER relationships in the RDF data.
View SPARQL Query
SELECT ?graph (COUNT(DISTINCT ?aop1) AS ?connected_aops)
WHERE {
GRAPH ?graph {
?aop1 aopo:has_key_event ?ke .
?aop2 aopo:has_key_event ?ke .
FILTER(?aop1 != ?aop2)
}
}
GROUP BY ?graph
ORDER BY DESC(?graph) LIMIT 1
Average Components per AOP
Average number of Key Events and Key Event Relationships per AOP in the current database.
Methodology
What this measures: Calculates the average number of Key Events and Key Event Relationships per AOP in the selected database version. This metric indicates the typical structural complexity of AOPs.
Data source: SPARQL queries count the total number of AOP-to-KE and AOP-to-KER relationships (via aopo:has_key_event and aopo:has_key_event_relationship), then divide by the total number of AOPs.
Known limitations: Averages can be skewed by a few very large or very small AOPs. The metric does not distinguish between well-developed and stub AOPs. Relationships must be explicitly declared in RDF.
View SPARQL Query
SELECT ?graph
(COUNT(?aop) AS ?count)
(COUNT(?ke) AS ?ke_count)
(COUNT(?ker) AS ?ker_count)
WHERE {
GRAPH ?graph {
?aop a aopo:AdverseOutcomePathway .
OPTIONAL { ?aop aopo:has_key_event ?ke . }
OPTIONAL { ?aop aopo:has_key_event_relationship ?ker . }
}
}
GROUP BY ?graph
ORDER BY DESC(?graph) LIMIT 1
Key Event Analysis
KE Component Distribution
Distribution of Key Event component annotations (Process, Object, Action) in the current database.
Methodology
What this measures: Shows the distribution of Key Event Component annotations (Biological Process, Biological Object, and Action) across all Key Events. Each KE can have up to three component annotations describing the biological context.
Data source: SPARQL queries count Key Events that have annotations for each component type: biological processes (via aopo:has_biological_process), biological objects (via aopo:has_biological_object), and actions (via aopo:has_action).
Known limitations: Only counts presence/absence of each component type, not the quality or specificity of annotations. KEs without any component annotations are not shown. Some KEs may have multiple annotations of the same type.
View SPARQL Query
SELECT ?graph
(COUNT(DISTINCT ?process) AS ?processes)
(COUNT(DISTINCT ?object) AS ?objects)
(COUNT(DISTINCT ?action) AS ?actions)
WHERE {
GRAPH ?graph {
?ke a aopo:KeyEvent .
OPTIONAL { ?ke aopo:has_biological_process ?process . }
OPTIONAL { ?ke aopo:has_biological_object ?object . }
OPTIONAL { ?ke aopo:has_action ?action . }
}
}
GROUP BY ?graph
ORDER BY DESC(?graph) LIMIT 1
KE Annotation Depth
Distribution of annotation depth for Key Events, showing how thoroughly they are documented.
Methodology
What this measures: Measures how thoroughly each Key Event is annotated by counting how many of the three possible KE Component types (Process, Object, Action) each KE has. Shows the distribution across 0, 1, 2, or 3 annotations per KE.
Data source: SPARQL query counts distinct component types per KE using OPTIONAL patterns for each component type (biological process, biological object, action), then groups KEs by their annotation count.
Known limitations: Treats all component types equally regardless of scientific importance. A KE with 3 low-quality annotations ranks higher than one with 1 highly specific annotation. Only measures breadth, not depth of annotation.
View SPARQL Query
SELECT ?graph ?ke
(COUNT(DISTINCT ?process) AS ?p)
(COUNT(DISTINCT ?object) AS ?o)
(COUNT(DISTINCT ?action) AS ?a)
WHERE {
GRAPH ?graph {
?ke a aopo:KeyEvent .
OPTIONAL { ?ke aopo:has_biological_process ?process . }
OPTIONAL { ?ke aopo:has_biological_object ?object . }
OPTIONAL { ?ke aopo:has_action ?action . }
}
}
GROUP BY ?graph ?ke
ORDER BY DESC(?graph)
Breakdown Analysis
Key Events by Biological Level of Organization
Distribution of Key Events across biological levels of organization (molecular, cellular, tissue, organ, organism, population). Shows which biological scales are most studied.
Methodology
What this measures: Distribution of Key Events across biological levels of organization (molecular, cellular, tissue, organ, organism, population). Reveals which biological scales are most represented in the AOP-Wiki knowledge base.
Data source: SPARQL query counts distinct Key Events grouped by their Level of Biological Organisation annotation (NCI Thesaurus property C25664). KEs without this annotation appear as 'Not Annotated'.
Known limitations: Not all Key Events have biological level annotations. Unannotated KEs appear as 'Not Annotated' and may dominate the chart. The level vocabulary depends on how curators annotated each KE. Coverage varies by version as curation progresses.
View SPARQL Query
SELECT ?level_label (COUNT(DISTINCT ?ke) AS ?count)
WHERE {
GRAPH <{graph}> {
?ke a aopo:KeyEvent .
OPTIONAL { ?ke <C25664_URI> ?level_obj . }
BIND(IF(BOUND(?level_obj), STR(?level_obj), 'Not Annotated') AS ?level_label)
}
}
GROUP BY ?level_label
Taxonomic Group Distribution Across AOPs
Which taxonomic groups (species/organisms) are most represented across AOPs in the current database. Shows the top taxonomic applicability annotations.
Methodology
What this measures: Shows which taxonomic groups (species or organisms) are most represented across AOPs via the Taxonomic Applicability annotation. Identifies the most commonly studied organisms in AOP-Wiki.
Data source: SPARQL query counts distinct AOPs grouped by their Taxonomic Applicability annotation (NCBI Taxonomy property 131567). Only AOPs with explicit taxonomy annotations are included.
Known limitations: Only AOPs with explicit taxonomic applicability annotations are shown. Many AOPs may lack this annotation entirely. Taxonomy labels are extracted from URIs and may appear as identifiers rather than common species names. A single AOP can have multiple taxonomic applicability annotations.
View SPARQL Query
SELECT ?taxon_label (COUNT(DISTINCT ?aop) AS ?aop_count)
WHERE {
GRAPH <{graph}> {
?aop a aopo:AdverseOutcomePathway .
?aop <NCBITAXON/131567> ?taxon_obj .
BIND(STR(?taxon_obj) AS ?taxon_label)
}
}
GROUP BY ?taxon_label
ORDER BY DESC(?aop_count)
LIMIT 25
Entity Counts by OECD Status
Breakdown of AOPs, Key Events, and Key Event Relationships by their OECD approval status. Shows the curation maturity distribution across entity types.
Methodology
What this measures: Breaks down entity counts (AOPs, Key Events, Key Event Relationships) by OECD approval status category. Shows how curation maturity is distributed across entity types.
Data source: Three separate SPARQL queries count AOPs directly by their OECD Status annotation (NCI Thesaurus C25688), and KEs/KERs by the OECD status of their parent AOPs (via aopo:has_key_event and aopo:has_key_event_relationship relationships).
Known limitations: KEs and KERs inherit OECD status from their parent AOPs. A KE belonging to AOPs with different statuses appears in each status group. AOPs without an OECD status annotation appear as 'No Status'. Status categories reflect what is present in the data.
View SPARQL Query
SELECT ?status_label (COUNT(DISTINCT ?aop) AS ?count)
WHERE {
GRAPH <{graph}> {
?aop a aopo:AdverseOutcomePathway .
OPTIONAL { ?aop <C25688_URI> ?status_obj . }
BIND(IF(BOUND(?status_obj), STR(?status_obj), 'No Status') AS ?status_label)
}
}
GROUP BY ?status_label
Key Event Reuse Analysis
Most Reused Key Events Across AOPs
Top 30 Key Events that appear in the most AOPs, revealing shared biology across pathways. Click on a bar to open the Key Event in AOP-Wiki.
Methodology
What this measures: Shows the top 30 Key Events that appear in the most AOPs, revealing shared biology across adverse outcome pathways. Clicking a bar opens the corresponding KE page on AOP-Wiki.
Data source: SPARQL query counts distinct AOPs per Key Event via aopo:has_key_event relationships. Only KEs appearing in more than one AOP are shown. KE titles are retrieved via dc:title.
Known limitations: Limited to the top 30 most reused KEs. KE titles may be truncated for readability. The count reflects explicit aopo:has_key_event declarations in the RDF data. Entity links open https://aopwiki.org/events/{id} in a new tab.
View SPARQL Query
SELECT ?ke (SAMPLE(?title_val) AS ?title) (COUNT(DISTINCT ?aop) AS ?aop_count)
WHERE {
GRAPH <{graph}> {
?aop a aopo:AdverseOutcomePathway ;
aopo:has_key_event ?ke .
OPTIONAL { ?ke dc:title ?title_val . }
}
}
GROUP BY ?ke
HAVING (COUNT(DISTINCT ?aop) > 1)
ORDER BY DESC(?aop_count)
LIMIT 30
Key Event Reuse Distribution
Histogram showing how many AOPs each Key Event belongs to. Most KEs appear in only 1 AOP, but some are shared across many pathways.
Methodology
What this measures: Histogram showing the distribution of how many AOPs each Key Event belongs to. Most KEs appear in only 1 AOP, but some are shared across many pathways, indicating shared biological mechanisms.
Data source: SPARQL query counts distinct AOPs per Key Event, then bins the results into discrete categories: 1, 2, 3, 4, 5, 6-10, and 11+ AOPs per KE.
Known limitations: Bins KEs into discrete groups for readability. The '6-10' and '11+' bins aggregate multiple values. Only KEs that are linked to at least one AOP via aopo:has_key_event are included. Orphan KEs (not linked to any AOP) are excluded.
View SPARQL Query
SELECT ?ke (COUNT(DISTINCT ?aop) AS ?aop_count)
WHERE {
GRAPH <{graph}> {
?aop a aopo:AdverseOutcomePathway ;
aopo:has_key_event ?ke .
}
}
GROUP BY ?ke
Data Quality & Completeness
Ontology Term Diversity
Number of unique ontology terms used per source ontology (GO, CHEBI, UBERON, etc.) in Key Event annotations. Shows usage diversity, not coverage against reference ontologies.
Methodology
What this measures: Counts the number of unique ontology terms used per source ontology (GO, CHEBI, UBERON, NCBITAXON, etc.) in KE annotations. Shows the breadth of ontology vocabulary in use.
Data source: SPARQL query retrieves all distinct ontology-linked IRIs from biological process and biological object annotations. Python post-processing classifies each IRI by ontology namespace prefix and counts unique terms per source.
Known limitations: Shows aggregate counts of unique terms per ontology, not coverage vs reference ontologies (Phase 5 scope). Classification is based on URI prefix patterns. Terms from unrecognized ontologies appear as 'Other'.
View SPARQL Query
SELECT DISTINCT ?term
WHERE {
GRAPH <{graph}> {
{ ?s aopo:has_biological_process ?term }
UNION
{ ?s aopo:has_biological_object ?term }
}
FILTER(isIRI(?term))
}
AOP Completeness
Analysis of AOP data completeness showing the distribution of essential vs optional fields.
Methodology
What this measures: Analyzes how completely AOPs are documented by measuring the presence of key metadata properties. Shows the distribution of completeness scores across all AOPs, where completeness is the fraction of non-ubiquitous properties that are filled in.
Data source: Properties are loaded from property_labels.csv which defines expected properties per entity type. For each AOP, SPARQL queries check presence of each property. Properties that are 100% present (always filled) are excluded to focus on informative variation.
Known limitations: Completeness is based on property presence, not quality or accuracy of the data. Properties always present (100%) are excluded from the calculation. The property list is defined externally and may not capture all relevant metadata.
View SPARQL Query
SELECT ?graph ?aop
(GROUP_CONCAT(DISTINCT ?prop; separator=',') AS ?present_props)
WHERE {
GRAPH ?graph {
?aop a aopo:AdverseOutcomePathway .
?aop ?prop [] .
FILTER(?prop IN ({property_list}))
}
}
GROUP BY ?graph ?aop
ORDER BY DESC(?graph)
AOP Completeness by OECD Status
Comparison of AOP completeness scores across OECD status categories (Endorsed, Under Review, Under Development) grouped by property type: Essential (Title, Abstract, Description), Content (Key Events, Relationships, Stressors), Context (Applicability domains), Assessment (Evidence, Plausibility), and Metadata (Dates, Identifiers).
Methodology
What this measures: Compares AOP completeness scores across OECD approval status categories (e.g., Endorsed, Under Review, Under Development). Reveals whether more mature AOPs tend to be better documented. Properties are grouped into categories: Essential, Content, Context, Assessment, and Metadata.
Data source: Combines AOP completeness data with OECD status information. SPARQL queries retrieve both property presence counts and the OECD status for each AOP. Status is determined via the aopo:has_oecd_status predicate.
Known limitations: OECD status data is version-specific and may change between releases. Some AOPs may lack a status annotation. Properties always present (100%) are excluded from completeness calculation. Status categories reflect the OECD approval pipeline stages present in the data.
View SPARQL Query
SELECT ?graph ?aop ?status
(GROUP_CONCAT(DISTINCT ?prop; separator=',') AS ?present_props)
WHERE {
GRAPH ?graph {
?aop a aopo:AdverseOutcomePathway .
?aop ?prop [] .
OPTIONAL { ?aop aopo:has_oecd_status ?status . }
FILTER(?prop IN ({property_list}))
}
}
GROUP BY ?graph ?aop ?status
Show property details
KE Completeness by AOP OECD Status
Completeness of Key Events based on the OECD status of AOPs they belong to. KEs belonging to multiple AOPs with different statuses are counted for each status. Property types: Essential (Title, Description), Content (Biological components), Context (Applicability), Assessment (Evidence, Measurement), and Metadata (Dates, Links).
Methodology
What this measures: Measures completeness of Key Events based on the OECD status of the AOPs they belong to. KEs linked to multiple AOPs with different statuses are counted for each status. Property categories include Essential (Title, Description), Content (Biological components), Context (Applicability), Assessment (Evidence), and Metadata.
Data source: SPARQL queries join KE property presence data with AOP status information via the aopo:has_key_event relationship. Each KE inherits the status of its parent AOP(s).
Known limitations: A KE belonging to multiple AOPs with different OECD statuses will appear in each status group, potentially inflating counts. KEs not linked to any AOP are excluded. Properties always present are excluded from completeness scores.
View SPARQL Query
SELECT ?graph ?ke ?status
(COUNT(DISTINCT ?prop) AS ?prop_count)
WHERE {
GRAPH ?graph {
?aop aopo:has_key_event ?ke .
?aop aopo:has_oecd_status ?status .
?ke ?prop [] .
FILTER(?prop IN ({property_list}))
}
}
GROUP BY ?graph ?ke ?status
Show property details
KER Completeness by AOP OECD Status
Completeness of Key Event Relationships based on the OECD status of AOPs they belong to. KERs belonging to multiple AOPs with different statuses are counted for each status. Property types: Essential (Title, Description), Content (Upstream/Downstream KEs), Context (Applicability, Evidence type), and Metadata (Dates, Links).
Methodology
What this measures: Measures completeness of Key Event Relationships based on the OECD status of the AOPs they belong to. KERs linked to multiple AOPs with different statuses are counted for each status. Property categories include Essential, Content, Context, and Metadata.
Data source: SPARQL queries join KER property presence data with AOP status information via the aopo:has_key_event_relationship predicate. Each KER inherits the status of its parent AOP(s).
Known limitations: A KER belonging to multiple AOPs with different OECD statuses will appear in each status group. KERs not linked to any AOP are excluded. Properties always present are excluded from completeness scores.
View SPARQL Query
SELECT ?graph ?ker ?status
(COUNT(DISTINCT ?prop) AS ?prop_count)
WHERE {
GRAPH ?graph {
?aop aopo:has_key_event_relationship ?ker .
?aop aopo:has_oecd_status ?status .
?ker ?prop [] .
FILTER(?prop IN ({property_list}))
}
}
GROUP BY ?graph ?ker ?status
Show property details
Biological Process Usage
Distribution of biological process ontology terms used in Key Event annotations.
Methodology
What this measures: Shows the distribution of biological process ontology terms used in Key Event annotations. Identifies which ontologies (e.g., GO, MESH, NCIT) are most commonly referenced for describing biological processes in KE component annotations.
Data source: SPARQL queries retrieve all biological process URIs from KE component annotations (via aopo:has_biological_process), then group them by their ontology source namespace.
Known limitations: Only covers processes explicitly annotated in the RDF data. Ontology classification is based on URI prefix patterns. Some processes may be classified differently across ontologies.
View SPARQL Query
SELECT ?graph ?process (COUNT(?process) AS ?count)
WHERE {
GRAPH ?graph {
?ke aopo:has_biological_process ?process .
}
}
GROUP BY ?graph ?process
ORDER BY DESC(?graph)
Biological Object Usage
Distribution of biological object ontology terms used in Key Event annotations.
Methodology
What this measures: Shows the distribution of biological object ontology terms used in Key Event annotations. Identifies which ontologies are most commonly referenced for describing biological objects (molecules, genes, proteins, etc.) in KE component annotations.
Data source: SPARQL queries retrieve all biological object URIs from KE component annotations (via aopo:has_biological_object), then group them by their ontology source namespace.
Known limitations: Only covers objects explicitly annotated in the RDF data. Ontology classification is based on URI prefix patterns. Multiple ontology terms may refer to the same biological entity.
View SPARQL Query
SELECT ?graph ?object (COUNT(?object) AS ?count)
WHERE {
GRAPH ?graph {
?ke aopo:has_biological_object ?object .
}
}
GROUP BY ?graph ?object
ORDER BY DESC(?graph)