<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.3.4">Jekyll</generator><link href="https://chem-bla-ics.linkedchemistry.info/feed/by_tag/ldf.xml" rel="self" type="application/atom+xml" /><link href="https://chem-bla-ics.linkedchemistry.info/" rel="alternate" type="text/html" /><updated>2026-08-31T19:33:33+00:00</updated><id>https://chem-bla-ics.linkedchemistry.info/feed/by_tag/ldf.xml</id><title type="html">chem-bla-ics</title><subtitle>Chemblaics (pronounced chem-bla-ics) is the science that uses open science and computers to solve problems in chemistry, biochemistry and related fields.</subtitle><author><name>Egon Willighagen</name></author><entry><title type="html">Getting CAS registry numbers out of WikiData</title><link href="https://chem-bla-ics.linkedchemistry.info/2015/04/10/getting-cas-registry-numbers-out-of.html" rel="alternate" type="text/html" title="Getting CAS registry numbers out of WikiData" /><published>2015-04-10T00:00:00+00:00</published><updated>2015-04-10T00:00:00+00:00</updated><id>https://chem-bla-ics.linkedchemistry.info/2015/04/10/getting-cas-registry-numbers-out-of</id><content type="html" xml:base="https://chem-bla-ics.linkedchemistry.info/2015/04/10/getting-cas-registry-numbers-out-of.html"><![CDATA[<p>I have promised my Twitter followers the <a href="https://www.wikidata.org/wiki/Q54871">SPARQL query</a> you have all been waiting
for. Sadly, you had to wait for it for more than two months. I’m sorry about that. But, here it is:</p>

<div class="language-sparql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">PREFIX</span><span class="w"> </span><span class="nn">wd</span><span class="o">:</span><span class="w"> </span><span class="nn">&lt;http://www.wikidata.org/entity/&gt;</span><span class="w">

</span><span class="k">SELECT</span><span class="w"> </span><span class="nv">?compound</span><span class="w"> </span><span class="nv">?id</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="p">{</span><span class="w">
  </span><span class="nv">?compound</span><span class="w"> </span><span class="nn">wd</span><span class="o">:</span><span class="ss">P231s</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="nn">wd</span><span class="o">:</span><span class="ss">P231v</span><span class="w"> </span><span class="nv">?id</span><span class="w"> </span><span class="p">]</span><span class="w"> </span><span class="p">.</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>What this query does is ask for all things (let’s call whatever is behind the identifier is a “compound”; of course, it can
be mixtures, ill-defined chemicals, nanomaterials, etc) that have a CAS registry identifier. This query results in a nice
table of <a href="https://www.wikidata.org/">Wikidata</a> identifiers (e.g. <a href="https://www.wikidata.org/wiki/Q47512">Q47512</a> is acetic acid)
and matching CAS numbers, 16298 of them.</p>

<p>Because Wikidata is not specific to the English Wikipedia, CAS numbers from other origin will show up too. For example, the
CAS number for N-benzylacrylamide (<a href="https://www.wikidata.org/wiki/Q10334928">Q10334928</a>) is provided by the Portuguese Wikipedia:</p>

<p><img src="/assets/images/casPT.png" alt="" /></p>

<p>I used Peter Ertl’s <a href="http://www.cheminfo.org/wikipedia">cheminfo.org</a> (doi:<a href="https://doi.org/10.1186/s13321-015-0061-y">10.1186/s13321-015-0061-y</a>)
to confirm this compound indeed does not have an English page, which is somewhat surprising.</p>

<p>The SPARQL query uses a predicate specifically for the CAS registry number (<a href="https://www.wikidata.org/wiki/Property:P231">P231</a>).
Other identifiers have similar predicates, like for PubChem compound (<a href="https://www.wikidata.org/wiki/Property:P662">P662</a>) and
Chemspider (<a href="https://www.wikidata.org/wiki/Property:P661">P661</a>). That means, Wikidata can become a community crowdsource of
identifier mappings, which is one of the things Daniel Mietchen, me, and a few others proposed in this H2020 grant application
(doi:<a href="https://doi.org/10.5281/zenodo.13906">10.5281/zenodo.13906</a>). The SPARQL query is run by the
<a href="http://linkeddatafragments.org/">Linked Data Fragments</a> platform, which you should really check out too, using the
<a href="http://www.bioclipse.net/">Bioclipse</a> manager I wrote around that.</p>

