Help:WikiPathways Metabolomics
From WikiPathways
On this page we collect SPARQL queries to see the state of the Metabolome in WikiPathways. Triggered by User:Andra's RDF / SPARQL work, curation started with metabolites without database identifiers. But this soon led to the observation that metabolites are often not even annotated as being a metabolite (using <Label> rather than <DataNode>). Therefore, User:Egonw started at Pathway:WP1 to curate them one by one and fix these issues:
- connect lines between metabolites
- convert metabolites to use <Label> rather than <DataNode>
The reason for this is that these are some basic underlying properties we need for metabolomics research fields.
The Data
The latest revision you can look up with:
prefix wp: <http://vocabularies.wikipathways.org/wp#> select str(?o) where { ?pw a wp:Pathway ; <http://purl.org/pav/version> ?o . } order by desc(?o) limit 1
Metabolome
The following queries provide an overview of the Metabolome captures by WikiPathways.
The key type for metabolites is the wp:Metabolite. We can see all available properties with:
prefix wp: <http://vocabularies.wikipathways.org/wp#> select distinct ?p where { ?mb a wp:Metabolite ; ?p [] . }
CHEMINF ontology
Some properties are exposed using the CHEMINF ontology. We can see which attributes those are with:
prefix cheminf: <http://semanticscience.org/resource/> select distinct ?attribType where { ?mb cheminf:CHEMINF_000200 ?ciAttrib . ?ciAttrib a ?attribType . }
THIS IS NO LONGER WORKING.
Pathway properties
Likewise, we can get all pathway properties with:
prefix wp: <http://vocabularies.wikipathways.org/wp#> select distinct ?p where { ?mb a wp:Pathway ; ?p [] . }
Latest data only
To only get analysis of the most recent pathways, add this snippet to your SPARQL, assuming ?pathway is the used variable name:
?mb dcterms:isPartOf ?pathway . ?pathway pav:version ?version . ?mb dcterms:isPartOf ?pathway2 . ?pathway2 pav:version ?version2 . FILTER (?version2 > ?version)
However, it should be kept in mind that this is not a fool-proof solution.
All Metabolites
Count
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> select count(?mb) where { ?mb a wp:Metabolite . }
Revision | Count | |
67787 | 5790 | 2013-07-05 |
List
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> select distinct ?mb ?label where { ?mb a wp:Metabolite ; rdfs:label ?label . }
Metabolic Data Sources
Sorted by use
HMDB, ChEBI, and KEGG are the main data sources for identifiers. InChI/InChIKey should also be there but is missing. A big curation process in January 2013 ensured that "PubChem compound" is now used as data source for PubChem CIDs.
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> select str(?datasource) count(distinct ?identifier) as ?count where { ?mb a wp:Metabolite ; dc:source ?datasource ; dc:identifier ?identifier . } order by desc(?count)
All metabolites from one source
All KEGG identifiers
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> select distinct ?identifier where { ?mb a wp:Metabolite ; dc:source "Kegg Compound"^^xsd:string ; dc:identifier ?identifier . } order by ?identifier
All HMDB identifiers
Return all HMDB identfiers with:
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> select distinct ?identifier where { ?mb a wp:Metabolite ; dc:source "HMDB"^^xsd:string ; dc:identifier ?identifier . } order by ?identifier
Return all metabolites listed to have a HMDB identifier but have none:
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> select distinct ?identifier where { ?mb a wp:Metabolite ; dc:source "HMDB"^^xsd:string ; dc:identifier ?identifier . FILTER (regex(str(?identifier),"noIdentifier")) } order by ?identifier
At the time of writing, this showed a number of XRefs with HMDB as data source but no identifiers, which needs curation:
http://www.hmdb.ca/metabolites/noIdentifier http://rdf.wikipathways.org/Pathway/WP1002_r35260 http://www.hmdb.ca/metabolites/noIdentifier http://rdf.wikipathways.org/Pathway/WP1119_r35265 http://www.hmdb.ca/metabolites/noIdentifier http://rdf.wikipathways.org/Pathway/WP1250_r41240 http://www.hmdb.ca/metabolites/noIdentifier http://rdf.wikipathways.org/Pathway/WP1266_r41328 http://www.hmdb.ca/metabolites/noIdentifier http://rdf.wikipathways.org/Pathway/WP1285_r41669 http://www.hmdb.ca/metabolites/noIdentifier http://rdf.wikipathways.org/Pathway/WP1304_r41670 http://www.hmdb.ca/metabolites/noIdentifier http://rdf.wikipathways.org/Pathway/WP1310_r41659 http://www.hmdb.ca/metabolites/noIdentifier http://rdf.wikipathways.org/Pathway/WP1339_r35269 http://www.hmdb.ca/metabolites/noIdentifier http://rdf.wikipathways.org/Pathway/WP167_r45138 http://www.hmdb.ca/metabolites/noIdentifier http://rdf.wikipathways.org/Pathway/WP2267_r53133 http://www.hmdb.ca/metabolites/noIdentifier http://rdf.wikipathways.org/Pathway/WP28_r38852 http://www.hmdb.ca/metabolites/noIdentifier http://rdf.wikipathways.org/Pathway/WP28_r38852/group/ac37a http://www.hmdb.ca/metabolites/noIdentifier http://rdf.wikipathways.org/Pathway/WP295_r41324 http://www.hmdb.ca/metabolites/noIdentifier http://rdf.wikipathways.org/Pathway/WP337_r41644 http://www.hmdb.ca/metabolites/noIdentifier http://rdf.wikipathways.org/Pathway/WP495_r41327 http://www.hmdb.ca/metabolites/noIdentifier http://rdf.wikipathways.org/Pathway/WP59_r41653 http://www.hmdb.ca/metabolites/noIdentifier http://rdf.wikipathways.org/Pathway/WP678_r41165 http://www.hmdb.ca/metabolites/noIdentifier http://rdf.wikipathways.org/Pathway/WP716_r45017
Metabolic Pathways
Metabolomes
Human Metabolome
This only returns 244 metabolites, which is not a lot at all, and does not even take account the metabolite identity. Something wrong with wp:organism? It finds 107 human pathways.
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix dcterms: <http://purl.org/dc/terms/> prefix ncbi: <http://purl.obolibrary.org/obo/NCBITaxon_> select distinct ?mb where { ?mb a wp:Metabolite ; dcterms:isPartOf ?pw . ?pw wp:organism ncbi:9606 . } order by ?mb
Revision | Count | |
67787 | 1972 | 2013-07-06 |
Pathways with the most metabolites
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> prefix xsd: <http://www.w3.org/2001/XMLSchema#> prefix pav: <http://purl.org/pav/> select ?pathway count(?mb) as ?mbCount where { ?mb a wp:Metabolite ; dcterms:isPartOf ?pathway . } order by desc(?mbCount)
Metabolites in the most Pathways
With the remark that BridgeDB is not involved yet.
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> prefix xsd: <http://www.w3.org/2001/XMLSchema#> prefix pav: <http://purl.org/pav/> select ?mb count(?pathway) as ?pwCount where { ?mb a wp:Metabolite ; dcterms:isPartOf ?pathway . } order by desc(?pwCount)
Identifier Mapping Completeness
Right now, the HMDB is the primary (and only) source of mappings. That raises the question how many metabolites are in WP that do not have mappings to other databases. The following queries are about that.
The missing mappings
The next query counts all unique missing identifiers in HMDB, resulting in missing mappings to other databases: at the time of writing, this are 927 identifiers. These are not unique identifiers, which is 404 (Run) at the time of writing. Given there are about 1400 unique metabolite identifiers, this is about 30%, which is rather significant.
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> select count(?source) where { ?mb a wp:Metabolite ; dc:source ?source ; rdfs:label ?label ; dcterms:identifier ?identifier ; dcterms:isPartOf ?pathway . OPTIONAL { ?mb wp:bdbHmdb ?bridgedb . } FILTER (!BOUND(?bridgedb)) FILTER (str(?source) = "ChEBI" || str(?source) = "CAS" || str(?source) = "Kegg Compound" || str(?source) = "Chemspider" || str(?source) = "HMDB") FILTER (str(?identifier) != "") }
The full list
These are the unique identifiers missing:
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> select distinct str(?source) str(?identifier) where { ?mb a wp:Metabolite ; dc:source ?source ; rdfs:label ?label ; dcterms:identifier ?identifier ; dcterms:isPartOf ?pathway . OPTIONAL { ?mb wp:bdbHmdb ?bridgedb . } FILTER (!BOUND(?bridgedb)) FILTER (str(?source) = "ChEBI" || str(?source) = "CAS" || str(?source) = "Kegg Compound" || str(?source) = "Chemspider" || str(?source) = "HMDB") FILTER (str(?identifier) != "") } order by ?source ?identifier
ChEBI identifiers not in HMDB
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> select distinct ?pathway ?identifier ?label where { ?mb a wp:Metabolite ; dc:source "ChEBI"^^xsd:string ; rdfs:label ?label ; dcterms:identifier ?identifier ; dcterms:isPartOf ?pathway . OPTIONAL { ?mb wp:bdbHmdb ?bridgedb . } FILTER (!BOUND(?bridgedb)) } order by ?identifier
CAS identifiers not in HMDB
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> select distinct ?pathway ?identifier ?label where { ?mb a wp:Metabolite ; dc:source "CAS"^^xsd:string ; rdfs:label ?label ; dcterms:identifier ?identifier ; dcterms:isPartOf ?pathway . OPTIONAL { ?mb wp:bdbHmdb ?bridgedb . } FILTER (!BOUND(?bridgedb)) } order by ?identifier
Kegg compound identifiers not in HMDB
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> select distinct ?pathway ?identifier ?label where { ?mb a wp:Metabolite ; dc:source "Kegg Compound"^^xsd:string ; rdfs:label ?label ; dcterms:identifier ?identifier ; dcterms:isPartOf ?pathway . OPTIONAL { ?mb wp:bdbHmdb ?bridgedb . } FILTER (!BOUND(?bridgedb)) } order by ?identifier
PubChem-compound identifiers not in HMDB
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> select distinct ?pathway ?identifier ?label where { ?mb a wp:Metabolite ; dc:source "PubChem-compound"^^xsd:string ; rdfs:label ?label ; dcterms:identifier ?identifier ; dcterms:isPartOf ?pathway . OPTIONAL { ?mb wp:bdbHmdb ?bridgedb . } FILTER (!BOUND(?bridgedb)) } order by ?identifier
ChemSpider
Unique ChemSpider IDs
They can be counted with:
prefix dcterms: <http://purl.org/dc/terms/> prefix cheminf: <http://semanticscience.org/resource/> select count(distinct ?csid) where { [] cheminf:CHEMINF_000200 ?Concept . ?Concept cheminf:SIO_000300 ?csid ; a cheminf:CHEMINF_000405 . }
And all listed with this non-counting equivalent:
prefix dcterms: <http://purl.org/dc/terms/> prefix cheminf: <http://semanticscience.org/resource/> select distinct ?csid where { [] cheminf:CHEMINF_000200 ?Concept . ?Concept cheminf:SIO_000300 ?csid ; a cheminf:CHEMINF_000405 . }
Linking ChemSpider IDs to WikiPathway
I need to ask Andra why not all pathways have a foaf:page, but these table should be discussed with Antony:
prefix foaf: <http://xmlns.com/foaf/0.1/> prefix dcterms: <http://purl.org/dc/terms/> prefix cheminf: <http://semanticscience.org/resource/> select distinct str(?csid) ?pathway ?page where { ?mb cheminf:CHEMINF_000200 ?Concept . ?mb dcterms:isPartOf ?pathway . OPTIONAL { ?pathway foaf:page ?page . } ?Concept cheminf:SIO_000300 ?csid ; a cheminf:CHEMINF_000405 . } order by ?csid
Metabolites without ChemSpider identifiers
We can count them as about 1371 at the time of writing, with this query:
prefix foaf: <http://xmlns.com/foaf/0.1/> prefix dcterms: <http://purl.org/dc/terms/> prefix cheminf: <http://semanticscience.org/resource/> select count(distinct fn:concat(?source,?identifier)) where { ?mb a wp:Metabolite ; dc:source ?source ; dcterms:identifier ?identifier ; dcterms:isPartOf ?pathway . OPTIONAL { ?mb cheminf:CHEMINF_000200 ?Concept . ?Concept cheminf:SIO_000300 ?csid ; a cheminf:CHEMINF_000405 . } FILTER (!BOUND(?csid)) }
And listing all of them with a similar one:
prefix foaf: <http://xmlns.com/foaf/0.1/> prefix dcterms: <http://purl.org/dc/terms/> prefix cheminf: <http://semanticscience.org/resource/> select distinct str(?source) str(?identifier) ?pathway where { ?mb a wp:Metabolite ; dc:source ?source ; dcterms:identifier ?identifier ; dcterms:isPartOf ?pathway . OPTIONAL { ?mb cheminf:CHEMINF_000200 ?Concept . ?Concept cheminf:SIO_000300 ?csid ; a cheminf:CHEMINF_000405 . } FILTER (str(?source) != "InChI") FILTER (!BOUND(?csid)) } order by ?source ?identifier
Curation
Common wrong identifiers
PubChem-compound 1004
Wrongly used for phosphate. It is the uncharged compound. Phosphate is, instead, and particularly thinkgs like "Pi", CID 1061 for ortho-phosphate, aka [PO4]2-.
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> prefix xsd: <http://www.w3.org/2001/XMLSchema#> select ?pathway ?source where { ?mb dc:source ?source ; dcterms:isPartOf ?pathway ; dcterms:identifier "1004"^^xsd:string . }
Outdated HMDB identifiers
These results show HMDB identifiers used in WikiPathways but that are revoked or have become secondary identifiers.
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> select distinct ?identifier where { ?mb a wp:Metabolite ; dc:source "HMDB"^^xsd:string ; dc:identifier ?identifier . OPTIONAL { ?mb wp:bdbHmdb ?bridgedb . } FILTER (!BOUND(?bridgedb)) } order by ?identifier
Metabolites not classified as such
One can list all data sources for non-metabolites with this query.
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> select ?datasource count(?identifier) as ?count where { ?mb dc:source ?datasource ; dcterms:identifier ?identifier . FILTER NOT EXISTS { ?mb a wp:Metabolite } } order by desc(?count)
That mostly lists gene identifier sources, etc, but watch out for the metabolite identifier data sources. For example, metabolites not marked as such but with a metabolite identifier can be found this way. Down the list is CAS (but genes are chemicals too...), and a few minor more:
"CTD Gene"^^<http://www.w3.org/2001/XMLSchema#string> 5 "HMDB"^^<http://www.w3.org/2001/XMLSchema#string> 4 "ChEBI"^^<http://www.w3.org/2001/XMLSchema#string> 3 "GLYCAN"^^<http://www.w3.org/2001/XMLSchema#string> 3 "COMPOUND"^^<http://www.w3.org/2001/XMLSchema#string> 3 "PubChem"^^<http://www.w3.org/2001/XMLSchema#string> 2
I would expect GLYCAN and COMPOUND to be misnomers of the matching KEGG subsets.
Non-Metabolites with CAS identifier
Note that a CAS identifier can also refer to mixtures, compound classes, etc.
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> prefix xsd: <http://www.w3.org/2001/XMLSchema#> select distinct ?pathway ?mb ?label ?identifier where { ?mb dc:source "CAS"^^xsd:string ; rdfs:label ?label ; dcterms:identifier ?identifier ; dcterms:isPartOf ?pathway . FILTER NOT EXISTS { ?mb a wp:Metabolite } } order by ?pathway
Non-Metabolites with PubChem identifier
At the time of writing, this results in an empty set.
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> prefix xsd: <http://www.w3.org/2001/XMLSchema#> select distinct ?pathway ?mb ?label ?identifier where { ?mb dc:source "PubChem-compound"^^xsd:string ; dcterms:identifier ?identifier ; dcterms:isPartOf ?pathway . OPTIONAL { ?mb rdfs:label ?label . } FILTER NOT EXISTS { ?mb a wp:Metabolite } } order by ?pathway
Metabolites sometimes markes as Metabolite
Based on label comparisons, we can find things that are labeled the same as a data node with the same label. Of course, this can give false positives, because genes can be incorrectly marked as metabolite in some pathway, but that is another SPARQL query.
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> prefix xsd: <http://www.w3.org/2001/XMLSchema#> select ?pathway ?nonmb ?mb ?label where { ?nonmb rdfs:label ?label . ?mb rdfs:label ?label . OPTIONAL { ?nonmb dcterms:isPartOf ?pathway . } FILTER ( ?nonmb != ?mb ) FILTER NOT EXISTS { ?nonmb a wp:Metabolite } FILTER EXISTS { ?mb a wp:Metabolite } FILTER (!regex(str(?nonmb), "noIdentifier", "i")) FILTER (!regex(str(?mb), "noIdentifier", "i")) }
Metabolites with an identifier but undefined data source
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> prefix xsd: <http://www.w3.org/2001/XMLSchema#> select distinct ?pathway ?mb ?identifier where { ?mb a wp:Metabolite ; dc:source ""^^xsd:string ; dc:identifier ?identifier ; dcterms:isPartOf ?pathway . FILTER (!isIRI(?identifier)) FILTER (str(?identifier) != "") } order by ?pathway
Metabolites with a data source but no identifier
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> prefix xsd: <http://www.w3.org/2001/XMLSchema#> select distinct ?pathway ?mb ?source where { ?mb a wp:Metabolite ; dcterms:identifier ""^^xsd:string ; dc:source ?source ; dcterms:isPartOf ?pathway . FILTER (str(?source) != "") FILTER (!regex(str(?pathway), "internal.wikipathways.org", "i")) } order by ?pathway
Metabolites with an Entrez Gene identifier
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> prefix xsd: <http://www.w3.org/2001/XMLSchema#> select distinct ?pathway ?mb ?label ?identifier where { ?mb a wp:Metabolite ; rdfs:label ?label ; dc:source "Entrez Gene"^^xsd:string ; dcterms:identifier ?identifier ; dcterms:isPartOf ?pathway . FILTER (str(?identifier) != "") } order by ?pathway
Metabolites as just Label
Metabolites may be marked up as DataNode but not types as Metabolite. Here are some examples: ATP, CO2, ADP, Phosphate, L-glutamate, and Cholesterol.
ATP
This example shows how to find them.
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> prefix xsd: <http://www.w3.org/2001/XMLSchema#> select ?pathway ?source ?mb ?type where { ?mb rdfs:label "ATP"@en . ?mb a ?type . OPTIONAL { ?mb dc:source ?source . } OPTIONAL { ?mb dcterms:isPartOf ?pathway . } FILTER NOT EXISTS { ?mb a wp:Metabolite . } }
Metabolites also labeled as GeneProduct
Sometimes things are incorrectly marked as Metabolite, when they really are GeneProducts. We can list entities based on their label that are both annotated as Metabolite and as GeneProduct:
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> prefix xsd: <http://www.w3.org/2001/XMLSchema#> select ?pathway ?mb ?gene ?label where { ?gene rdfs:label ?label . ?mb rdfs:label ?label . OPTIONAL { ?mb dcterms:isPartOf ?pathway . } FILTER ( ?gene != ?mb ) FILTER EXISTS { ?gene a wp:GeneProduct } FILTER EXISTS { ?mb a wp:Metabolite } FILTER (!regex(str(?mb), "noIdentifier", "i")) FILTER (!regex(str(?gene), "noIdentifier", "i")) }
Actually, this query does not do what I want it to do, because the FILTER only removes things from the result list, but does still allow things with "noIdentifier" to hook up things, messing up this query if there is just one URI with noIdentifier with the same label :(
Labels which are also marked as metabolite
prefix wp: <http://vocabularies.wikipathways.org/wp#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dcterms: <http://purl.org/dc/terms/> prefix xsd: <http://www.w3.org/2001/XMLSchema#> select ?pathway ?labelNode str(?label1) as ?labelStr ?mb str(?label2) as ?mbStr where { ?labelNode a gpml:Label ; rdfs:label ?label1 ; dcterms:isPartOf ?pathway . ?mb a wp:Metabolite ; rdfs:label ?label2 . FILTER ( ?labelNode != ?mb ) FILTER ( str(?label2) = str(?label1) ) FILTER (!regex(str(?mb), "noIdentifier", "i")) FILTER (!regex(str(?labelNode), "noIdentifier", "i")) } LIMIT 50 OFFSET 25