{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "chem-bla-ics",
  "description": "Chemblaics (pronounced chem-bla-ics) is the science that uses open science and computers to solve problems in chemistry, biochemistry and related fields.",
  "home_page_url": "https://chem-bla-ics.linkedchemistry.info/",
  "feed_url": "https://chem-bla-ics.linkedchemistry.info/2009/05/07/me-is-having-bioclipsexmpprdf-fun.json",
  "icon": "https://chem-bla-ics.linkedchemistry.info/assets/images/chem-bla-ics_logo.png",
  "language": "en",
  "authors": [
    {
      "name": "Egon Willighagen",
      "url": "https://orcid.org/0000-0001-7542-0286",
      "_orcid": "0000-0001-7542-0286"
    }
  ],
  "items": [

    {
      "id": "https://doi.org/10.59350/cprj5-xnk74",
      "url": "https://chem-bla-ics.linkedchemistry.info/2009/05/07/me-is-having-bioclipsexmpprdf-fun.html",
      "title": "/me is having Bioclipse/XMPP/RDF fun",
      "content_html": "<p>Johannes asked me what the <a href=\"http://en.wikipedia.org/wiki/Lipinski%27s_Rule_of_Five\">Lipinski Rule of Five</a> for\n<a href=\"http://en.wikipedia.org/wiki/Farnesol\">farnesol</a> is, in reply to the <a href=\"http://pele.farmbio.uu.se/xmpp-services/index.php/Services\">matching XMPP cloud service</a>.\nThanx to <a href=\"http://dbpedia.org/\">DBPedia</a> for providing a machine readable form of the wikipedia entry:</p>\n\n<p>Here’s the solution (yes, suboptimal, but since we were hacking on XMPP support in\n<a href=\"http://www.bioclipse.net/\">Bioclipse</a>) which shows the structure in JChemPaint and <a href=\"http://www.jmol.org/\">Jmol</a>\nas bonus (gist:<a href=\"http://gist.github.com/107507\">107507</a>):</p>\n\n<div class=\"language-javascript highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"c1\">// Today, Johannes challenged me to use Bioclipse and XMPP to calculate the Lipinski Rule of Five for</span>\n<span class=\"c1\">// http://en.wikipedia.org/wiki/Farnesol</span>\n<span class=\"nx\">query</span> <span class=\"o\">=</span> <span class=\"dl\">\"</span><span class=\"s2\">Farnesol</span><span class=\"dl\">\"</span>\n\n<span class=\"c1\">// Zero: clear the console</span>\n<span class=\"nx\">js</span><span class=\"p\">.</span><span class=\"nf\">clear</span><span class=\"p\">();</span>\n<span class=\"nx\">js</span><span class=\"p\">.</span><span class=\"nf\">print</span><span class=\"p\">(</span><span class=\"dl\">\"</span><span class=\"s2\">Query: </span><span class=\"dl\">\"</span> <span class=\"o\">+</span> <span class=\"nx\">query</span> <span class=\"o\">+</span> <span class=\"dl\">\"</span><span class=\"se\">\\n</span><span class=\"dl\">\"</span><span class=\"p\">);</span>\n\n<span class=\"c1\">// One: connect to the XMPP hive, and make contact with the CDK descriptor service here in Uppsala</span>\n<span class=\"nx\">xmpp</span><span class=\"p\">.</span><span class=\"nf\">connect</span><span class=\"p\">();</span>\n<span class=\"kd\">var</span> <span class=\"nx\">service</span> <span class=\"o\">=</span> <span class=\"nx\">xmpp</span><span class=\"p\">.</span><span class=\"nf\">getService</span><span class=\"p\">(</span><span class=\"dl\">\"</span><span class=\"s2\">descriptor.ws1.bmc.uu.se</span><span class=\"dl\">\"</span><span class=\"p\">);</span>\n<span class=\"nx\">service</span><span class=\"p\">.</span><span class=\"nf\">discoverSync</span><span class=\"p\">(</span><span class=\"mi\">5000</span><span class=\"p\">);</span>\n<span class=\"nx\">service</span><span class=\"p\">.</span><span class=\"nf\">getFunctions</span><span class=\"p\">();</span>\n<span class=\"kd\">var</span> <span class=\"nx\">func</span> <span class=\"o\">=</span> <span class=\"nx\">service</span><span class=\"p\">.</span><span class=\"nf\">getFunction</span><span class=\"p\">(</span><span class=\"dl\">\"</span><span class=\"s2\">LipinskiRuleOfFive</span><span class=\"dl\">\"</span><span class=\"p\">);</span>\n\n<span class=\"c1\">// Two: take advantage of RDF, DBPedia</span>\n<span class=\"nx\">store</span> <span class=\"o\">=</span> <span class=\"nx\">rdf</span><span class=\"p\">.</span><span class=\"nf\">createStore</span><span class=\"p\">()</span>\n<span class=\"nx\">rdf</span><span class=\"p\">.</span><span class=\"nf\">importURL</span><span class=\"p\">(</span><span class=\"nx\">store</span><span class=\"p\">,</span> <span class=\"dl\">\"</span><span class=\"s2\">http://dbpedia.org/data/</span><span class=\"dl\">\"</span> <span class=\"o\">+</span> <span class=\"nx\">query</span> <span class=\"o\">+</span> <span class=\"dl\">\"</span><span class=\"s2\">.rdf</span><span class=\"dl\">\"</span><span class=\"p\">)</span>\n<span class=\"nx\">rdf</span><span class=\"p\">.</span><span class=\"nf\">importURL</span><span class=\"p\">(</span><span class=\"nx\">store</span><span class=\"p\">,</span> <span class=\"dl\">\"</span><span class=\"s2\">http://dbpedia.org/data/</span><span class=\"dl\">\"</span> <span class=\"o\">+</span> <span class=\"nx\">query</span> <span class=\"o\">+</span> <span class=\"dl\">\"</span><span class=\"s2\">/section1/Chembox_Identifiers.rdf</span><span class=\"dl\">\"</span><span class=\"p\">)</span>\n\n<span class=\"c1\">// Three: run the SPARQL query and extract the SMILES from the List&lt;List&lt;String&gt;&gt;, and remove</span>\n<span class=\"c1\">// the '@en' suffix</span>\n<span class=\"kd\">var</span> <span class=\"nx\">sparql</span> <span class=\"o\">=</span> <span class=\"dl\">\"</span><span class=\"s2\">PREFIX dbprop: &lt;http://dbpedia.org/property/&gt; SELECT ?o WHERE { ?s dbprop:smiles ?o }</span><span class=\"dl\">\"</span>\n<span class=\"nx\">smiles</span> <span class=\"o\">=</span> <span class=\"nx\">rdf</span><span class=\"p\">.</span><span class=\"nf\">sparql</span><span class=\"p\">(</span><span class=\"nx\">store</span><span class=\"p\">,</span> <span class=\"nx\">sparql</span><span class=\"p\">).</span><span class=\"nf\">get</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">).</span><span class=\"nf\">get</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n<span class=\"nx\">smiles</span> <span class=\"o\">=</span> <span class=\"nx\">smiles</span><span class=\"p\">.</span><span class=\"nf\">substring</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"nx\">smiles</span><span class=\"p\">.</span><span class=\"nf\">length</span><span class=\"p\">()</span><span class=\"o\">-</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n\n<span class=\"c1\">// Four: create a CML document</span>\n<span class=\"nx\">propane</span> <span class=\"o\">=</span> <span class=\"nx\">cdk</span><span class=\"p\">.</span><span class=\"nf\">fromSMILES</span><span class=\"p\">(</span><span class=\"nx\">smiles</span><span class=\"p\">);</span>\n<span class=\"nx\">js</span><span class=\"p\">.</span><span class=\"nf\">print</span><span class=\"p\">(</span><span class=\"dl\">\"</span><span class=\"s2\">Molecule SMILES: </span><span class=\"dl\">\"</span> <span class=\"o\">+</span> <span class=\"nx\">smiles</span> <span class=\"o\">+</span> <span class=\"dl\">\"</span><span class=\"se\">\\n</span><span class=\"dl\">\"</span><span class=\"p\">);</span>\n\n<span class=\"c1\">// Five: call the function</span>\n<span class=\"nx\">result</span> <span class=\"o\">=</span> <span class=\"nx\">func</span><span class=\"p\">.</span><span class=\"nf\">invokeSync</span><span class=\"p\">(</span><span class=\"nx\">propane</span><span class=\"p\">.</span><span class=\"nf\">getCML</span><span class=\"p\">(),</span> <span class=\"mi\">900000</span><span class=\"p\">);</span>\n<span class=\"nx\">cmlReturned</span> <span class=\"o\">=</span> <span class=\"nx\">xmpp</span><span class=\"p\">.</span><span class=\"nf\">toString</span><span class=\"p\">(</span><span class=\"nx\">result</span><span class=\"p\">);</span>\n\n<span class=\"c1\">// Six: tune the CML so that the Bioclipse CML reader is happy</span>\n<span class=\"nx\">cmlReturned</span> <span class=\"o\">=</span> <span class=\"nx\">cmlReturned</span><span class=\"p\">.</span><span class=\"nf\">replace</span><span class=\"p\">(</span><span class=\"dl\">\"</span><span class=\"s2\">xsd:int</span><span class=\"dl\">\"</span><span class=\"p\">,</span> <span class=\"dl\">\"</span><span class=\"s2\">xsd:integer</span><span class=\"dl\">\"</span><span class=\"p\">)</span>\n\n<span class=\"c1\">// Seven: extract the Lipinski Rule of Five score</span>\n<span class=\"nx\">propertyList</span> <span class=\"o\">=</span> <span class=\"nx\">cml</span><span class=\"p\">.</span><span class=\"nf\">fromString</span><span class=\"p\">(</span><span class=\"nx\">cmlReturned</span><span class=\"p\">);</span>\n<span class=\"nx\">value</span> <span class=\"o\">=</span> <span class=\"nx\">propertyList</span><span class=\"p\">.</span><span class=\"nf\">getPropertyElements</span><span class=\"p\">().</span><span class=\"nf\">get</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">).</span>\n  <span class=\"nf\">getScalarElements</span><span class=\"p\">().</span><span class=\"nf\">get</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">).</span><span class=\"nf\">getValue</span><span class=\"p\">()</span>\n<span class=\"nx\">js</span><span class=\"p\">.</span><span class=\"nf\">print</span><span class=\"p\">(</span><span class=\"dl\">\"</span><span class=\"s2\">Lipinski Rule of Five: </span><span class=\"dl\">\"</span> <span class=\"o\">+</span> <span class=\"nx\">value</span> <span class=\"o\">+</span> <span class=\"dl\">\"</span><span class=\"se\">\\n</span><span class=\"dl\">\"</span><span class=\"p\">)</span>\n\n<span class=\"c1\">// Eight: while at it, let's create a 2D and open in JChemPaint</span>\n<span class=\"nx\">service</span> <span class=\"o\">=</span> <span class=\"nx\">xmpp</span><span class=\"p\">.</span><span class=\"nf\">getService</span><span class=\"p\">(</span><span class=\"dl\">\"</span><span class=\"s2\">cdk.ws1.bmc.uu.se</span><span class=\"dl\">\"</span><span class=\"p\">);</span>\n<span class=\"nx\">service</span><span class=\"p\">.</span><span class=\"nf\">discoverSync</span><span class=\"p\">(</span><span class=\"mi\">5000</span><span class=\"p\">);</span>\n<span class=\"nx\">service</span><span class=\"p\">.</span><span class=\"nf\">getFunctions</span><span class=\"p\">();</span>\n<span class=\"nx\">func</span> <span class=\"o\">=</span> <span class=\"nx\">service</span><span class=\"p\">.</span><span class=\"nf\">getFunction</span><span class=\"p\">(</span><span class=\"dl\">\"</span><span class=\"s2\">generate2Dcoordinates</span><span class=\"dl\">\"</span><span class=\"p\">);</span>\n<span class=\"nx\">mol</span> <span class=\"o\">=</span> <span class=\"nx\">cdk</span><span class=\"p\">.</span><span class=\"nf\">fromSMILES</span><span class=\"p\">(</span><span class=\"nx\">smiles</span><span class=\"p\">)</span>\n<span class=\"nx\">result</span> <span class=\"o\">=</span> <span class=\"nx\">func</span><span class=\"p\">.</span><span class=\"nf\">invokeSync</span><span class=\"p\">(</span><span class=\"nx\">mol</span><span class=\"p\">.</span><span class=\"nf\">getCML</span><span class=\"p\">(),</span> <span class=\"mi\">900000</span><span class=\"p\">);</span>\n<span class=\"nx\">cmlReturned</span> <span class=\"o\">=</span> <span class=\"nx\">xmpp</span><span class=\"p\">.</span><span class=\"nf\">toString</span><span class=\"p\">(</span><span class=\"nx\">result</span><span class=\"p\">);</span>\n<span class=\"nx\">mol2d</span> <span class=\"o\">=</span> <span class=\"nx\">cdk</span><span class=\"p\">.</span><span class=\"nf\">fromCml</span><span class=\"p\">(</span><span class=\"nx\">cmlReturned</span><span class=\"p\">);</span>\n<span class=\"nx\">ui</span><span class=\"p\">.</span><span class=\"nf\">open</span><span class=\"p\">(</span><span class=\"nx\">mol2d</span><span class=\"p\">)</span>\n\n<span class=\"c1\">// Nine: oh, and a 3D model in Jmol</span>\n<span class=\"nx\">func</span> <span class=\"o\">=</span> <span class=\"nx\">service</span><span class=\"p\">.</span><span class=\"nf\">getFunction</span><span class=\"p\">(</span><span class=\"dl\">\"</span><span class=\"s2\">addExplicitHydrogens</span><span class=\"dl\">\"</span><span class=\"p\">);</span>\n<span class=\"nx\">result</span> <span class=\"o\">=</span> <span class=\"nx\">func</span><span class=\"p\">.</span><span class=\"nf\">invokeSync</span><span class=\"p\">(</span><span class=\"nx\">mol</span><span class=\"p\">.</span><span class=\"nf\">getCML</span><span class=\"p\">(),</span> <span class=\"mi\">900000</span><span class=\"p\">);</span>\n<span class=\"nx\">mol</span> <span class=\"o\">=</span> <span class=\"nx\">cdk</span><span class=\"p\">.</span><span class=\"nf\">fromCml</span><span class=\"p\">(</span><span class=\"nx\">xmpp</span><span class=\"p\">.</span><span class=\"nf\">toString</span><span class=\"p\">(</span><span class=\"nx\">result</span><span class=\"p\">));</span>\n<span class=\"nx\">func</span> <span class=\"o\">=</span> <span class=\"nx\">service</span><span class=\"p\">.</span><span class=\"nf\">getFunction</span><span class=\"p\">(</span><span class=\"dl\">\"</span><span class=\"s2\">generate3Dcoordinates</span><span class=\"dl\">\"</span><span class=\"p\">);</span>\n<span class=\"nx\">result</span> <span class=\"o\">=</span> <span class=\"nx\">func</span><span class=\"p\">.</span><span class=\"nf\">invokeSync</span><span class=\"p\">(</span><span class=\"nx\">mol</span><span class=\"p\">.</span><span class=\"nf\">getCML</span><span class=\"p\">(),</span> <span class=\"mi\">900000</span><span class=\"p\">);</span>\n<span class=\"nx\">mol3d</span> <span class=\"o\">=</span> <span class=\"nx\">cdk</span><span class=\"p\">.</span><span class=\"nf\">fromCml</span><span class=\"p\">(</span><span class=\"nx\">xmpp</span><span class=\"p\">.</span><span class=\"nf\">toString</span><span class=\"p\">(</span><span class=\"nx\">result</span><span class=\"p\">));</span>\n<span class=\"nx\">file</span> <span class=\"o\">=</span> <span class=\"dl\">\"</span><span class=\"s2\">/Virtual/foo.cml</span><span class=\"dl\">\"</span><span class=\"p\">;</span>\n<span class=\"nx\">ui</span><span class=\"p\">.</span><span class=\"nf\">remove</span><span class=\"p\">(</span><span class=\"nx\">file</span><span class=\"p\">)</span>\n<span class=\"nx\">cdk</span><span class=\"p\">.</span><span class=\"nf\">saveCML</span><span class=\"p\">(</span><span class=\"nx\">mol3d</span><span class=\"p\">,</span> <span class=\"nx\">file</span><span class=\"p\">);</span>\n<span class=\"nx\">ui</span><span class=\"p\">.</span><span class=\"nf\">open</span><span class=\"p\">(</span><span class=\"nx\">file</span><span class=\"p\">)</span>\n</code></pre></div></div>",
      "summary": "Johannes asked me what the Lipinski Rule of Five for farnesol is, in reply to the matching XMPP cloud service. Thanx to DBPedia for providing a machine readable form of the wikipedia entry:",
      
      "date_published": "2009-05-07T00:00:00+00:00",
      "date_modified": "2009-05-07T00:00:00+00:00",
      "tags": ["bioclipse","rdf","xmpp"],
      
      
      
      
      
      
        "authors": [ { "name": "Egon Willighagen", "url": "https://orcid.org/0000-0001-7542-0286" } ]
      
    }

  ]
}