<p>The full Bioclipse script looks like:</p>

<div class="language-groovy highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">wikidataldf</span> <span class="o">=</span> <span class="n">ldf</span><span class="o">.</span><span class="na">createStore</span><span class="o">(</span>
  <span class="s2">"http://data.wikidataldf.com/wikidata"</span>
<span class="o">)</span>

<span class="c1">// P231 CAS</span>
<span class="n">identifier</span> <span class="o">=</span> <span class="s2">"P231"</span>
<span class="n">type</span> <span class="o">=</span> <span class="s2">"cas"</span>

<span class="n">sparql</span> <span class="o">=</span> <span class="s2">"""
PREFIX wd:

SELECT ?compound ?id WHERE {
  ?compound wd:${identifier}s [ wd:${identifier}v ?id ] .
}
"""</span>
<span class="n">mappings</span> <span class="o">=</span> <span class="n">rdf</span><span class="o">.</span><span class="na">sparql</span><span class="o">(</span><span class="n">wikidataldf</span><span class="o">,</span> <span class="n">sparql</span><span class="o">)</span>

<span class="c1">// recreate an empty output file</span>
<span class="n">outFilename</span> <span class="o">=</span> <span class="s2">"/Wikidata/${type}2wikidata.csv"</span>
<span class="k">if</span> <span class="o">(</span><span class="n">ui</span><span class="o">.</span><span class="na">fileExists</span><span class="o">(</span><span class="n">outFilename</span><span class="o">))</span> <span class="o">{</span>
  <span class="n">ui</span><span class="o">.</span><span class="na">remove</span><span class="o">(</span><span class="n">outFilename</span><span class="o">)</span>
  <span class="n">ui</span><span class="o">.</span><span class="na">newFile</span><span class="o">(</span><span class="n">outFilename</span><span class="o">)</span>
<span class="o">}</span>

<span class="c1">// safe to a file</span>
<span class="k">for</span> <span class="o">(</span><span class="n">i</span><span class="o">=</span><span class="mi">1</span><span class="o">;</span> <span class="n">i</span><span class="o">&lt;=</span><span class="n">mappings</span><span class="o">.</span><span class="na">rowCount</span><span class="o">;</span> <span class="n">i</span><span class="o">++)</span> <span class="o">{</span>
  <span class="n">wdID</span> <span class="o">=</span> <span class="n">mappings</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">i</span><span class="o">,</span> <span class="s2">"compound"</span><span class="o">).</span><span class="na">substring</span><span class="o">(</span><span class="mi">3</span><span class="o">)</span>
  <span class="n">ui</span><span class="o">.</span><span class="na">append</span><span class="o">(</span>
    <span class="n">outFilename</span><span class="o">,</span>
    <span class="n">wdID</span> <span class="o">+</span> <span class="s2">","</span> <span class="o">+</span> <span class="n">mappings</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">i</span><span class="o">,</span> <span class="s2">"id"</span><span class="o">)</span> <span class="o">+</span> <span class="s2">"\n"</span>
  <span class="o">)</span>
<span class="o">}</span>
</code></pre></div></div>

<p>BTW, of course, all this depends on work by many others including the core <a href="http://tools.wmflabs.org/wikidata-exports/rdf/">RDF generation</a>
with the <a href="https://www.mediawiki.org/wiki/Wikidata_Toolkit">Wikidata Toolkit</a>. See also the paper by Erxleben <em>et al.</em>
(<a href="http://korrekt.org/papers/Wikidata-RDF-export-2014.pdf">PDF</a>).</p>]]></content><author><name>Egon Willighagen</name></author><category term="wikidata" /><category term="chemistry" /><category term="cas" /><category term="justdoi:10.1186/s13321-015-0061-y" /><category term="doi:10.5281/ZENODO.13906" /><category term="justdoi:10.1007/978-3-319-11964-9_4" /><category term="ldf" /><summary type="html"><![CDATA[I have promised my Twitter followers the SPARQL query you have all been waiting for. Sadly, you had to wait for it for more than two months. I’m sorry about that. But, here it is:]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://chem-bla-ics.linkedchemistry.info/assets/images/casPT.png" /><media:content medium="image" url="https://chem-bla-ics.linkedchemistry.info/assets/images/casPT.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>