{
  "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/2013/10/30/programming-in-life-sciences-11-html.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/tqs3s-x7289",
      "url": "https://chem-bla-ics.linkedchemistry.info/2013/10/30/programming-in-life-sciences-11-html.html",
      "title": "Programming in the Life Sciences #11: HTML",
      "content_html": "<p><a href=\"https://en.wikipedia.org/wiki/HTML\">HTML</a> (HyperText Markup Language), the language of the web,\nis no longer the only language of the web. But it still is the primary language in which source\ncode of webpages is shared. Originally, HTML pages were always static: the only HTML source of a\nweb page was that was downloaded from a website. Nowadays, much HTML the is visualized in your\nweb browser, is generated on the fly with JavaScript. In fact, that is exactly what you will\nlearn to do in this course.</p>\n\n<p>HTML has many dialects, and HTML5 is the upcoming next version. The features have become so\nextensive that we will not have capture half of them; instead, we will stick to the bare\nminimum needed. But even at an minimum, writing a web page with HTML code is basically writing\nsource code. The compiled version is the view of the webpage your web browser shows you. One\nimportant difference is that HTML is much more like a data model representation than it is like\ncomputational instructions. That is, rather than saying things like <code class=\"language-plaintext highlighter-rouge\">put(\"String\", xCoord, yCoord)</code>,\nwe define what is to be shown in in what order with general instructions. Well, in pure HTML\nthat is. <a href=\"https://en.wikipedia.org/wiki/CSS\">Cascading Style Sheets</a> (CSS) is quite outside the\nscope of this course.</p>\n\n<p>A minimal HTML page looks like:</p>\n\n<div class=\"language-html highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"nt\">&lt;html&gt;</span>\n  <span class=\"nt\">&lt;head&gt;</span>\n  <span class=\"nt\">&lt;/head&gt;</span>\n  <span class=\"nt\">&lt;body&gt;</span>\n  Hello world!\n  <span class=\"nt\">&lt;/body&gt;</span>\n<span class=\"nt\">&lt;/html&gt;</span>\n</code></pre></div></div>\n\n<p>When we think about this structure, we notice that it is not unlike the key-value maps we\ncovered earlier. For example, compare it to this\n<a href=\"http://chem-bla-ics.blogspot.nl/2013/10/programming-in-life-sciences-10.html\">JSON</a>:</p>\n\n<div class=\"language-json highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"p\">{</span><span class=\"w\">\n  </span><span class=\"nl\">\"html\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\">\n    </span><span class=\"nl\">\"head\"</span><span class=\"p\">:{},</span><span class=\"w\">\n    </span><span class=\"nl\">\"body\"</span><span class=\"p\">:{</span><span class=\"err\">value:</span><span class=\"s2\">\"Hello world!\"</span><span class=\"p\">}</span><span class=\"w\">\n  </span><span class=\"p\">}</span><span class=\"w\">\n</span><span class=\"p\">}</span><span class=\"w\">\n</span></code></pre></div></div>\n\n<p>Even if we introduce HTML attributes:</p>\n\n<div class=\"language-html highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"nt\">&lt;html&gt;</span>\n  <span class=\"nt\">&lt;head&gt;</span>\n  <span class=\"nt\">&lt;/head&gt;</span>\n  <span class=\"nt\">&lt;body&gt;</span>\n  <span class=\"nt\">&lt;h1&gt;&lt;a</span> <span class=\"na\">name=</span><span class=\"s\">\"hello\"</span><span class=\"nt\">&gt;</span>Hello world!<span class=\"nt\">&lt;/a&gt;&lt;/h1&gt;</span>\n  <span class=\"nt\">&lt;/body&gt;</span>\n<span class=\"nt\">&lt;/html&gt;</span>\n</code></pre></div></div>\n\n<p>The JSON equivalent would be:</p>\n\n<div class=\"language-json highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"p\">{</span><span class=\"w\">\n  </span><span class=\"nl\">\"html\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\">\n    </span><span class=\"nl\">\"head\"</span><span class=\"p\">:{},</span><span class=\"w\">\n    </span><span class=\"nl\">\"body\"</span><span class=\"p\">:{</span><span class=\"w\">\n      </span><span class=\"nl\">\"h1\"</span><span class=\"p\">:{</span><span class=\"w\">\n        </span><span class=\"nl\">\"a\"</span><span class=\"p\">:{</span><span class=\"w\">\n          </span><span class=\"err\">attributes:</span><span class=\"p\">{</span><span class=\"nl\">\"name\"</span><span class=\"p\">:</span><span class=\"s2\">\"hello\"</span><span class=\"p\">},</span><span class=\"w\">\n          </span><span class=\"err\">value:</span><span class=\"s2\">\"Hello world!\"</span><span class=\"w\">\n        </span><span class=\"p\">}</span><span class=\"w\">\n      </span><span class=\"p\">}</span><span class=\"w\">\n    </span><span class=\"p\">}</span><span class=\"w\">\n  </span><span class=\"p\">}</span><span class=\"w\">\n</span><span class=\"p\">}</span><span class=\"w\">\n</span></code></pre></div></div>\n\n<p>So, while these are quite different languages than programming languages, we can clearly\nsee they have been made up by the same (computer science) people. But in my opinion, this\nis an advantage: because we only need to learn the underlying patterns and can then much\nmore easily switch between different language.</p>\n\n<p>Now, returning to the HTML example, we introduce a bit of terminology. Let’s start with\nthe last example:</p>\n\n<div class=\"language-html highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"nt\">&lt;h1&gt;&lt;a</span> <span class=\"na\">name=</span><span class=\"s\">\"hello\"</span><span class=\"nt\">&gt;</span>Hello world!<span class=\"nt\">&lt;/a&gt;&lt;/h1&gt;</span>\n</code></pre></div></div>\n\n<p>This HTML code example shows the <code class=\"language-plaintext highlighter-rouge\">&lt;h1&gt;</code> <strong>element</strong> which has one <strong>child element</strong>\n<code class=\"language-plaintext highlighter-rouge\">&lt;a&gt;</code>. This child element has an <strong>attribute</strong> <code class=\"language-plaintext highlighter-rouge\">@name</code>. Elements can contain string content,\nsuch as the <code class=\"language-plaintext highlighter-rouge\">&lt;a&gt;</code> element has, and one or more child elements (and any combination of that).\nAttributes can only have string content. The HTML specification defines in detail which\nelements can be child elements of other elements. For example, the <code class=\"language-plaintext highlighter-rouge\">&lt;head&gt;</code> element can\nonly be a child element of <code class=\"language-plaintext highlighter-rouge\">&lt;html&gt;</code>. Similarly, each HTML element can only have specific\nattributes, though some attributes can be attached to any element.</p>\n\n<p>There is plenty of documentation on the web, but there are also tools that can help us write\nHTML. For example, the <a href=\"http://validator.w3.org/\">http://validator.w3.org/</a>. This website\ndetects errors in your HTML code, and is quite helpful if you are new to editing HTML, as\nwell as useful if you have a lot of HTML experience.</p>\n\n<p>HTML elements you may find useful include the following:</p>\n\n<ul>\n  <li><code class=\"language-plaintext highlighter-rouge\">&lt;h1&gt;</code>, <code class=\"language-plaintext highlighter-rouge\">&lt;h2&gt;</code>, …, <code class=\"language-plaintext highlighter-rouge\">&lt;h5&gt;</code>: these are header and can be used to make sections</li>\n  <li><code class=\"language-plaintext highlighter-rouge\">&lt;p&gt;</code>: indicates a paragraph</li>\n  <li><code class=\"language-plaintext highlighter-rouge\">&lt;div id=\"someID\"&gt;</code>: indicates a section of text. The content of any element with an id attribute can be replaced by any appropriate HTML content with JavaScript</li>\n  <li><code class=\"language-plaintext highlighter-rouge\">&lt;a href=\"http://...\"&gt;some link&lt;/a&gt;</code>: this is used to make hyperlinks, href means hyperlink reference</li>\n  <li><code class=\"language-plaintext highlighter-rouge\">&lt;a name=\"mark1\"&gt;some text&lt;/a&gt;</code>: this is used to create bookmarks. with <code class=\"language-plaintext highlighter-rouge\">&lt;a href=\"#mark1\"&gt;jump to section Mark 1&lt;/a&gt;</code></li>\n  <li><code class=\"language-plaintext highlighter-rouge\">&lt;script&gt;</code>: used to include JavaScript code in your HTML page</li>\n  <li><code class=\"language-plaintext highlighter-rouge\">&lt;head&gt;</code>: this HTML blob contains metadata, a list of libraries to be loaded, but also JavaScript which is executed before the HTML <code class=\"language-plaintext highlighter-rouge\">&lt;body&gt;</code> is processed</li>\n  <li><code class=\"language-plaintext highlighter-rouge\">&lt;body&gt;</code>: this contains the HTML that is depicted in your browser window</li>\n</ul>\n\n<p>Keep the HTML simple; the programming is more important.</p>\n\n<p><strong>Exercise</strong>: below is part of the HTML/JavaScript <a href=\"https://github.com/egonw/mscpils/blob/master/example1.html\">source code</a>\nbehind <a href=\"http://chem-bla-ics.blogspot.nl/2013/10/programming-in-life-sciences-5.html\">this app</a>.\nPlease indicate which lines are HTML source code, and what is JavaScript.</p>\n\n<div class=\"language-html highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"cp\">&lt;!DOCTYPE HTML PUBLIC\n  \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n  \"http://www.w3.org/TR/html4/loose.dtd\"&gt;</span>\n<span class=\"nt\">&lt;html&gt;</span>\n<span class=\"c\">&lt;!--\n\nCopyright (c) 2013  Egon Willighagen &lt;egon.willighagen@maastrichtuniversity.nl&gt;\n\n Permission is hereby granted, free of charge, to any person\n obtaining a copy of this software and associated documentation\n files (the \"Software\"), to deal in the Software without\n restriction, including without limitation the rights to use,\n copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the\n Software is furnished to do so, subject to the following\n conditions:\n\n The above copyright notice and this permission notice shall be\n included in all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n OTHER DEALINGS IN THE SOFTWARE.\n\n--&gt;</span>\n<span class=\"nt\">&lt;head&gt;</span>\n  <span class=\"nt\">&lt;title&gt;</span>OpenPHACTS Jasmine Spec Runner<span class=\"nt\">&lt;/title&gt;</span>\n  <span class=\"nt\">&lt;script </span><span class=\"na\">src=</span><span class=\"s\">\"lib/jquery-1.9.1.min.js\"</span><span class=\"nt\">&gt;&lt;/script&gt;</span>\n  <span class=\"nt\">&lt;script </span><span class=\"na\">type=</span><span class=\"s\">\"text/javascript\"</span> <span class=\"na\">src=</span><span class=\"s\">\"lib/purl.js\"</span><span class=\"nt\">&gt;&lt;/script&gt;</span>\n\n  <span class=\"c\">&lt;!-- include source files here... --&gt;</span>\n  <span class=\"nt\">&lt;script </span><span class=\"na\">type=</span><span class=\"s\">\"text/javascript\"</span> <span class=\"na\">src=</span><span class=\"s\">\"src/OPS.js\"</span><span class=\"nt\">&gt;&lt;/script&gt;</span>\n  <span class=\"nt\">&lt;script </span><span class=\"na\">type=</span><span class=\"s\">\"text/javascript\"</span> <span class=\"na\">src=</span><span class=\"s\">\"src/ConceptWikiSearch.js\"</span><span class=\"nt\">&gt;&lt;/script&gt;</span>\n\n  <span class=\"c\">&lt;!-- setup --&gt;</span>\n  <span class=\"nt\">&lt;script </span><span class=\"na\">type=</span><span class=\"s\">\"text/javascript\"</span><span class=\"nt\">&gt;</span>\n  <span class=\"c1\">// get the app_key and app_id from the webpage call --&gt;</span>\n<span class=\"kd\">var</span> <span class=\"nx\">prmstr</span> <span class=\"o\">=</span> <span class=\"nb\">window</span><span class=\"p\">.</span><span class=\"nx\">location</span><span class=\"p\">.</span><span class=\"nx\">search</span><span class=\"p\">.</span><span class=\"nf\">substr</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">);</span>\n<span class=\"kd\">var</span> <span class=\"nx\">prmarr</span> <span class=\"o\">=</span> <span class=\"nx\">prmstr</span><span class=\"p\">.</span><span class=\"nf\">split </span><span class=\"p\">(</span><span class=\"dl\">\"</span><span class=\"s2\">&amp;</span><span class=\"dl\">\"</span><span class=\"p\">);</span>\n<span class=\"kd\">var</span> <span class=\"nx\">params</span> <span class=\"o\">=</span> <span class=\"p\">{};</span>\n<span class=\"k\">for</span> <span class=\"p\">(</span> <span class=\"kd\">var</span> <span class=\"nx\">i</span> <span class=\"o\">=</span> <span class=\"mi\">0</span><span class=\"p\">;</span> <span class=\"nx\">i</span> <span class=\"o\">&lt;</span> <span class=\"nx\">prmarr</span><span class=\"p\">.</span><span class=\"nx\">length</span><span class=\"p\">;</span> <span class=\"nx\">i</span><span class=\"o\">++</span><span class=\"p\">)</span> <span class=\"p\">{</span>\n    <span class=\"kd\">var</span> <span class=\"nx\">tmparr</span> <span class=\"o\">=</span> <span class=\"nx\">prmarr</span><span class=\"p\">[</span><span class=\"nx\">i</span><span class=\"p\">].</span><span class=\"nf\">split</span><span class=\"p\">(</span><span class=\"dl\">\"</span><span class=\"s2\">=</span><span class=\"dl\">\"</span><span class=\"p\">);</span>\n    <span class=\"nx\">params</span><span class=\"p\">[</span><span class=\"nx\">tmparr</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]]</span> <span class=\"o\">=</span> <span class=\"nx\">tmparr</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">];</span>\n<span class=\"p\">}</span>\n  <span class=\"nt\">&lt;/script&gt;</span>\n<span class=\"nt\">&lt;/head&gt;</span>\n\n<span class=\"nt\">&lt;body&gt;</span>\n  <span class=\"nt\">&lt;h3&gt;</span>Output<span class=\"nt\">&lt;/h3&gt;</span>\n  <span class=\"nt\">&lt;h3&gt;</span>Search Results<span class=\"nt\">&lt;/h3&gt;</span>\n  <span class=\"nt\">&lt;p&gt;&lt;div</span> <span class=\"na\">id=</span><span class=\"s\">\"table\"</span><span class=\"nt\">&gt;&lt;/div&gt;&lt;/p&gt;</span>\n  <span class=\"nt\">&lt;h3&gt;</span>Compound Details<span class=\"nt\">&lt;/h3&gt;</span>\n  <span class=\"nt\">&lt;p&gt;&lt;div</span> <span class=\"na\">id=</span><span class=\"s\">\"details\"</span><span class=\"nt\">&gt;&lt;/div&gt;&lt;/p&gt;</span>\n  <span class=\"nt\">&lt;h3&gt;</span>JSON reply<span class=\"nt\">&lt;/h3&gt;</span>\n  <span class=\"nt\">&lt;p&gt;&lt;div</span> <span class=\"na\">id=</span><span class=\"s\">\"json\"</span><span class=\"nt\">&gt;</span>Nothing yet<span class=\"nt\">&lt;/div&gt;&lt;/p&gt;</span>\n  <span class=\"nt\">&lt;script </span><span class=\"na\">type=</span><span class=\"s\">\"text/javascript\"</span><span class=\"nt\">&gt;</span>\n<span class=\"kd\">var</span> <span class=\"nx\">searcher</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"nx\">Openphacts</span><span class=\"p\">.</span><span class=\"nc\">ConceptWikiSearch</span><span class=\"p\">(</span>\n  <span class=\"dl\">\"</span><span class=\"s2\">https://beta.openphacts.org</span><span class=\"dl\">\"</span><span class=\"p\">,</span>\n  <span class=\"nx\">params</span><span class=\"p\">[</span><span class=\"dl\">\"</span><span class=\"s2\">app_id</span><span class=\"dl\">\"</span><span class=\"p\">],</span> <span class=\"nx\">params</span><span class=\"p\">[</span><span class=\"dl\">\"</span><span class=\"s2\">app_key</span><span class=\"dl\">\"</span><span class=\"p\">]</span>\n<span class=\"p\">);</span>\n<span class=\"kd\">var</span> <span class=\"nx\">callback</span> <span class=\"o\">=</span> <span class=\"kd\">function</span><span class=\"p\">(</span><span class=\"nx\">success</span><span class=\"p\">,</span> <span class=\"nx\">status</span><span class=\"p\">,</span> <span class=\"nx\">response</span><span class=\"p\">){</span>\n  <span class=\"nb\">document</span><span class=\"p\">.</span><span class=\"nf\">getElementById</span><span class=\"p\">(</span><span class=\"dl\">\"</span><span class=\"s2\">json</span><span class=\"dl\">\"</span><span class=\"p\">).</span><span class=\"nx\">innerHTML</span> <span class=\"o\">=</span> <span class=\"nx\">JSON</span><span class=\"p\">.</span><span class=\"nf\">stringify</span><span class=\"p\">(</span><span class=\"nx\">response</span><span class=\"p\">);</span>\n  <span class=\"nx\">html</span> <span class=\"o\">=</span> <span class=\"dl\">\"</span><span class=\"s2\">&lt;table&gt;</span><span class=\"dl\">\"</span><span class=\"p\">;</span>\n  <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"kd\">var</span> <span class=\"nx\">i</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">;</span> <span class=\"nx\">i</span><span class=\"o\">&lt;</span><span class=\"nx\">response</span><span class=\"p\">.</span><span class=\"nx\">length</span><span class=\"p\">;</span> <span class=\"nx\">i</span><span class=\"o\">++</span><span class=\"p\">)</span> <span class=\"p\">{</span>\n    <span class=\"nx\">html</span> <span class=\"o\">+=</span> <span class=\"dl\">\"</span><span class=\"s2\">&lt;tr&gt;</span><span class=\"dl\">\"</span><span class=\"p\">;</span>\n    <span class=\"nx\">html</span> <span class=\"o\">+=</span> <span class=\"dl\">\"</span><span class=\"s2\">&lt;td&gt;</span><span class=\"dl\">\"</span><span class=\"p\">;</span>\n    <span class=\"nx\">html</span> <span class=\"o\">+=</span> <span class=\"dl\">\"</span><span class=\"s2\">Name: &lt;span&gt;</span><span class=\"dl\">\"</span> <span class=\"o\">+</span>\n      <span class=\"nx\">response</span><span class=\"p\">[</span><span class=\"nx\">i</span><span class=\"p\">].</span><span class=\"nx\">prefLabel</span> <span class=\"o\">+</span>\n      <span class=\"dl\">\"</span><span class=\"s2\">&lt;/span&gt;</span><span class=\"dl\">\"</span><span class=\"p\">;</span>\n    <span class=\"nx\">html</span> <span class=\"o\">+=</span> <span class=\"dl\">\"</span><span class=\"s2\">&lt;/td&gt;</span><span class=\"dl\">\"</span><span class=\"p\">;</span>\n    <span class=\"nx\">html</span> <span class=\"o\">+=</span> <span class=\"dl\">\"</span><span class=\"s2\">&lt;/tr&gt;</span><span class=\"dl\">\"</span><span class=\"p\">;</span>\n  <span class=\"p\">}</span>\n  <span class=\"nx\">html</span> <span class=\"o\">+=</span> <span class=\"dl\">\"</span><span class=\"s2\">&lt;/table&gt;</span><span class=\"dl\">\"</span><span class=\"p\">;</span>\n  <span class=\"nb\">document</span><span class=\"p\">.</span><span class=\"nf\">getElementById</span><span class=\"p\">(</span><span class=\"dl\">\"</span><span class=\"s2\">table</span><span class=\"dl\">\"</span><span class=\"p\">).</span><span class=\"nx\">innerHTML</span> <span class=\"o\">=</span> <span class=\"nx\">html</span><span class=\"p\">;</span>\n<span class=\"p\">};</span>\n<span class=\"nx\">searcher</span><span class=\"p\">.</span><span class=\"nf\">byTag</span><span class=\"p\">(</span>\n  <span class=\"dl\">'</span><span class=\"s1\">Aspirin</span><span class=\"dl\">'</span><span class=\"p\">,</span> <span class=\"dl\">'</span><span class=\"s1\">5</span><span class=\"dl\">'</span><span class=\"p\">,</span> <span class=\"dl\">'</span><span class=\"s1\">4</span><span class=\"dl\">'</span><span class=\"p\">,</span>\n  <span class=\"dl\">'</span><span class=\"s1\">07a84994-e464-4bbf-812a-a4b96fa3d197</span><span class=\"dl\">'</span><span class=\"p\">,</span>\n  <span class=\"nx\">callback</span>\n<span class=\"p\">);</span>\n  <span class=\"nt\">&lt;/script&gt;</span>\n<span class=\"nt\">&lt;/body&gt;</span>\n<span class=\"nt\">&lt;/html&gt;</span>\n</code></pre></div></div>",
      "summary": "HTML (HyperText Markup Language), the language of the web, is no longer the only language of the web. But it still is the primary language in which source code of webpages is shared. Originally, HTML pages were always static: the only HTML source of a web page was that was downloaded from a website. Nowadays, much HTML the is visualized in your web browser, is generated on the fly with JavaScript. In fact, that is exactly what you will learn to do in this course.",
      
      "date_published": "2013-10-30T00:20:00+00:00",
      "date_modified": "2025-02-15T00:00:00+00:00",
      "tags": ["pra3006","html"],
      
      
      
      
      
      
        "authors": [ { "name": "Egon Willighagen", "url": "https://orcid.org/0000-0001-7542-0286" } ]
      
    }

  ]
}
