{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
   "metadata": {},
   "source": [
    "# ontoProc2 -- leveraging semantic SQL for ontology analysis in Bioconductor\n",
    "\n",
    "**Author:** Vincent J. Carey, stvjc at channing.harvard.edu"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
   "metadata": {},
   "source": [
    "# Introduction\n",
    "\n",
    "The ontoProc2 package has two aims:\n",
    "\n",
    "- to give convenient access to the ontologies that are transformed to \"semantic SQL\" in the [INCAtools semantic SQL project](https://github.com/INCATools/semantic-sql);\n",
    "- to simplify operations that have been available in [ontoProc](https://git.bioconductor.org/packages/ontoProc), which will be deprecated in 2027.\n",
    "\n",
    "This package is a \"second generation\" approach to ontology management and processing for Bioconductor. The ontoProc package was introduced in 2018 and had a number of experimental approaches to interface design and content caching. This package streamlines the identification and management of diverse ontologies by specifically leveraging semantic SQL concepts.\n",
    "\n",
    "Specifically, the call `ontoProc::getOnto('cellOnto')` would produce an `ontologyIndex` instance. To work with Cell Ontology with ontoProc2, use `semsql_connect(ontology=\"cl\")`. The abbreviated notation for ontologies follows that of the Open Biological and Biomedical Ontologies ([OBO](https://github.com/OBOFoundry/)) Foundry."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
   "metadata": {},
   "source": [
    "# Installation\n",
    "\n",
    "Prior to the release of Bioconductor 3.24, use `BiocManager::install(\"vjcitn/ontoProc2\")`.\n",
    "\n",
    "For Bioconductor 3.24 and subsequent versions, use `BiocManager::install(\"ontoProc2\")`."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d4e5f6a7-b8c9-0123-defa-234567890123",
   "metadata": {},
   "source": [
    "# Acquiring ontologies\n",
    "\n",
    "## Make a connection\n",
    "\n",
    "The best way to work with an ontology in this system is to use `semsql_connect`. The `ontology` argument will be a short string that the INCAtools project uses as part of the filename for the ontology. For Gene Ontology, the string is \"go\"."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "e5f6a7b8-c9d0-1234-efab-345678901234",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "1/27 packages newly attached/loaded, see sessionInfo() for details.\n",
      "\n",
      "Connected to SemanticSQL database: /Users/vincentcarey/Library/Caches/org.R-project.R/R/BiocFileCache/40e293b372b_go.db\n",
      "\n",
      "Primary ontology prefix: GO\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<SemsqlConn>  prefix: GO  | labeled terms: 88,356 "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "library(ontoProc2)\n",
    "goss <- semsql_connect(ontology = \"go\")\n",
    "goss"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f6a7b8c9-d0e1-2345-fabc-456789012345",
   "metadata": {},
   "source": [
    "## Make a report\n",
    "\n",
    "The `report` method provides details."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "a7b8c9d0-e1f2-3456-abcd-567890123456",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "============================================================ \n",
      "SemsqlConn Object\n",
      "============================================================ \n",
      "\n",
      "Connection Details:\n",
      "---------------------------------------- \n",
      "  Database path:    /Users/vincentcarey/Library/Caches/org.R-project.R/R/BiocFileCache/40e293b372b_go.db \n",
      "  Ontology prefix:  GO \n",
      "  Status:           ✓   Connected \n",
      "\n",
      "Database Statistics:\n",
      "---------------------------------------- \n",
      "  Labeled terms:    88,356 \n",
      "  Direct edges:     214,146 \n",
      "  Entailed edges:   9,336,957 \n",
      "  Definitions:      55,200 \n",
      "\n",
      "Terms by Prefix (top 5):\n",
      "---------------------------------------- \n",
      "  GO:              48,251\n",
      "  CHEBI:           23,969\n",
      "  _:               7,497\n",
      "  UBERON:          4,783\n",
      "  CL:              1,307\n",
      "\n",
      "Key Tables Available:\n",
      "---------------------------------------- \n",
      "  ✓  rdfs_label_statement \n",
      "  ✓  has_text_definition_statement \n",
      "  ✓  edge \n",
      "  ✓  entailed_edge \n",
      "  ✓  rdfs_subclass_of_statement \n",
      "  ✓  owl_some_values_from \n",
      "  ✓  has_oio_synonym_statement \n",
      "\n",
      "============================================================ \n",
      "Use methods like search_labels(), get_ancestors(), etc.\n",
      "Run ?SemsqlConn for documentation.\n",
      "============================================================ \n",
      "\n"
     ]
    }
   ],
   "source": [
    "report(goss)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b8c9d0e1-f2a3-4567-bcde-678901234567",
   "metadata": {},
   "source": [
    "## Probe the back end\n",
    "\n",
    "The back end is SQLite. We can enumerate the tables available:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "c9d0e1f2-a3b4-5678-cdef-789012345678",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "1/0 packages newly attached/loaded, see sessionInfo() for details.\n",
      "\n",
      "1/0 packages newly attached/loaded, see sessionInfo() for details.\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "100"
      ],
      "text/latex": [
       "100"
      ],
      "text/markdown": [
       "100"
      ],
      "text/plain": [
       "[1] 100"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<style>\n",
       ".list-inline {list-style: none; margin:0; padding: 0}\n",
       ".list-inline>li {display: inline-block}\n",
       ".list-inline>li:not(:last-child)::after {content: \"\\00b7\"; padding: 0 .5ex}\n",
       "</style>\n",
       "<ol class=list-inline><li>'all_problems'</li><li>'annotation_property_node'</li><li>'anonymous_class_expression'</li><li>'anonymous_expression'</li><li>'anonymous_individual_expression'</li><li>'anonymous_property_expression'</li></ol>\n"
      ],
      "text/latex": [
       "\\begin{enumerate*}\n",
       "\\item 'all\\_problems'\n",
       "\\item 'annotation\\_property\\_node'\n",
       "\\item 'anonymous\\_class\\_expression'\n",
       "\\item 'anonymous\\_expression'\n",
       "\\item 'anonymous\\_individual\\_expression'\n",
       "\\item 'anonymous\\_property\\_expression'\n",
       "\\end{enumerate*}\n"
      ],
      "text/markdown": [
       "1. 'all_problems'\n",
       "2. 'annotation_property_node'\n",
       "3. 'anonymous_class_expression'\n",
       "4. 'anonymous_expression'\n",
       "5. 'anonymous_individual_expression'\n",
       "6. 'anonymous_property_expression'\n",
       "\n",
       "\n"
      ],
      "text/plain": [
       "[1] \"all_problems\"                    \"annotation_property_node\"       \n",
       "[3] \"anonymous_class_expression\"      \"anonymous_expression\"           \n",
       "[5] \"anonymous_individual_expression\" \"anonymous_property_expression\"  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "library(dplyr)\n",
    "library(DBI)\n",
    "allt <- dbListTables(goss@con)\n",
    "length(allt)\n",
    "head(allt)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d0e1f2a3-b4c5-6789-defa-890123456789",
   "metadata": {},
   "source": [
    "## Use tidy methods\n",
    "\n",
    "Individual tables are readily accessible."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "e1f2a3b4-c5d6-7890-efab-901234567890",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "1/1 packages newly attached/loaded, see sessionInfo() for details.\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "\u001b[90m# A query:  ?? x 8\u001b[39m\n",
       "\u001b[90m# Database: sqlite 3.53.3 [/Users/vincentcarey/Library/Caches/org.R-project.R/R/BiocFileCache/40e293b372b_go.db]\u001b[39m\n",
       "   stanza                 subject predicate object value datatype language graph\n",
       "   \u001b[3m\u001b[90m<chr>\u001b[39m\u001b[23m                  \u001b[3m\u001b[90m<chr>\u001b[39m\u001b[23m   \u001b[3m\u001b[90m<chr>\u001b[39m\u001b[23m     \u001b[3m\u001b[90m<chr>\u001b[39m\u001b[23m  \u001b[3m\u001b[90m<chr>\u001b[39m\u001b[23m \u001b[3m\u001b[90m<chr>\u001b[39m\u001b[23m    \u001b[3m\u001b[90m<chr>\u001b[39m\u001b[23m    \u001b[3m\u001b[90m<chr>\u001b[39m\u001b[23m\n",
       "\u001b[90m 1\u001b[39m obo:go/extensions/go-… obo:go… owl:vers… \u001b[31mNA\u001b[39m     2026… \u001b[31mNA\u001b[39m       \u001b[31mNA\u001b[39m       \u001b[31mNA\u001b[39m   \n",
       "\u001b[90m 2\u001b[39m obo:go/extensions/go-… obo:go… oio:hasO… \u001b[31mNA\u001b[39m     1.2   \u001b[31mNA\u001b[39m       \u001b[31mNA\u001b[39m       \u001b[31mNA\u001b[39m   \n",
       "\u001b[90m 3\u001b[39m obo:go/extensions/go-… obo:go… oio:defa… \u001b[31mNA\u001b[39m     gene… \u001b[31mNA\u001b[39m       \u001b[31mNA\u001b[39m       \u001b[31mNA\u001b[39m   \n",
       "\u001b[90m 4\u001b[39m obo:go/extensions/go-… obo:go… dcterms:… cc:by… \u001b[31mNA\u001b[39m    \u001b[31mNA\u001b[39m       \u001b[31mNA\u001b[39m       \u001b[31mNA\u001b[39m   \n",
       "\u001b[90m 5\u001b[39m obo:go/extensions/go-… obo:go… dce:title \u001b[31mNA\u001b[39m     Gene… \u001b[31mNA\u001b[39m       \u001b[31mNA\u001b[39m       \u001b[31mNA\u001b[39m   \n",
       "\u001b[90m 6\u001b[39m obo:go/extensions/go-… obo:go… dce:desc… \u001b[31mNA\u001b[39m     The … \u001b[31mNA\u001b[39m       \u001b[31mNA\u001b[39m       \u001b[31mNA\u001b[39m   \n",
       "\u001b[90m 7\u001b[39m obo:go/extensions/go-… obo:go… IAO:0000… GO:00… \u001b[31mNA\u001b[39m    \u001b[31mNA\u001b[39m       \u001b[31mNA\u001b[39m       \u001b[31mNA\u001b[39m   \n",
       "\u001b[90m 8\u001b[39m obo:go/extensions/go-… obo:go… IAO:0000… GO:00… \u001b[31mNA\u001b[39m    \u001b[31mNA\u001b[39m       \u001b[31mNA\u001b[39m       \u001b[31mNA\u001b[39m   \n",
       "\u001b[90m 9\u001b[39m obo:go/extensions/go-… obo:go… IAO:0000… GO:00… \u001b[31mNA\u001b[39m    \u001b[31mNA\u001b[39m       \u001b[31mNA\u001b[39m       \u001b[31mNA\u001b[39m   \n",
       "\u001b[90m10\u001b[39m obo:go/extensions/go-… obo:go… owl:vers… obo:g… \u001b[31mNA\u001b[39m    \u001b[31mNA\u001b[39m       \u001b[31mNA\u001b[39m       \u001b[31mNA\u001b[39m   \n",
       "\u001b[90m# ℹ more rows\u001b[39m"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<!doctype html>\n",
       "<html>\n",
       "\t<head>\n",
       "\t\t<meta charset=\"utf-8\">\n",
       "\t\t<link href=\"data:text/css;charset-utf-8;base64,QGxheWVyIGh0bWx0b29scyB7CiAgLmh0bWwtZmlsbC1jb250YWluZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAvKiBQcmV2ZW50IHRoZSBjb250YWluZXIgZnJvbSBleHBhbmRpbmcgdmVydGljYWxseSBvciBob3Jpem9udGFsbHkgYmV5b25kIGl0cwogICAgcGFyZW50J3MgY29uc3RyYWludHMuICovCiAgICBtaW4taGVpZ2h0OiAwOwogICAgbWluLXdpZHRoOiAwOwogIH0KICAuaHRtbC1maWxsLWNvbnRhaW5lciA+IC5odG1sLWZpbGwtaXRlbSB7CiAgICAvKiBGaWxsIGl0ZW1zIGNhbiBncm93IGFuZCBzaHJpbmsgZnJlZWx5IHdpdGhpbgogICAgYXZhaWxhYmxlIHZlcnRpY2FsIHNwYWNlIGluIGZpbGxhYmxlIGNvbnRhaW5lciAqLwogICAgZmxleDogMSAxIGF1dG87CiAgICBtaW4taGVpZ2h0OiAwOwogICAgbWluLXdpZHRoOiAwOwogIH0KICAuaHRtbC1maWxsLWNvbnRhaW5lciA+IDpub3QoLmh0bWwtZmlsbC1pdGVtKSB7CiAgICAvKiBQcmV2ZW50IHNocmlua2luZyBvciBncm93aW5nIG9mIG5vbi1maWxsIGl0ZW1zICovCiAgICBmbGV4OiAwIDAgYXV0bzsKICB9Cn0K\" rel=\"stylesheet\" />\n",
       "<script title=\"htmlwidgets\" src=\"data:application/javascript;base64,[encoded data, 44256 characters]\"></script>\n",
       "<link href=\"data:text/css;charset-utf-8;base64,LmR0LWNyb3NzdGFsay1mYWRlIHsKICBvcGFjaXR5OiAwLjI7Cn0KCmh0bWwgYm9keSBkaXYuRFRTIGRpdi5kYXRhVGFibGVzX3Njcm9sbEJvZHkgewogIGJhY2tncm91bmQ6IG5vbmU7Cn0KCgovKgpGaXggaHR0cHM6Ly9naXRodWIuY29tL3JzdHVkaW8vRFQvaXNzdWVzLzU2MwpJZiB0aGUgYHRhYmxlLmRpc3BsYXlgIGlzIHNldCB0byAiYmxvY2siIChlLmcuLCBwa2dkb3duKSwgdGhlIGJyb3dzZXIgd2lsbCBkaXNwbGF5CmRhdGF0YWJsZSBvYmplY3RzIHN0cmFuZ2VseS4gVGhlIHNlYXJjaCBwYW5lbCBhbmQgdGhlIHBhZ2UgYnV0dG9ucyB3aWxsIHN0aWxsIGJlCmluIGZ1bGwtd2lkdGggYnV0IHRoZSB0YWJsZSBib2R5IHdpbGwgYmUgImNvbXBhY3QiIGFuZCBzaG9ydGVyLgpJbiB0aGVyb3J5LCBoYXZpbmcgdGhpcyBhdHRyaWJ1dGVzIHdpbGwgYWZmZWN0IGBkb209InQiYAp3aXRoIGBkaXNwbGF5OiBibG9ja2AgdXNlcnMuIEJ1dCBpbiByZWFsaXR5LCB0aGVyZSBzaG91bGQgYmUgbm8gb25lLgpXZSBtYXkgcmVtb3ZlIHRoZSBiZWxvdyBsaW5lcyBpbiB0aGUgZnV0dXJlIGlmIHRoZSB1cHN0cmVhbSBhZ3JlZSB0byBoYXZlIHRoaXMgdGhlcmUuClNlZSBodHRwczovL2dpdGh1Yi5jb20vRGF0YVRhYmxlcy9EYXRhVGFibGVzU3JjL2lzc3Vlcy8xNjAKKi8KCnRhYmxlLmRhdGFUYWJsZSB7CiAgZGlzcGxheTogdGFibGU7Cn0KCgovKgpXaGVuIERUT3V0cHV0KGZpbGwgPSBUUlVFKSwgaXQgcmVjZWl2ZXMgYSAuaHRtbC1maWxsLWl0ZW0gY2xhc3MgKHZpYSBodG1sdG9vbHM6OmJpbmRGaWxsUm9sZSgpKSwgd2hpY2ggZWZmZWN0aXZlbHkgYW1vdW50cyB0byBgZmxleDogMSAxIGF1dG9gLiBUaGF0J3MgbW9zdGx5IGZpbmUsIGJ1dCB0aGUgY2FzZSB3aGVyZSBgZmlsbENvbnRhaW5lcj1UUlVFYCtgaGVpZ2h0OmF1dG9gK2BmbGV4LWJhc2lzOmF1dG9gIGFuZCB0aGUgY29udGFpbmVyIChlLmcuLCBhIGJzbGliOjpjYXJkKCkpIGRvZXNuJ3QgaGF2ZSBhIGRlZmluZWQgaGVpZ2h0IGlzIGEgYml0IHByb2JsZW1hdGljIHNpbmNlIHRoZSB0YWJsZSB3YW50cyB0byBmaXQgdGhlIHBhcmVudCBidXQgdGhlIHBhcmVudCB3YW50cyB0byBmaXQgdGhlIHRhYmxlLCB3aGljaCByZXN1bHRzIHByZXR0eSBzbWFsbCB0YWJsZSBoZWlnaHQgKG1heWJlIGJlY2F1c2UgdGhlcmUgaXMgYSBtaW5pbXVtIGhlaWdodCBzb21ld2hlcmU/KS4gSXQgc2VlbXMgYmV0dGVyIGluIHRoaXMgY2FzZSB0byBpbXBvc2UgYSA0MDBweCBoZWlnaHQgZGVmYXVsdCBmb3IgdGhlIHRhYmxlLCB3aGljaCB3ZSBjYW4gZG8gYnkgc2V0dGluZyBgZmxleC1iYXNpc2AgdG8gNDAwcHggKHRoZSB0YWJsZSBpcyBzdGlsbCBhbGxvd2VkIHRvIGdyb3cvc2hyaW5rIHdoZW4gdGhlIGNvbnRhaW5lciBoYXMgYW4gb3BpbmlvbmF0ZWQgaGVpZ2h0KS4KKi8KCi5odG1sLWZpbGwtY29udGFpbmVyID4gLmh0bWwtZmlsbC1pdGVtLmRhdGF0YWJsZXMgewogIGZsZXgtYmFzaXM6IDQwMHB4Owp9Cg==\" rel=\"stylesheet\" />\n",
       "<script title=\"datatables-binding\" src=\"data:application/javascript;base64,[encoded data, 82568 characters]\"></script>\n",
       "<script title=\"jquery\" src=\"data:application/javascript;base64,[encoded data, 119336 characters]\"></script>\n",
       "<script title=\"dt-core\" src=\"data:application/javascript;base64,[encoded data, 116140 characters]\"></script>\n",
       "<link href=\"data:text/css;charset-utf-8;base64,[encoded data, 30268 characters]\" rel=\"stylesheet\" />\n",
       "<link href=\"data:text/css;charset-utf-8;base64,LyogU2VsZWN0ZWQgcm93cy9jZWxscyAqLwp0YWJsZS5kYXRhVGFibGUgdHIuc2VsZWN0ZWQgdGQsIHRhYmxlLmRhdGFUYWJsZSB0ZC5zZWxlY3RlZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2IwYmVkOSAhaW1wb3J0YW50Owp9Ci8qIEluIGNhc2Ugb2Ygc2Nyb2xsWC9ZIG9yIEZpeGVkSGVhZGVyICovCi5kYXRhVGFibGVzX3Njcm9sbEJvZHkgLmRhdGFUYWJsZXNfc2l6aW5nIHsKICB2aXNpYmlsaXR5OiBoaWRkZW47Cn0KCi8qIFRoZSBkYXRhdGFibGVzJyB0aGVtZSBDU1MgZmlsZSBkb2Vzbid0IGRlZmluZQp0aGUgY29sb3IgYnV0IHdpdGggd2hpdGUgYmFja2dyb3VuZC4gSXQgbGVhZHMgdG8gYW4gaXNzdWUgdGhhdAp3aGVuIHRoZSBIVE1MJ3MgYm9keSBjb2xvciBpcyBzZXQgdG8gJ3doaXRlJywgdGhlIHVzZXIgY2FuJ3QKc2VlIHRoZSB0ZXh0IHNpbmNlIHRoZSBiYWNrZ3JvdW5kIGlzIHdoaXRlLiBPbmUgY2FzZSBoYXBwZW5zIGluIHRoZQpSU3R1ZGlvJ3MgSURFIHdoZW4gaW5saW5lIHZpZXdpbmcgdGhlIERUIHRhYmxlIGluc2lkZSBhbiBSbWQgZmlsZSwKaWYgdGhlIElERSB0aGVtZSBpcyBzZXQgdG8gIkNvYmFsdCIuCgpTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JzdHVkaW8vRFQvaXNzdWVzLzQ0NyBmb3IgbW9yZSBpbmZvCgpUaGlzIGZpeGVzIHNob3VsZCBoYXZlIGxpdHRsZSBzaWRlLWVmZmVjdHMgYmVjYXVzZSBhbGwgdGhlIG90aGVyIGVsZW1lbnRzCm9mIHRoZSBkZWZhdWx0IHRoZW1lIHVzZSB0aGUgIzMzMyBmb250IGNvbG9yLgoKVE9ETzogVGhlIHVwc3RyZWFtIG1heSB1c2UgcmVsYXRpdmUgY29sb3JzIGZvciBib3RoIHRoZSB0YWJsZSBiYWNrZ3JvdW5kCmFuZCB0aGUgY29sb3IuIEl0IG1lYW5zIHRoZSB0YWJsZSBjYW4gZGlzcGxheSB3ZWxsIHdpdGhvdXQgdGhpcyBwYXRjaAp0aGVuLiBBdCB0aGF0IHRpbWUsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBiZWxvdyBDU1MgYXR0cmlidXRlcy4KKi8KZGl2LmRhdGF0YWJsZXMgewogIGNvbG9yOiAjMzMzOwp9Cg==\" rel=\"stylesheet\" />\n",
       "<script title=\"crosstalk\" src=\"data:application/javascript;base64,[encoded data, 25236 characters]\"></script>\n",
       "<link href=\"data:text/css;charset-utf-8;base64,LmNvbnRhaW5lci1mbHVpZC5jcm9zc3RhbGstYnNjb2xze21hcmdpbi1sZWZ0Oi0zMHB4O21hcmdpbi1yaWdodDotMzBweDt3aGl0ZS1zcGFjZTpub3JtYWx9Ym9keT4uY29udGFpbmVyLWZsdWlkLmNyb3NzdGFsay1ic2NvbHN7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6YXV0b30uY3Jvc3N0YWxrLWlucHV0LWNoZWNrYm94Z3JvdXAgLmNyb3NzdGFsay1vcHRpb25zLWdyb3VwIC5jcm9zc3RhbGstb3B0aW9ucy1jb2x1bW57ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1yaWdodDoxMnB4O3ZlcnRpY2FsLWFsaWduOnRvcH1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KXsuY3Jvc3N0YWxrLWlucHV0LWNoZWNrYm94Z3JvdXAgLmNyb3NzdGFsay1vcHRpb25zLWdyb3VwIC5jcm9zc3RhbGstb3B0aW9ucy1jb2x1bW57ZGlzcGxheTpibG9jaztwYWRkaW5nLXJpZ2h0OmluaGVyaXR9fS5jcm9zc3RhbGstaW5wdXR7bWFyZ2luLWJvdHRvbToxNXB4fS5jcm9zc3RhbGstaW5wdXQgLmNvbnRyb2wtbGFiZWx7bWFyZ2luLWJvdHRvbTowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY3Jvc3N0YWxrLWlucHV0IGlucHV0W3R5cGU9ImNoZWNrYm94Il17bWFyZ2luOjRweCAwIDA7bWFyZ2luLXRvcDoxcHg7bGluZS1oZWlnaHQ6bm9ybWFsfS5jcm9zc3RhbGstaW5wdXQgLmNoZWNrYm94e3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDoxMHB4O21hcmdpbi1ib3R0b206MTBweH0uY3Jvc3N0YWxrLWlucHV0IC5jaGVja2JveD5sYWJlbHtwYWRkaW5nLWxlZnQ6MjBweDttYXJnaW4tYm90dG9tOjA7Zm9udC13ZWlnaHQ6NDAwO2N1cnNvcjpwb2ludGVyfS5jcm9zc3RhbGstaW5wdXQgLmNoZWNrYm94IGlucHV0W3R5cGU9ImNoZWNrYm94Il0sLmNyb3NzdGFsay1pbnB1dCAuY2hlY2tib3gtaW5saW5lIGlucHV0W3R5cGU9ImNoZWNrYm94Il17cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLXRvcDoycHg7bWFyZ2luLWxlZnQ6LTIwcHh9LmNyb3NzdGFsay1pbnB1dCAuY2hlY2tib3grLmNoZWNrYm94e21hcmdpbi10b3A6LTVweH0uY3Jvc3N0YWxrLWlucHV0IC5jaGVja2JveC1pbmxpbmV7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1sZWZ0OjIwcHg7bWFyZ2luLWJvdHRvbTowO2ZvbnQtd2VpZ2h0OjQwMDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Y3Vyc29yOnBvaW50ZXJ9LmNyb3NzdGFsay1pbnB1dCAuY2hlY2tib3gtaW5saW5lKy5jaGVja2JveC1pbmxpbmV7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjEwcHh9Cg==\" rel=\"stylesheet\" />\n",
       "\t</head>\n",
       "\t<body>\n",
       "\t\t<div class=\"datatables html-widget html-fill-item\" id=\"htmlwidget-1d92fa7a1322ceeba97e\" style=\"width:100%;height:auto;\"></div>\n",
       "<script type=\"application/json\" data-for=\"htmlwidget-1d92fa7a1322ceeba97e\">{\"x\":{\"filter\":\"none\",\"vertical\":false,\"data\":[[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\",\"18\",\"19\",\"20\"],[\"obo:go/extensions/go-plus.ofn\",\"obo:go/extensions/go-plus.ofn\",\"obo:go/extensions/go-plus.ofn\",\"obo:go/extensions/go-plus.ofn\",\"obo:go/extensions/go-plus.ofn\",\"obo:go/extensions/go-plus.ofn\",\"obo:go/extensions/go-plus.ofn\",\"obo:go/extensions/go-plus.ofn\",\"obo:go/extensions/go-plus.ofn\",\"obo:go/extensions/go-plus.ofn\",\"obo:go/extensions/go-plus.ofn\",\"IAO:0000111\",\"IAO:0000112\",\"IAO:0000114\",\"IAO:0000115\",\"IAO:0000115\",\"IAO:0000115\",\"IAO:0000115\",\"IAO:0000115\",\"IAO:0000115\"],[\"obo:go/extensions/go-plus.ofn\",\"obo:go/extensions/go-plus.ofn\",\"obo:go/extensions/go-plus.ofn\",\"obo:go/extensions/go-plus.ofn\",\"obo:go/extensions/go-plus.ofn\",\"obo:go/extensions/go-plus.ofn\",\"obo:go/extensions/go-plus.ofn\",\"obo:go/extensions/go-plus.ofn\",\"obo:go/extensions/go-plus.ofn\",\"obo:go/extensions/go-plus.ofn\",\"obo:go/extensions/go-plus.ofn\",\"IAO:0000111\",\"IAO:0000112\",\"IAO:0000114\",\"IAO:0000115\",\"IAO:0000115\",\"IAO:0000115\",\"IAO:0000115\",\"IAO:0000115\",\"IAO:0000115\"],[\"owl:versionInfo\",\"oio:hasOBOFormatVersion\",\"oio:default-namespace\",\"dcterms:license\",\"dce:title\",\"dce:description\",\"IAO:0000700\",\"IAO:0000700\",\"IAO:0000700\",\"owl:versionIRI\",\"rdf:type\",\"rdf:type\",\"rdf:type\",\"rdf:type\",\"rdfs:label\",\"rdfs:label\",\"IAO:0000119\",\"IAO:0000117\",\"IAO:0000116\",\"IAO:0000115\"],[null,null,null,\"cc:by/4.0/\",null,null,\"GO:0008150\",\"GO:0005575\",\"GO:0003674\",\"obo:go/releases/2026-01-23/extensions/go-plus.ofn\",\"owl:Ontology\",\"owl:AnnotationProperty\",\"owl:AnnotationProperty\",\"owl:AnnotationProperty\",null,null,null,null,null,null],[\"2026-01-23\",\"1.2\",\"gene_ontology\",null,\"Gene Ontology\",\"The Gene Ontology (GO) provides a framework and set of concepts for describing the functions of gene products from all organisms.\",null,null,null,null,null,null,null,null,\"definition\",\"definition\",\"GROUP:OBI:&lt;http://purl.obolibrary.org/obo/obi&gt;\",\"PERSON:Daniel Schober\",\"2012-04-05: \\nBarry Smith\\n\\nThe official OBI definition, explaining the meaning of a class or property: 'Shall be Aristotelian, formalized and normalized. Can be augmented with colloquial definitions'  is terrible.\\n\\nCan you fix to something like:\\n\\nA statement of necessary and sufficient conditions explaining the meaning of an expression referring to a class or property.\\n\\nAlan Ruttenberg\\n\\nYour proposed definition is a reasonable candidate, except that it is very common that necessary and sufficient conditions are not given. Mostly they are necessary, occasionally they are necessary and sufficient or just sufficient. Often they use terms that are not themselves defined and so they effectively can't be evaluated by those criteria. \\n\\nOn the specifics of the proposed definition:\\n\\nWe don't have definitions of 'meaning' or 'expression' or 'property'. For 'reference' in the intended sense I think we use the term 'denotation'. For 'expression', I think we you mean symbol, or identifier. For 'meaning' it differs for class and property. For class we want documentation that let's the intended reader determine whether an entity is instance of the class, or not. For property we want documentation that let's the intended reader determine, given a pair of potential relata, whether the assertion that the relation holds is true. The 'intended reader' part suggests that we also specify who, we expect, would be able to understand the definition, and also generalizes over human and computer reader to include textual and logical definition. \\n\\nPersonally, I am more comfortable weakening definition to documentation, with instructions as to what is desirable. \\n\\nWe also have the outstanding issue of how to aim different definitions to different audiences. A clinical audience reading chebi wants a different sort of definition documentation/definition from a chemistry trained audience, and similarly there is a need for a definition that is adequate for an ontologist to work with.\",\"The official definition, explaining the meaning of a class or property. Shall be Aristotelian, formalized and normalized. Can be augmented with colloquial definitions.\"],[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],[null,null,null,null,null,null,null,null,null,null,null,null,null,null,\"en\",null,\"en\",\"en\",\"en\",\"en\"],[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]],\"container\":\"<table class=\\\"display\\\">\\n  <thead>\\n    <tr>\\n      <th> <\\/th>\\n      <th>stanza<\\/th>\\n      <th>subject<\\/th>\\n      <th>predicate<\\/th>\\n      <th>object<\\/th>\\n      <th>value<\\/th>\\n      <th>datatype<\\/th>\\n      <th>language<\\/th>\\n      <th>graph<\\/th>\\n    <\\/tr>\\n  <\\/thead>\\n<\\/table>\",\"options\":{\"columnDefs\":[{\"orderable\":false,\"targets\":0},{\"name\":\" \",\"targets\":0},{\"name\":\"stanza\",\"targets\":1},{\"name\":\"subject\",\"targets\":2},{\"name\":\"predicate\",\"targets\":3},{\"name\":\"object\",\"targets\":4},{\"name\":\"value\",\"targets\":5},{\"name\":\"datatype\",\"targets\":6},{\"name\":\"language\",\"targets\":7},{\"name\":\"graph\",\"targets\":8}],\"order\":[],\"autoWidth\":false,\"orderClasses\":false}},\"evals\":[],\"jsHooks\":[]}</script>\n",
       "\t</body>\n",
       "</html>\n"
      ],
      "text/plain": [
       "HTML widgets cannot be represented in plain text (need html)"
      ]
     },
     "metadata": {
      "text/html": {
       "isolated": true
      }
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "library(DT)\n",
    "tbl(goss@con, \"statements\")\n",
    "tbl(goss@con, \"statements\") |>\n",
    "  head(20) |>\n",
    "  as.data.frame() |>\n",
    "  datatable()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f2a3b4c5-d6e7-8901-fabc-012345678901",
   "metadata": {},
   "source": [
    "To investigate the ontology, searching through RDF labels is a natural approach."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "a3b4c5d6-e7f8-9012-abcd-123456789012",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<!doctype html>\n",
       "<html>\n",
       "\t<head>\n",
       "\t\t<meta charset=\"utf-8\">\n",
       "\t\t<link href=\"data:text/css;charset-utf-8;base64,QGxheWVyIGh0bWx0b29scyB7CiAgLmh0bWwtZmlsbC1jb250YWluZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAvKiBQcmV2ZW50IHRoZSBjb250YWluZXIgZnJvbSBleHBhbmRpbmcgdmVydGljYWxseSBvciBob3Jpem9udGFsbHkgYmV5b25kIGl0cwogICAgcGFyZW50J3MgY29uc3RyYWludHMuICovCiAgICBtaW4taGVpZ2h0OiAwOwogICAgbWluLXdpZHRoOiAwOwogIH0KICAuaHRtbC1maWxsLWNvbnRhaW5lciA+IC5odG1sLWZpbGwtaXRlbSB7CiAgICAvKiBGaWxsIGl0ZW1zIGNhbiBncm93IGFuZCBzaHJpbmsgZnJlZWx5IHdpdGhpbgogICAgYXZhaWxhYmxlIHZlcnRpY2FsIHNwYWNlIGluIGZpbGxhYmxlIGNvbnRhaW5lciAqLwogICAgZmxleDogMSAxIGF1dG87CiAgICBtaW4taGVpZ2h0OiAwOwogICAgbWluLXdpZHRoOiAwOwogIH0KICAuaHRtbC1maWxsLWNvbnRhaW5lciA+IDpub3QoLmh0bWwtZmlsbC1pdGVtKSB7CiAgICAvKiBQcmV2ZW50IHNocmlua2luZyBvciBncm93aW5nIG9mIG5vbi1maWxsIGl0ZW1zICovCiAgICBmbGV4OiAwIDAgYXV0bzsKICB9Cn0K\" rel=\"stylesheet\" />\n",
       "<script title=\"htmlwidgets\" src=\"data:application/javascript;base64,[encoded data, 44256 characters]\"></script>\n",
       "<link href=\"data:text/css;charset-utf-8;base64,LmR0LWNyb3NzdGFsay1mYWRlIHsKICBvcGFjaXR5OiAwLjI7Cn0KCmh0bWwgYm9keSBkaXYuRFRTIGRpdi5kYXRhVGFibGVzX3Njcm9sbEJvZHkgewogIGJhY2tncm91bmQ6IG5vbmU7Cn0KCgovKgpGaXggaHR0cHM6Ly9naXRodWIuY29tL3JzdHVkaW8vRFQvaXNzdWVzLzU2MwpJZiB0aGUgYHRhYmxlLmRpc3BsYXlgIGlzIHNldCB0byAiYmxvY2siIChlLmcuLCBwa2dkb3duKSwgdGhlIGJyb3dzZXIgd2lsbCBkaXNwbGF5CmRhdGF0YWJsZSBvYmplY3RzIHN0cmFuZ2VseS4gVGhlIHNlYXJjaCBwYW5lbCBhbmQgdGhlIHBhZ2UgYnV0dG9ucyB3aWxsIHN0aWxsIGJlCmluIGZ1bGwtd2lkdGggYnV0IHRoZSB0YWJsZSBib2R5IHdpbGwgYmUgImNvbXBhY3QiIGFuZCBzaG9ydGVyLgpJbiB0aGVyb3J5LCBoYXZpbmcgdGhpcyBhdHRyaWJ1dGVzIHdpbGwgYWZmZWN0IGBkb209InQiYAp3aXRoIGBkaXNwbGF5OiBibG9ja2AgdXNlcnMuIEJ1dCBpbiByZWFsaXR5LCB0aGVyZSBzaG91bGQgYmUgbm8gb25lLgpXZSBtYXkgcmVtb3ZlIHRoZSBiZWxvdyBsaW5lcyBpbiB0aGUgZnV0dXJlIGlmIHRoZSB1cHN0cmVhbSBhZ3JlZSB0byBoYXZlIHRoaXMgdGhlcmUuClNlZSBodHRwczovL2dpdGh1Yi5jb20vRGF0YVRhYmxlcy9EYXRhVGFibGVzU3JjL2lzc3Vlcy8xNjAKKi8KCnRhYmxlLmRhdGFUYWJsZSB7CiAgZGlzcGxheTogdGFibGU7Cn0KCgovKgpXaGVuIERUT3V0cHV0KGZpbGwgPSBUUlVFKSwgaXQgcmVjZWl2ZXMgYSAuaHRtbC1maWxsLWl0ZW0gY2xhc3MgKHZpYSBodG1sdG9vbHM6OmJpbmRGaWxsUm9sZSgpKSwgd2hpY2ggZWZmZWN0aXZlbHkgYW1vdW50cyB0byBgZmxleDogMSAxIGF1dG9gLiBUaGF0J3MgbW9zdGx5IGZpbmUsIGJ1dCB0aGUgY2FzZSB3aGVyZSBgZmlsbENvbnRhaW5lcj1UUlVFYCtgaGVpZ2h0OmF1dG9gK2BmbGV4LWJhc2lzOmF1dG9gIGFuZCB0aGUgY29udGFpbmVyIChlLmcuLCBhIGJzbGliOjpjYXJkKCkpIGRvZXNuJ3QgaGF2ZSBhIGRlZmluZWQgaGVpZ2h0IGlzIGEgYml0IHByb2JsZW1hdGljIHNpbmNlIHRoZSB0YWJsZSB3YW50cyB0byBmaXQgdGhlIHBhcmVudCBidXQgdGhlIHBhcmVudCB3YW50cyB0byBmaXQgdGhlIHRhYmxlLCB3aGljaCByZXN1bHRzIHByZXR0eSBzbWFsbCB0YWJsZSBoZWlnaHQgKG1heWJlIGJlY2F1c2UgdGhlcmUgaXMgYSBtaW5pbXVtIGhlaWdodCBzb21ld2hlcmU/KS4gSXQgc2VlbXMgYmV0dGVyIGluIHRoaXMgY2FzZSB0byBpbXBvc2UgYSA0MDBweCBoZWlnaHQgZGVmYXVsdCBmb3IgdGhlIHRhYmxlLCB3aGljaCB3ZSBjYW4gZG8gYnkgc2V0dGluZyBgZmxleC1iYXNpc2AgdG8gNDAwcHggKHRoZSB0YWJsZSBpcyBzdGlsbCBhbGxvd2VkIHRvIGdyb3cvc2hyaW5rIHdoZW4gdGhlIGNvbnRhaW5lciBoYXMgYW4gb3BpbmlvbmF0ZWQgaGVpZ2h0KS4KKi8KCi5odG1sLWZpbGwtY29udGFpbmVyID4gLmh0bWwtZmlsbC1pdGVtLmRhdGF0YWJsZXMgewogIGZsZXgtYmFzaXM6IDQwMHB4Owp9Cg==\" rel=\"stylesheet\" />\n",
       "<script title=\"datatables-binding\" src=\"data:application/javascript;base64,[encoded data, 82568 characters]\"></script>\n",
       "<script title=\"jquery\" src=\"data:application/javascript;base64,[encoded data, 119336 characters]\"></script>\n",
       "<script title=\"dt-core\" src=\"data:application/javascript;base64,[encoded data, 116140 characters]\"></script>\n",
       "<link href=\"data:text/css;charset-utf-8;base64,[encoded data, 30268 characters]\" rel=\"stylesheet\" />\n",
       "<link href=\"data:text/css;charset-utf-8;base64,LyogU2VsZWN0ZWQgcm93cy9jZWxscyAqLwp0YWJsZS5kYXRhVGFibGUgdHIuc2VsZWN0ZWQgdGQsIHRhYmxlLmRhdGFUYWJsZSB0ZC5zZWxlY3RlZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2IwYmVkOSAhaW1wb3J0YW50Owp9Ci8qIEluIGNhc2Ugb2Ygc2Nyb2xsWC9ZIG9yIEZpeGVkSGVhZGVyICovCi5kYXRhVGFibGVzX3Njcm9sbEJvZHkgLmRhdGFUYWJsZXNfc2l6aW5nIHsKICB2aXNpYmlsaXR5OiBoaWRkZW47Cn0KCi8qIFRoZSBkYXRhdGFibGVzJyB0aGVtZSBDU1MgZmlsZSBkb2Vzbid0IGRlZmluZQp0aGUgY29sb3IgYnV0IHdpdGggd2hpdGUgYmFja2dyb3VuZC4gSXQgbGVhZHMgdG8gYW4gaXNzdWUgdGhhdAp3aGVuIHRoZSBIVE1MJ3MgYm9keSBjb2xvciBpcyBzZXQgdG8gJ3doaXRlJywgdGhlIHVzZXIgY2FuJ3QKc2VlIHRoZSB0ZXh0IHNpbmNlIHRoZSBiYWNrZ3JvdW5kIGlzIHdoaXRlLiBPbmUgY2FzZSBoYXBwZW5zIGluIHRoZQpSU3R1ZGlvJ3MgSURFIHdoZW4gaW5saW5lIHZpZXdpbmcgdGhlIERUIHRhYmxlIGluc2lkZSBhbiBSbWQgZmlsZSwKaWYgdGhlIElERSB0aGVtZSBpcyBzZXQgdG8gIkNvYmFsdCIuCgpTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JzdHVkaW8vRFQvaXNzdWVzLzQ0NyBmb3IgbW9yZSBpbmZvCgpUaGlzIGZpeGVzIHNob3VsZCBoYXZlIGxpdHRsZSBzaWRlLWVmZmVjdHMgYmVjYXVzZSBhbGwgdGhlIG90aGVyIGVsZW1lbnRzCm9mIHRoZSBkZWZhdWx0IHRoZW1lIHVzZSB0aGUgIzMzMyBmb250IGNvbG9yLgoKVE9ETzogVGhlIHVwc3RyZWFtIG1heSB1c2UgcmVsYXRpdmUgY29sb3JzIGZvciBib3RoIHRoZSB0YWJsZSBiYWNrZ3JvdW5kCmFuZCB0aGUgY29sb3IuIEl0IG1lYW5zIHRoZSB0YWJsZSBjYW4gZGlzcGxheSB3ZWxsIHdpdGhvdXQgdGhpcyBwYXRjaAp0aGVuLiBBdCB0aGF0IHRpbWUsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBiZWxvdyBDU1MgYXR0cmlidXRlcy4KKi8KZGl2LmRhdGF0YWJsZXMgewogIGNvbG9yOiAjMzMzOwp9Cg==\" rel=\"stylesheet\" />\n",
       "<script title=\"crosstalk\" src=\"data:application/javascript;base64,[encoded data, 25236 characters]\"></script>\n",
       "<link href=\"data:text/css;charset-utf-8;base64,LmNvbnRhaW5lci1mbHVpZC5jcm9zc3RhbGstYnNjb2xze21hcmdpbi1sZWZ0Oi0zMHB4O21hcmdpbi1yaWdodDotMzBweDt3aGl0ZS1zcGFjZTpub3JtYWx9Ym9keT4uY29udGFpbmVyLWZsdWlkLmNyb3NzdGFsay1ic2NvbHN7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6YXV0b30uY3Jvc3N0YWxrLWlucHV0LWNoZWNrYm94Z3JvdXAgLmNyb3NzdGFsay1vcHRpb25zLWdyb3VwIC5jcm9zc3RhbGstb3B0aW9ucy1jb2x1bW57ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1yaWdodDoxMnB4O3ZlcnRpY2FsLWFsaWduOnRvcH1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KXsuY3Jvc3N0YWxrLWlucHV0LWNoZWNrYm94Z3JvdXAgLmNyb3NzdGFsay1vcHRpb25zLWdyb3VwIC5jcm9zc3RhbGstb3B0aW9ucy1jb2x1bW57ZGlzcGxheTpibG9jaztwYWRkaW5nLXJpZ2h0OmluaGVyaXR9fS5jcm9zc3RhbGstaW5wdXR7bWFyZ2luLWJvdHRvbToxNXB4fS5jcm9zc3RhbGstaW5wdXQgLmNvbnRyb2wtbGFiZWx7bWFyZ2luLWJvdHRvbTowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY3Jvc3N0YWxrLWlucHV0IGlucHV0W3R5cGU9ImNoZWNrYm94Il17bWFyZ2luOjRweCAwIDA7bWFyZ2luLXRvcDoxcHg7bGluZS1oZWlnaHQ6bm9ybWFsfS5jcm9zc3RhbGstaW5wdXQgLmNoZWNrYm94e3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDoxMHB4O21hcmdpbi1ib3R0b206MTBweH0uY3Jvc3N0YWxrLWlucHV0IC5jaGVja2JveD5sYWJlbHtwYWRkaW5nLWxlZnQ6MjBweDttYXJnaW4tYm90dG9tOjA7Zm9udC13ZWlnaHQ6NDAwO2N1cnNvcjpwb2ludGVyfS5jcm9zc3RhbGstaW5wdXQgLmNoZWNrYm94IGlucHV0W3R5cGU9ImNoZWNrYm94Il0sLmNyb3NzdGFsay1pbnB1dCAuY2hlY2tib3gtaW5saW5lIGlucHV0W3R5cGU9ImNoZWNrYm94Il17cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLXRvcDoycHg7bWFyZ2luLWxlZnQ6LTIwcHh9LmNyb3NzdGFsay1pbnB1dCAuY2hlY2tib3grLmNoZWNrYm94e21hcmdpbi10b3A6LTVweH0uY3Jvc3N0YWxrLWlucHV0IC5jaGVja2JveC1pbmxpbmV7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1sZWZ0OjIwcHg7bWFyZ2luLWJvdHRvbTowO2ZvbnQtd2VpZ2h0OjQwMDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Y3Vyc29yOnBvaW50ZXJ9LmNyb3NzdGFsay1pbnB1dCAuY2hlY2tib3gtaW5saW5lKy5jaGVja2JveC1pbmxpbmV7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjEwcHh9Cg==\" rel=\"stylesheet\" />\n",
       "\t</head>\n",
       "\t<body>\n",
       "\t\t<div class=\"datatables html-widget html-fill-item\" id=\"htmlwidget-ee91204831f77c01fac7\" style=\"width:100%;height:auto;\"></div>\n",
       "<script type=\"application/json\" data-for=\"htmlwidget-ee91204831f77c01fac7\">{\"x\":{\"filter\":\"none\",\"vertical\":false,\"data\":[[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\"],[\"CHEBI:68494\",\"CHEBI:68495\",\"GO:0003377\",\"_:riog00109215\",\"_:riog00112658\",\"GO:0006918\"],[\"apoptosis inhibitor\",\"apoptosis inducer\",\"obsolete regulation of apoptosis by sphingosine-1-phosphate signaling pathway\",\"Apoptosis induced DNA fragmentation\",\"Apoptosis\",\"obsolete induction of apoptosis by p53\"]],\"container\":\"<table class=\\\"display\\\">\\n  <thead>\\n    <tr>\\n      <th> <\\/th>\\n      <th>subject<\\/th>\\n      <th>label<\\/th>\\n    <\\/tr>\\n  <\\/thead>\\n<\\/table>\",\"options\":{\"columnDefs\":[{\"orderable\":false,\"targets\":0},{\"name\":\" \",\"targets\":0},{\"name\":\"subject\",\"targets\":1},{\"name\":\"label\",\"targets\":2}],\"order\":[],\"autoWidth\":false,\"orderClasses\":false}},\"evals\":[],\"jsHooks\":[]}</script>\n",
       "\t</body>\n",
       "</html>\n"
      ],
      "text/plain": [
       "HTML widgets cannot be represented in plain text (need html)"
      ]
     },
     "metadata": {
      "text/html": {
       "isolated": true
      }
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "search_labels(goss, \"apoptosis\") |>\n",
    "  head() |>\n",
    "  datatable()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b4c5d6e7-f8a9-0123-bcde-234567890123",
   "metadata": {},
   "source": [
    "Additional filtering could be useful here to focus on GO terms. The `_riog...` labels have special roles in RDF inference, and this will be addressed in vignettes to be added in the future.\n",
    "\n",
    "Let's improve the query:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "c5d6e7f8-a9b0-1234-cdef-345678901234",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<!doctype html>\n",
       "<html>\n",
       "\t<head>\n",
       "\t\t<meta charset=\"utf-8\">\n",
       "\t\t<link href=\"data:text/css;charset-utf-8;base64,QGxheWVyIGh0bWx0b29scyB7CiAgLmh0bWwtZmlsbC1jb250YWluZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAvKiBQcmV2ZW50IHRoZSBjb250YWluZXIgZnJvbSBleHBhbmRpbmcgdmVydGljYWxseSBvciBob3Jpem9udGFsbHkgYmV5b25kIGl0cwogICAgcGFyZW50J3MgY29uc3RyYWludHMuICovCiAgICBtaW4taGVpZ2h0OiAwOwogICAgbWluLXdpZHRoOiAwOwogIH0KICAuaHRtbC1maWxsLWNvbnRhaW5lciA+IC5odG1sLWZpbGwtaXRlbSB7CiAgICAvKiBGaWxsIGl0ZW1zIGNhbiBncm93IGFuZCBzaHJpbmsgZnJlZWx5IHdpdGhpbgogICAgYXZhaWxhYmxlIHZlcnRpY2FsIHNwYWNlIGluIGZpbGxhYmxlIGNvbnRhaW5lciAqLwogICAgZmxleDogMSAxIGF1dG87CiAgICBtaW4taGVpZ2h0OiAwOwogICAgbWluLXdpZHRoOiAwOwogIH0KICAuaHRtbC1maWxsLWNvbnRhaW5lciA+IDpub3QoLmh0bWwtZmlsbC1pdGVtKSB7CiAgICAvKiBQcmV2ZW50IHNocmlua2luZyBvciBncm93aW5nIG9mIG5vbi1maWxsIGl0ZW1zICovCiAgICBmbGV4OiAwIDAgYXV0bzsKICB9Cn0K\" rel=\"stylesheet\" />\n",
       "<script title=\"htmlwidgets\" src=\"data:application/javascript;base64,[encoded data, 44256 characters]\"></script>\n",
       "<link href=\"data:text/css;charset-utf-8;base64,LmR0LWNyb3NzdGFsay1mYWRlIHsKICBvcGFjaXR5OiAwLjI7Cn0KCmh0bWwgYm9keSBkaXYuRFRTIGRpdi5kYXRhVGFibGVzX3Njcm9sbEJvZHkgewogIGJhY2tncm91bmQ6IG5vbmU7Cn0KCgovKgpGaXggaHR0cHM6Ly9naXRodWIuY29tL3JzdHVkaW8vRFQvaXNzdWVzLzU2MwpJZiB0aGUgYHRhYmxlLmRpc3BsYXlgIGlzIHNldCB0byAiYmxvY2siIChlLmcuLCBwa2dkb3duKSwgdGhlIGJyb3dzZXIgd2lsbCBkaXNwbGF5CmRhdGF0YWJsZSBvYmplY3RzIHN0cmFuZ2VseS4gVGhlIHNlYXJjaCBwYW5lbCBhbmQgdGhlIHBhZ2UgYnV0dG9ucyB3aWxsIHN0aWxsIGJlCmluIGZ1bGwtd2lkdGggYnV0IHRoZSB0YWJsZSBib2R5IHdpbGwgYmUgImNvbXBhY3QiIGFuZCBzaG9ydGVyLgpJbiB0aGVyb3J5LCBoYXZpbmcgdGhpcyBhdHRyaWJ1dGVzIHdpbGwgYWZmZWN0IGBkb209InQiYAp3aXRoIGBkaXNwbGF5OiBibG9ja2AgdXNlcnMuIEJ1dCBpbiByZWFsaXR5LCB0aGVyZSBzaG91bGQgYmUgbm8gb25lLgpXZSBtYXkgcmVtb3ZlIHRoZSBiZWxvdyBsaW5lcyBpbiB0aGUgZnV0dXJlIGlmIHRoZSB1cHN0cmVhbSBhZ3JlZSB0byBoYXZlIHRoaXMgdGhlcmUuClNlZSBodHRwczovL2dpdGh1Yi5jb20vRGF0YVRhYmxlcy9EYXRhVGFibGVzU3JjL2lzc3Vlcy8xNjAKKi8KCnRhYmxlLmRhdGFUYWJsZSB7CiAgZGlzcGxheTogdGFibGU7Cn0KCgovKgpXaGVuIERUT3V0cHV0KGZpbGwgPSBUUlVFKSwgaXQgcmVjZWl2ZXMgYSAuaHRtbC1maWxsLWl0ZW0gY2xhc3MgKHZpYSBodG1sdG9vbHM6OmJpbmRGaWxsUm9sZSgpKSwgd2hpY2ggZWZmZWN0aXZlbHkgYW1vdW50cyB0byBgZmxleDogMSAxIGF1dG9gLiBUaGF0J3MgbW9zdGx5IGZpbmUsIGJ1dCB0aGUgY2FzZSB3aGVyZSBgZmlsbENvbnRhaW5lcj1UUlVFYCtgaGVpZ2h0OmF1dG9gK2BmbGV4LWJhc2lzOmF1dG9gIGFuZCB0aGUgY29udGFpbmVyIChlLmcuLCBhIGJzbGliOjpjYXJkKCkpIGRvZXNuJ3QgaGF2ZSBhIGRlZmluZWQgaGVpZ2h0IGlzIGEgYml0IHByb2JsZW1hdGljIHNpbmNlIHRoZSB0YWJsZSB3YW50cyB0byBmaXQgdGhlIHBhcmVudCBidXQgdGhlIHBhcmVudCB3YW50cyB0byBmaXQgdGhlIHRhYmxlLCB3aGljaCByZXN1bHRzIHByZXR0eSBzbWFsbCB0YWJsZSBoZWlnaHQgKG1heWJlIGJlY2F1c2UgdGhlcmUgaXMgYSBtaW5pbXVtIGhlaWdodCBzb21ld2hlcmU/KS4gSXQgc2VlbXMgYmV0dGVyIGluIHRoaXMgY2FzZSB0byBpbXBvc2UgYSA0MDBweCBoZWlnaHQgZGVmYXVsdCBmb3IgdGhlIHRhYmxlLCB3aGljaCB3ZSBjYW4gZG8gYnkgc2V0dGluZyBgZmxleC1iYXNpc2AgdG8gNDAwcHggKHRoZSB0YWJsZSBpcyBzdGlsbCBhbGxvd2VkIHRvIGdyb3cvc2hyaW5rIHdoZW4gdGhlIGNvbnRhaW5lciBoYXMgYW4gb3BpbmlvbmF0ZWQgaGVpZ2h0KS4KKi8KCi5odG1sLWZpbGwtY29udGFpbmVyID4gLmh0bWwtZmlsbC1pdGVtLmRhdGF0YWJsZXMgewogIGZsZXgtYmFzaXM6IDQwMHB4Owp9Cg==\" rel=\"stylesheet\" />\n",
       "<script title=\"datatables-binding\" src=\"data:application/javascript;base64,[encoded data, 82568 characters]\"></script>\n",
       "<script title=\"jquery\" src=\"data:application/javascript;base64,[encoded data, 119336 characters]\"></script>\n",
       "<script title=\"dt-core\" src=\"data:application/javascript;base64,[encoded data, 116140 characters]\"></script>\n",
       "<link href=\"data:text/css;charset-utf-8;base64,[encoded data, 30268 characters]\" rel=\"stylesheet\" />\n",
       "<link href=\"data:text/css;charset-utf-8;base64,LyogU2VsZWN0ZWQgcm93cy9jZWxscyAqLwp0YWJsZS5kYXRhVGFibGUgdHIuc2VsZWN0ZWQgdGQsIHRhYmxlLmRhdGFUYWJsZSB0ZC5zZWxlY3RlZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2IwYmVkOSAhaW1wb3J0YW50Owp9Ci8qIEluIGNhc2Ugb2Ygc2Nyb2xsWC9ZIG9yIEZpeGVkSGVhZGVyICovCi5kYXRhVGFibGVzX3Njcm9sbEJvZHkgLmRhdGFUYWJsZXNfc2l6aW5nIHsKICB2aXNpYmlsaXR5OiBoaWRkZW47Cn0KCi8qIFRoZSBkYXRhdGFibGVzJyB0aGVtZSBDU1MgZmlsZSBkb2Vzbid0IGRlZmluZQp0aGUgY29sb3IgYnV0IHdpdGggd2hpdGUgYmFja2dyb3VuZC4gSXQgbGVhZHMgdG8gYW4gaXNzdWUgdGhhdAp3aGVuIHRoZSBIVE1MJ3MgYm9keSBjb2xvciBpcyBzZXQgdG8gJ3doaXRlJywgdGhlIHVzZXIgY2FuJ3QKc2VlIHRoZSB0ZXh0IHNpbmNlIHRoZSBiYWNrZ3JvdW5kIGlzIHdoaXRlLiBPbmUgY2FzZSBoYXBwZW5zIGluIHRoZQpSU3R1ZGlvJ3MgSURFIHdoZW4gaW5saW5lIHZpZXdpbmcgdGhlIERUIHRhYmxlIGluc2lkZSBhbiBSbWQgZmlsZSwKaWYgdGhlIElERSB0aGVtZSBpcyBzZXQgdG8gIkNvYmFsdCIuCgpTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JzdHVkaW8vRFQvaXNzdWVzLzQ0NyBmb3IgbW9yZSBpbmZvCgpUaGlzIGZpeGVzIHNob3VsZCBoYXZlIGxpdHRsZSBzaWRlLWVmZmVjdHMgYmVjYXVzZSBhbGwgdGhlIG90aGVyIGVsZW1lbnRzCm9mIHRoZSBkZWZhdWx0IHRoZW1lIHVzZSB0aGUgIzMzMyBmb250IGNvbG9yLgoKVE9ETzogVGhlIHVwc3RyZWFtIG1heSB1c2UgcmVsYXRpdmUgY29sb3JzIGZvciBib3RoIHRoZSB0YWJsZSBiYWNrZ3JvdW5kCmFuZCB0aGUgY29sb3IuIEl0IG1lYW5zIHRoZSB0YWJsZSBjYW4gZGlzcGxheSB3ZWxsIHdpdGhvdXQgdGhpcyBwYXRjaAp0aGVuLiBBdCB0aGF0IHRpbWUsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBiZWxvdyBDU1MgYXR0cmlidXRlcy4KKi8KZGl2LmRhdGF0YWJsZXMgewogIGNvbG9yOiAjMzMzOwp9Cg==\" rel=\"stylesheet\" />\n",
       "<script title=\"crosstalk\" src=\"data:application/javascript;base64,[encoded data, 25236 characters]\"></script>\n",
       "<link href=\"data:text/css;charset-utf-8;base64,LmNvbnRhaW5lci1mbHVpZC5jcm9zc3RhbGstYnNjb2xze21hcmdpbi1sZWZ0Oi0zMHB4O21hcmdpbi1yaWdodDotMzBweDt3aGl0ZS1zcGFjZTpub3JtYWx9Ym9keT4uY29udGFpbmVyLWZsdWlkLmNyb3NzdGFsay1ic2NvbHN7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6YXV0b30uY3Jvc3N0YWxrLWlucHV0LWNoZWNrYm94Z3JvdXAgLmNyb3NzdGFsay1vcHRpb25zLWdyb3VwIC5jcm9zc3RhbGstb3B0aW9ucy1jb2x1bW57ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1yaWdodDoxMnB4O3ZlcnRpY2FsLWFsaWduOnRvcH1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KXsuY3Jvc3N0YWxrLWlucHV0LWNoZWNrYm94Z3JvdXAgLmNyb3NzdGFsay1vcHRpb25zLWdyb3VwIC5jcm9zc3RhbGstb3B0aW9ucy1jb2x1bW57ZGlzcGxheTpibG9jaztwYWRkaW5nLXJpZ2h0OmluaGVyaXR9fS5jcm9zc3RhbGstaW5wdXR7bWFyZ2luLWJvdHRvbToxNXB4fS5jcm9zc3RhbGstaW5wdXQgLmNvbnRyb2wtbGFiZWx7bWFyZ2luLWJvdHRvbTowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY3Jvc3N0YWxrLWlucHV0IGlucHV0W3R5cGU9ImNoZWNrYm94Il17bWFyZ2luOjRweCAwIDA7bWFyZ2luLXRvcDoxcHg7bGluZS1oZWlnaHQ6bm9ybWFsfS5jcm9zc3RhbGstaW5wdXQgLmNoZWNrYm94e3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDoxMHB4O21hcmdpbi1ib3R0b206MTBweH0uY3Jvc3N0YWxrLWlucHV0IC5jaGVja2JveD5sYWJlbHtwYWRkaW5nLWxlZnQ6MjBweDttYXJnaW4tYm90dG9tOjA7Zm9udC13ZWlnaHQ6NDAwO2N1cnNvcjpwb2ludGVyfS5jcm9zc3RhbGstaW5wdXQgLmNoZWNrYm94IGlucHV0W3R5cGU9ImNoZWNrYm94Il0sLmNyb3NzdGFsay1pbnB1dCAuY2hlY2tib3gtaW5saW5lIGlucHV0W3R5cGU9ImNoZWNrYm94Il17cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLXRvcDoycHg7bWFyZ2luLWxlZnQ6LTIwcHh9LmNyb3NzdGFsay1pbnB1dCAuY2hlY2tib3grLmNoZWNrYm94e21hcmdpbi10b3A6LTVweH0uY3Jvc3N0YWxrLWlucHV0IC5jaGVja2JveC1pbmxpbmV7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1sZWZ0OjIwcHg7bWFyZ2luLWJvdHRvbTowO2ZvbnQtd2VpZ2h0OjQwMDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Y3Vyc29yOnBvaW50ZXJ9LmNyb3NzdGFsay1pbnB1dCAuY2hlY2tib3gtaW5saW5lKy5jaGVja2JveC1pbmxpbmV7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjEwcHh9Cg==\" rel=\"stylesheet\" />\n",
       "\t</head>\n",
       "\t<body>\n",
       "\t\t<div class=\"datatables html-widget html-fill-item\" id=\"htmlwidget-a151bfbb00e4dedad71a\" style=\"width:100%;height:auto;\"></div>\n",
       "<script type=\"application/json\" data-for=\"htmlwidget-a151bfbb00e4dedad71a\">{\"x\":{\"filter\":\"none\",\"vertical\":false,\"data\":[[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\"],[\"GO:0003377\",\"GO:0006918\",\"GO:0006920\",\"GO:0006921\",\"GO:0006922\",\"GO:0006923\"],[\"obsolete regulation of apoptosis by sphingosine-1-phosphate signaling pathway\",\"obsolete induction of apoptosis by p53\",\"obsolete commitment to apoptosis\",\"cellular component disassembly involved in execution phase of apoptosis\",\"obsolete cleavage of lamin involved in execution phase of apoptosis\",\"obsolete cleavage of cytoskeletal proteins involved in execution phase of apoptosis\"]],\"container\":\"<table class=\\\"display\\\">\\n  <thead>\\n    <tr>\\n      <th> <\\/th>\\n      <th>subject<\\/th>\\n      <th>label<\\/th>\\n    <\\/tr>\\n  <\\/thead>\\n<\\/table>\",\"options\":{\"columnDefs\":[{\"orderable\":false,\"targets\":0},{\"name\":\" \",\"targets\":0},{\"name\":\"subject\",\"targets\":1},{\"name\":\"label\",\"targets\":2}],\"order\":[],\"autoWidth\":false,\"orderClasses\":false}},\"evals\":[],\"jsHooks\":[]}</script>\n",
       "\t</body>\n",
       "</html>\n"
      ],
      "text/plain": [
       "HTML widgets cannot be represented in plain text (need html)"
      ]
     },
     "metadata": {
      "text/html": {
       "isolated": true
      }
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "search_labels(goss, \"apoptosis\") |>\n",
    "  filter(grepl(\"^GO:\", subject)) |>\n",
    "  head() |>\n",
    "  datatable()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d6e7f8a9-b0c1-2345-defa-456789012345",
   "metadata": {},
   "source": [
    "Clearly it will be valuable to filter away obsolete terms. We will investigate the use of edge tables to accomplish this in a future vignette."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e7f8a9b0-c1d2-3456-efab-567890123456",
   "metadata": {},
   "source": [
    "# Transformation to ontology_index instances\n",
    "\n",
    "The [ontologyX suite](https://academic.oup.com/bioinformatics/article/33/7/1104/2843897) of Daniel Greene and colleagues provides very convenient ontology handling functions. We can transform the SQLite data to this format. We'll illustrate with cell ontology."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "f8a9b0c1-d2e3-4567-fabc-678901234567",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Connected to SemanticSQL database: /Users/vincentcarey/Library/Caches/org.R-project.R/R/BiocFileCache/235e3797d178_cl.db\n",
      "\n",
      "Primary ontology prefix: CL\n",
      "\n",
      "Warning message in ontologyIndex::ontology_index(name = nn, parents = pl):\n",
      "\"Some parent terms not found: BFO:0000002, BFO:0000004, SO:0000704 (15 more)\"\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Ontology with 18603 terms\n",
       "\n",
       "Properties:\n",
       "\tid: character\n",
       "\tname: list\n",
       "\tparents: list\n",
       "\tchildren: list\n",
       "\tancestors: list\n",
       "\tobsolete: logical\n",
       "Roots:\n",
       "\tUBERON:0000105 - life cycle stage\n",
       "\tGO:0008150 - biological_process\n",
       "\tGO:0003674 - molecular_function\n",
       "\tUBERON:0000465 - material anatomical entity\n",
       "\tUBERON:0000466 - immaterial anatomical entity\n",
       "\tGO:0005575 - cellular_component\n",
       "\tPATO:0000001 - quality\n",
       "\tPR:000010543 - myeloperoxidase\n",
       "\tIAO:0000027 - data entity\n",
       "\tPR:000001338 - complement receptor type 2\n",
       " ... 876 more"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "clss <- semsql_connect(ontology = \"cl\")\n",
    "cloi <- semsql_to_oi(clss@con)\n",
    "cloi"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a9b0c1d2-e3f4-5678-abcd-789012345678",
   "metadata": {},
   "source": [
    "A convenience function assists with visualizations:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "b0c1d2e3-f4a5-6789-bcde-890123456789",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\neNzQyTOturVZQ2jg7D2P6LUNtW/iDi5RpShbniwkCKLdvpz083BEmuRX+OlpJP6ijYSnB5cR\nrT5eOngNAWgTFHYAh/f7fkCSa68xPv2dvH046r/xFkF8U9ghNY+nzE93K/CbRCIb+b4hPhZ2\nOr++/NT04dhshCb5ve1449+IdVNB5El737TckPmXPok0wSufIBoibRSQvNX1T98SRNPNDQqI\n6vKEIFp98jafW0ohzThW9emO7wKMEbI82dj+8++ssGPGOAxB/Zaeq/10w5vdxkhyxZUm4sXP\nw5DEzJDiTw2sxK1aSOanK00EFHZ8olVhRzH0yfvUlOs9EZHmnmwgiDYKO6SzPYH16Z73tih+\nKpsIgiAaTy8iISP/QoIgOnoLddbj2i3sSFP8330Vct6pRoIg6H6ThCjjd2a1PDf6HkOS8Kyj\npUR7hV3XPhm+1lLYEc23Ng5A4svO17Gf2EOHQUh69fWGj7sgTw16//EhUVsUETLy/VRUvdym\nhfpZ3yAIdmGHJnjltLw6L34ejkTnnqzq8Jmm/zOaJDz9UMtrStRdXCGFhrjHddSXn2/TQmST\n/R8flP7HKCQ880j5p2f06eOlo9cQgDbBoViAg8Lmh0RtyBwKYtaX0tOe3bwU8xaxWG0dX5A2\nNTdoeZcOnjp1GCv+afzHM61Fx48f9alJTFZWFFVUVHRr42xaU6cOaflDc8Z0deLF8xcEig8P\nLxH6weJHqU9NwiamxiR6TMyb1hsQWnKWwbppJY1YDRWFGQn3z93LQh3usVOpt28XoMkzZkh+\numGIczRRe2qecHZ4eAYysLBQ/NRA0jM1ka2KiXnV850BrjZ08mSVT/+Wl5dHRGVl28fehfTH\n6ZE+/TE1qJiI36qKiKbqd9lJ0WduJRMf35KdvYU66nHthxw/XvnTv2VlZRFRUVGJUGVkeCxj\n+CwLjc/3MzXVaI6JedruhrrbeVu9BFMXzu3/IeLK7SaEEHp2+epbmXmLfxT92DpEX//TioHi\n4uKon7b2oI9/ioiIoJqamk+bUTM3V/v0b5L+VFPZxqdPkzp6psW3I5OICXPntrymSMLUdDwq\niImht9+X0diFC1VZ0VeulSGEUM7ly8lC5osX9G/1lHrwGgKBB1fFAixqXob8tj3gUnR6tQxV\nU019QFl7PzHkFRRIn/+SlpZGzfX1H09eERMXJ31154/fAO1v/PJqIcuT7HNpkPn+iju2CCHU\n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",
      "text/plain": [
       "plot without title"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 420,
       "width": 420
      }
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "onto_plot2(cloi, c(\"CL:0000624\", \"CL:0000492\", \"CL:0000793\", \"CL:0000803\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c1d2e3f4-a5b6-7890-cdef-901234567890",
   "metadata": {},
   "source": [
    "# Background\n",
    "\n",
    "The S7 class design in this package was initiated by a request to Anthropic Claude to use S7 in establishing code that mirrors the tasks accomplished in the [INCAtools jupyter notebook](https://github.com/INCATools/semantic-sql/blob/main/notebooks/SemanticSQL-Tutorial.ipynb).\n",
    "\n",
    "## Searching in label text\n",
    "\n",
    "The code of `search_labels` is:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "d2e3f4a5-b6c7-8901-defa-012345678901",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "0/0 packages newly attached/loaded, see sessionInfo() for details.\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<S7_method> method(search_labels, ontoProc2::SemsqlConn)\n",
      "function (x, pattern, limit = 20L) \n",
      "{\n",
      "    dbGetQuery(x@con, \"SELECT subject, value AS label FROM rdfs_label_statement\\n      WHERE value LIKE ? LIMIT ?\", \n",
      "        param = list(paste0(\"%\", pattern, \"%\"), as.integer(limit)))\n",
      "}\n",
      "<environment: namespace:ontoProc2>\n"
     ]
    }
   ],
   "source": [
    "library(S7)\n",
    "print(S7::method(search_labels, SemsqlConn))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e3f4a5b6-c7d8-9012-efab-123456789012",
   "metadata": {},
   "source": [
    "## Exploring concept properties with 'edge tables'\n",
    "\n",
    "The INCAtools notebook discusses the fact that `rdfs_label_statement` is a SQLite table \"view\".\n",
    "\n",
    "The notebook indicates that a SPARQL query on an RDF store for the following computation would be \"quite hard\". We want to find all the \"edges\" leading from \"enteric neuron\", which would constitute the set of subject-predicate-object statements about this cell type with \"enteric neuron\" as subject.\n",
    "\n",
    "In this code we use the concept of a \"CURIE\" (Compact Uniform Resource Identifier): a fixed length numerical identifier with a prefix indicating the source ontology in which the ontologic concept is based."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "f4a5b6c7-d8e9-0123-fabc-234567890123",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<strong>subject:</strong> 'CL:0007011'"
      ],
      "text/latex": [
       "\\textbf{subject:} 'CL:0007011'"
      ],
      "text/markdown": [
       "**subject:** 'CL:0007011'"
      ],
      "text/plain": [
       "     subject \n",
       "\"CL:0007011\" "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<table class=\"dataframe\">\n",
       "<caption>A data.frame: 7 × 6</caption>\n",
       "<thead>\n",
       "\t<tr><th scope=col>subject</th><th scope=col>subject_label</th><th scope=col>predicate</th><th scope=col>predicate_label</th><th scope=col>object</th><th scope=col>object_label</th></tr>\n",
       "\t<tr><th scope=col>&lt;chr&gt;</th><th scope=col>&lt;chr&gt;</th><th scope=col>&lt;chr&gt;</th><th scope=col>&lt;chr&gt;</th><th scope=col>&lt;chr&gt;</th><th scope=col>&lt;chr&gt;</th></tr>\n",
       "</thead>\n",
       "<tbody>\n",
       "\t<tr><td>CL:0007011</td><td>enteric neuron</td><td>BFO:0000050    </td><td>part of          </td><td>UBERON:0002005</td><td>enteric nervous system             </td></tr>\n",
       "\t<tr><td>CL:0007011</td><td>enteric neuron</td><td>BFO:0000050    </td><td>part of          </td><td>UBERON:0002005</td><td>enteric nervous system             </td></tr>\n",
       "\t<tr><td>CL:0007011</td><td>enteric neuron</td><td>RO:0002100     </td><td>has soma location</td><td>UBERON:0002005</td><td>enteric nervous system             </td></tr>\n",
       "\t<tr><td>CL:0007011</td><td>enteric neuron</td><td>RO:0002100     </td><td>has soma location</td><td>UBERON:0002005</td><td>enteric nervous system             </td></tr>\n",
       "\t<tr><td>CL:0007011</td><td>enteric neuron</td><td>RO:0002202     </td><td>develops from    </td><td>CL:0002607    </td><td>migratory enteric neural crest cell</td></tr>\n",
       "\t<tr><td>CL:0007011</td><td>enteric neuron</td><td>rdfs:subClassOf</td><td>NA               </td><td>CL:0000029    </td><td>neural crest derived neuron        </td></tr>\n",
       "\t<tr><td>CL:0007011</td><td>enteric neuron</td><td>rdfs:subClassOf</td><td>NA               </td><td>CL:0000107    </td><td>autonomic neuron                   </td></tr>\n",
       "</tbody>\n",
       "</table>\n"
      ],
      "text/latex": [
       "A data.frame: 7 × 6\n",
       "\\begin{tabular}{llllll}\n",
       " subject & subject\\_label & predicate & predicate\\_label & object & object\\_label\\\\\n",
       " <chr> & <chr> & <chr> & <chr> & <chr> & <chr>\\\\\n",
       "\\hline\n",
       "\t CL:0007011 & enteric neuron & BFO:0000050     & part of           & UBERON:0002005 & enteric nervous system             \\\\\n",
       "\t CL:0007011 & enteric neuron & BFO:0000050     & part of           & UBERON:0002005 & enteric nervous system             \\\\\n",
       "\t CL:0007011 & enteric neuron & RO:0002100      & has soma location & UBERON:0002005 & enteric nervous system             \\\\\n",
       "\t CL:0007011 & enteric neuron & RO:0002100      & has soma location & UBERON:0002005 & enteric nervous system             \\\\\n",
       "\t CL:0007011 & enteric neuron & RO:0002202      & develops from     & CL:0002607     & migratory enteric neural crest cell\\\\\n",
       "\t CL:0007011 & enteric neuron & rdfs:subClassOf & NA                & CL:0000029     & neural crest derived neuron        \\\\\n",
       "\t CL:0007011 & enteric neuron & rdfs:subClassOf & NA                & CL:0000107     & autonomic neuron                   \\\\\n",
       "\\end{tabular}\n"
      ],
      "text/markdown": [
       "\n",
       "A data.frame: 7 × 6\n",
       "\n",
       "| subject &lt;chr&gt; | subject_label &lt;chr&gt; | predicate &lt;chr&gt; | predicate_label &lt;chr&gt; | object &lt;chr&gt; | object_label &lt;chr&gt; |\n",
       "|---|---|---|---|---|---|\n",
       "| CL:0007011 | enteric neuron | BFO:0000050     | part of           | UBERON:0002005 | enteric nervous system              |\n",
       "| CL:0007011 | enteric neuron | BFO:0000050     | part of           | UBERON:0002005 | enteric nervous system              |\n",
       "| CL:0007011 | enteric neuron | RO:0002100      | has soma location | UBERON:0002005 | enteric nervous system              |\n",
       "| CL:0007011 | enteric neuron | RO:0002100      | has soma location | UBERON:0002005 | enteric nervous system              |\n",
       "| CL:0007011 | enteric neuron | RO:0002202      | develops from     | CL:0002607     | migratory enteric neural crest cell |\n",
       "| CL:0007011 | enteric neuron | rdfs:subClassOf | NA                | CL:0000029     | neural crest derived neuron         |\n",
       "| CL:0007011 | enteric neuron | rdfs:subClassOf | NA                | CL:0000107     | autonomic neuron                    |\n",
       "\n"
      ],
      "text/plain": [
       "  subject    subject_label  predicate       predicate_label   object        \n",
       "1 CL:0007011 enteric neuron BFO:0000050     part of           UBERON:0002005\n",
       "2 CL:0007011 enteric neuron BFO:0000050     part of           UBERON:0002005\n",
       "3 CL:0007011 enteric neuron RO:0002100      has soma location UBERON:0002005\n",
       "4 CL:0007011 enteric neuron RO:0002100      has soma location UBERON:0002005\n",
       "5 CL:0007011 enteric neuron RO:0002202      develops from     CL:0002607    \n",
       "6 CL:0007011 enteric neuron rdfs:subClassOf NA                CL:0000029    \n",
       "7 CL:0007011 enteric neuron rdfs:subClassOf NA                CL:0000107    \n",
       "  object_label                       \n",
       "1 enteric nervous system             \n",
       "2 enteric nervous system             \n",
       "3 enteric nervous system             \n",
       "4 enteric nervous system             \n",
       "5 migratory enteric neural crest cell\n",
       "6 neural crest derived neuron        \n",
       "7 autonomic neuron                   "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "if (!is_connected(clss)) clss <- reconnect(clss)\n",
    "entcurie <- search_labels(clss, \"enteric neuron\") |>\n",
    "  filter(grepl(\"^CL\", subject)) |>\n",
    "  dplyr::select(subject) |>\n",
    "  unlist()\n",
    "entcurie\n",
    "get_direct_edges(clss, entcurie)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a5b6c7d8-e9f0-1234-abcd-345678901234",
   "metadata": {},
   "source": [
    "Here the underlying code is performing a join:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "b6c7d8e9-f0a1-2345-bcde-456789012345",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<S7_method> method(get_direct_edges, ontoProc2::SemsqlConn)\n",
      "function (x, term_id, direction = c(\"outgoing\", \"incoming\", \"both\")) \n",
      "{\n",
      "    direction = match.arg(direction)\n",
      "    query.init <- \"SELECT\\n      e.subject,\\n      sl.value AS subject_label,\\n      e.predicate,\\n      pl.value AS predicate_label,\\n      e.object,\\n      ol.value AS object_label\\n    FROM edge e\\n    LEFT JOIN rdfs_label_statement sl ON e.subject = sl.subject\\n    LEFT JOIN rdfs_label_statement pl ON e.predicate = pl.subject\\n    LEFT JOIN rdfs_label_statement ol ON e.object = ol.subject\\n    WHERE\"\n",
      "    if (direction == \"outgoing\") {\n",
      "        query.fin <- \"e.subject = ?\"\n",
      "        query = paste(query.init, query.fin)\n",
      "        return(dbGetQuery(x@con, query, param = list(term_id)))\n",
      "    }\n",
      "    else if (direction == \"incoming\") {\n",
      "        query.fin <- \"e.object = ?\"\n",
      "        query = paste(query.init, query.fin)\n",
      "        return(dbGetQuery(x@con, query, param = list(term_id)))\n",
      "    }\n",
      "    else if (direction == \"both\") {\n",
      "        query.fin <- \"e.subject = ? OR e.object = ?\"\n",
      "        query = paste(query.init, query.fin)\n",
      "        return(dbGetQuery(x@con, query, param = list(term_id, \n",
      "            term_id)))\n",
      "    }\n",
      "}\n",
      "<environment: namespace:ontoProc2>\n"
     ]
    }
   ],
   "source": [
    "print(S7::method(get_direct_edges, SemsqlConn))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c7d8e9f0-a1b2-3456-cdef-567890123456",
   "metadata": {},
   "source": [
    "## Generalizing a concept: Ancestors\n",
    "\n",
    "The notebook mentions that the \"entailed edges\" table includes all statements that can be inferred from the application of base axioms of the ontology."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "d8e9f0a1-b2c3-4567-defa-678901234567",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"dataframe\">\n",
       "<caption>A data.frame: 16 × 3</caption>\n",
       "<thead>\n",
       "\t<tr><th></th><th scope=col>id</th><th scope=col>label</th><th scope=col>predicate</th></tr>\n",
       "\t<tr><th></th><th scope=col>&lt;chr&gt;</th><th scope=col>&lt;chr&gt;</th><th scope=col>&lt;chr&gt;</th></tr>\n",
       "</thead>\n",
       "<tbody>\n",
       "\t<tr><th scope=row>1</th><td>BFO:0000002   </td><td>NA                              </td><td>rdfs:subClassOf</td></tr>\n",
       "\t<tr><th scope=row>2</th><td>BFO:0000004   </td><td>NA                              </td><td>rdfs:subClassOf</td></tr>\n",
       "\t<tr><th scope=row>3</th><td>BFO:0000040   </td><td>NA                              </td><td>rdfs:subClassOf</td></tr>\n",
       "\t<tr><th scope=row>4</th><td>UBERON:0001062</td><td>anatomical entity               </td><td>rdfs:subClassOf</td></tr>\n",
       "\t<tr><th scope=row>5</th><td>UBERON:0000061</td><td>anatomical structure            </td><td>rdfs:subClassOf</td></tr>\n",
       "\t<tr><th scope=row>6</th><td>CL:0000107    </td><td>autonomic neuron                </td><td>rdfs:subClassOf</td></tr>\n",
       "\t<tr><th scope=row>7</th><td>CL:0000000    </td><td>cell                            </td><td>rdfs:subClassOf</td></tr>\n",
       "\t<tr><th scope=row>8</th><td>CL:0000211    </td><td>electrically active cell        </td><td>rdfs:subClassOf</td></tr>\n",
       "\t<tr><th scope=row>9</th><td>CL:0000393    </td><td>electrically responsive cell    </td><td>rdfs:subClassOf</td></tr>\n",
       "\t<tr><th scope=row>10</th><td>CL:0000404    </td><td>electrically signaling cell     </td><td>rdfs:subClassOf</td></tr>\n",
       "\t<tr><th scope=row>12</th><td>CL:0000255    </td><td>eukaryotic cell                 </td><td>rdfs:subClassOf</td></tr>\n",
       "\t<tr><th scope=row>13</th><td>UBERON:0000465</td><td>material anatomical entity      </td><td>rdfs:subClassOf</td></tr>\n",
       "\t<tr><th scope=row>14</th><td>CL:0002319    </td><td>neural cell                     </td><td>rdfs:subClassOf</td></tr>\n",
       "\t<tr><th scope=row>15</th><td>CL:0000029    </td><td>neural crest derived neuron     </td><td>rdfs:subClassOf</td></tr>\n",
       "\t<tr><th scope=row>16</th><td>CL:0000540    </td><td>neuron                          </td><td>rdfs:subClassOf</td></tr>\n",
       "\t<tr><th scope=row>17</th><td>CL:2000032    </td><td>peripheral nervous system neuron</td><td>rdfs:subClassOf</td></tr>\n",
       "</tbody>\n",
       "</table>\n"
      ],
      "text/latex": [
       "A data.frame: 16 × 3\n",
       "\\begin{tabular}{r|lll}\n",
       "  & id & label & predicate\\\\\n",
       "  & <chr> & <chr> & <chr>\\\\\n",
       "\\hline\n",
       "\t1 & BFO:0000002    & NA                               & rdfs:subClassOf\\\\\n",
       "\t2 & BFO:0000004    & NA                               & rdfs:subClassOf\\\\\n",
       "\t3 & BFO:0000040    & NA                               & rdfs:subClassOf\\\\\n",
       "\t4 & UBERON:0001062 & anatomical entity                & rdfs:subClassOf\\\\\n",
       "\t5 & UBERON:0000061 & anatomical structure             & rdfs:subClassOf\\\\\n",
       "\t6 & CL:0000107     & autonomic neuron                 & rdfs:subClassOf\\\\\n",
       "\t7 & CL:0000000     & cell                             & rdfs:subClassOf\\\\\n",
       "\t8 & CL:0000211     & electrically active cell         & rdfs:subClassOf\\\\\n",
       "\t9 & CL:0000393     & electrically responsive cell     & rdfs:subClassOf\\\\\n",
       "\t10 & CL:0000404     & electrically signaling cell      & rdfs:subClassOf\\\\\n",
       "\t12 & CL:0000255     & eukaryotic cell                  & rdfs:subClassOf\\\\\n",
       "\t13 & UBERON:0000465 & material anatomical entity       & rdfs:subClassOf\\\\\n",
       "\t14 & CL:0002319     & neural cell                      & rdfs:subClassOf\\\\\n",
       "\t15 & CL:0000029     & neural crest derived neuron      & rdfs:subClassOf\\\\\n",
       "\t16 & CL:0000540     & neuron                           & rdfs:subClassOf\\\\\n",
       "\t17 & CL:2000032     & peripheral nervous system neuron & rdfs:subClassOf\\\\\n",
       "\\end{tabular}\n"
      ],
      "text/markdown": [
       "\n",
       "A data.frame: 16 × 3\n",
       "\n",
       "| <!--/--> | id &lt;chr&gt; | label &lt;chr&gt; | predicate &lt;chr&gt; |\n",
       "|---|---|---|---|\n",
       "| 1 | BFO:0000002    | NA                               | rdfs:subClassOf |\n",
       "| 2 | BFO:0000004    | NA                               | rdfs:subClassOf |\n",
       "| 3 | BFO:0000040    | NA                               | rdfs:subClassOf |\n",
       "| 4 | UBERON:0001062 | anatomical entity                | rdfs:subClassOf |\n",
       "| 5 | UBERON:0000061 | anatomical structure             | rdfs:subClassOf |\n",
       "| 6 | CL:0000107     | autonomic neuron                 | rdfs:subClassOf |\n",
       "| 7 | CL:0000000     | cell                             | rdfs:subClassOf |\n",
       "| 8 | CL:0000211     | electrically active cell         | rdfs:subClassOf |\n",
       "| 9 | CL:0000393     | electrically responsive cell     | rdfs:subClassOf |\n",
       "| 10 | CL:0000404     | electrically signaling cell      | rdfs:subClassOf |\n",
       "| 12 | CL:0000255     | eukaryotic cell                  | rdfs:subClassOf |\n",
       "| 13 | UBERON:0000465 | material anatomical entity       | rdfs:subClassOf |\n",
       "| 14 | CL:0002319     | neural cell                      | rdfs:subClassOf |\n",
       "| 15 | CL:0000029     | neural crest derived neuron      | rdfs:subClassOf |\n",
       "| 16 | CL:0000540     | neuron                           | rdfs:subClassOf |\n",
       "| 17 | CL:2000032     | peripheral nervous system neuron | rdfs:subClassOf |\n",
       "\n"
      ],
      "text/plain": [
       "   id             label                            predicate      \n",
       "1  BFO:0000002    NA                               rdfs:subClassOf\n",
       "2  BFO:0000004    NA                               rdfs:subClassOf\n",
       "3  BFO:0000040    NA                               rdfs:subClassOf\n",
       "4  UBERON:0001062 anatomical entity                rdfs:subClassOf\n",
       "5  UBERON:0000061 anatomical structure             rdfs:subClassOf\n",
       "6  CL:0000107     autonomic neuron                 rdfs:subClassOf\n",
       "7  CL:0000000     cell                             rdfs:subClassOf\n",
       "8  CL:0000211     electrically active cell         rdfs:subClassOf\n",
       "9  CL:0000393     electrically responsive cell     rdfs:subClassOf\n",
       "10 CL:0000404     electrically signaling cell      rdfs:subClassOf\n",
       "12 CL:0000255     eukaryotic cell                  rdfs:subClassOf\n",
       "13 UBERON:0000465 material anatomical entity       rdfs:subClassOf\n",
       "14 CL:0002319     neural cell                      rdfs:subClassOf\n",
       "15 CL:0000029     neural crest derived neuron      rdfs:subClassOf\n",
       "16 CL:0000540     neuron                           rdfs:subClassOf\n",
       "17 CL:2000032     peripheral nervous system neuron rdfs:subClassOf"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "get_ancestors(clss, entcurie)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e9f0a1b2-c3d4-5678-efab-789012345678",
   "metadata": {},
   "source": [
    "## Working with multiple ontologies\n",
    "\n",
    "The INCAtools notebook includes an example of finding all neurons that are part of the forebrain. This involves identifying CURIEs for relations and anatomical structures, thus working with the relational ontology (RO) and UBERON."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "f0a1b2c3-d4e5-6789-fabc-890123456789",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Connected to SemanticSQL database: /Users/vincentcarey/Library/Caches/org.R-project.R/R/BiocFileCache/40e22de1c3cc_uberon.db\n",
      "\n",
      "Primary ontology prefix: UBERON\n",
      "\n",
      "Connected to SemanticSQL database: /Users/vincentcarey/Library/Caches/org.R-project.R/R/BiocFileCache/53b7a3ff554_ro.db\n",
      "\n",
      "Primary ontology prefix: RO\n",
      "\n"
     ]
    }
   ],
   "source": [
    "ub <- semsql_connect(ontology = \"uberon\")\n",
    "ro <- semsql_connect(ontology = \"ro\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a1b2c3d4-e5f6-7890-abcd-901234567890",
   "metadata": {},
   "source": [
    "First question: What's the CURIE for \"forebrain\" in UBERON?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "b2c3d4e5-f6a7-8901-bcde-012345678901",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<strong>subject:</strong> 'UBERON:0001890'"
      ],
      "text/latex": [
       "\\textbf{subject:} 'UBERON:0001890'"
      ],
      "text/markdown": [
       "**subject:** 'UBERON:0001890'"
      ],
      "text/plain": [
       "         subject \n",
       "\"UBERON:0001890\" "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fbcur <- search_labels(ub, \"forebrain\", limit = 1000) |>\n",
    "  filter(label == \"forebrain\") |>\n",
    "  select(subject) |>\n",
    "  unlist()\n",
    "fbcur"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4404adb8",
   "metadata": {},
   "source": [
    "Second question: What's the CURIE for \"has soma location\" in RO?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "6d840b52",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<strong>subject:</strong> 'RO:0002100'"
      ],
      "text/latex": [
       "\\textbf{subject:} 'RO:0002100'"
      ],
      "text/markdown": [
       "**subject:** 'RO:0002100'"
      ],
      "text/plain": [
       "     subject \n",
       "\"RO:0002100\" "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "loccur <- search_labels(ro, \"has soma location\") |>\n",
    "  select(subject) |>\n",
    "  unlist()\n",
    "loccur"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a1ecba23",
   "metadata": {},
   "source": [
    "What's the CURIE for \"neuron\"?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "462c7f8c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<strong>subject:</strong> 'CL:0000540'"
      ],
      "text/latex": [
       "\\textbf{subject:} 'CL:0000540'"
      ],
      "text/markdown": [
       "**subject:** 'CL:0000540'"
      ],
      "text/plain": [
       "     subject \n",
       "\"CL:0000540\" "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ncur <- search_labels(clss, \"neuron\", limit = 1000) |>\n",
    "  filter(label == \"neuron\") |>\n",
    "  select(subject) |>\n",
    "  unlist()\n",
    "ncur"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "388933a9",
   "metadata": {},
   "source": [
    "Now we use three steps to obtain the solution.\n",
    "\n",
    "First, enumerate all cell types that are located in forebrain."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "0dcfbe2b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "186"
      ],
      "text/latex": [
       "186"
      ],
      "text/markdown": [
       "186"
      ],
      "text/plain": [
       "[1] 186"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "clinfb <- tbl(clss@con, \"entailed_edge\") |>\n",
    "  filter(predicate == loccur, object == fbcur) |>\n",
    "  select(subject) |>\n",
    "  collect() |>\n",
    "  unlist()\n",
    "length(clinfb)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a7a5da13",
   "metadata": {},
   "source": [
    "Second, filter these to those identified as 'subclassOf' \"neuron\"."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "1ae6d4bb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "186"
      ],
      "text/latex": [
       "186"
      ],
      "text/markdown": [
       "186"
      ],
      "text/plain": [
       "[1] 186"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "clisneur <- tbl(clss@con, \"entailed_edge\") |>\n",
    "  filter(predicate == \"rdfs:subClassOf\", object == ncur) |>\n",
    "  filter(subject %in% clinfb) |>\n",
    "  select(subject) |>\n",
    "  collect() |>\n",
    "  unlist()\n",
    "length(clisneur)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "69538feb",
   "metadata": {},
   "source": [
    "Finally, get the labels."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "05176cc3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<!doctype html>\n",
       "<html>\n",
       "\t<head>\n",
       "\t\t<meta charset=\"utf-8\">\n",
       "\t\t<link href=\"data:text/css;charset-utf-8;base64,QGxheWVyIGh0bWx0b29scyB7CiAgLmh0bWwtZmlsbC1jb250YWluZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAvKiBQcmV2ZW50IHRoZSBjb250YWluZXIgZnJvbSBleHBhbmRpbmcgdmVydGljYWxseSBvciBob3Jpem9udGFsbHkgYmV5b25kIGl0cwogICAgcGFyZW50J3MgY29uc3RyYWludHMuICovCiAgICBtaW4taGVpZ2h0OiAwOwogICAgbWluLXdpZHRoOiAwOwogIH0KICAuaHRtbC1maWxsLWNvbnRhaW5lciA+IC5odG1sLWZpbGwtaXRlbSB7CiAgICAvKiBGaWxsIGl0ZW1zIGNhbiBncm93IGFuZCBzaHJpbmsgZnJlZWx5IHdpdGhpbgogICAgYXZhaWxhYmxlIHZlcnRpY2FsIHNwYWNlIGluIGZpbGxhYmxlIGNvbnRhaW5lciAqLwogICAgZmxleDogMSAxIGF1dG87CiAgICBtaW4taGVpZ2h0OiAwOwogICAgbWluLXdpZHRoOiAwOwogIH0KICAuaHRtbC1maWxsLWNvbnRhaW5lciA+IDpub3QoLmh0bWwtZmlsbC1pdGVtKSB7CiAgICAvKiBQcmV2ZW50IHNocmlua2luZyBvciBncm93aW5nIG9mIG5vbi1maWxsIGl0ZW1zICovCiAgICBmbGV4OiAwIDAgYXV0bzsKICB9Cn0K\" rel=\"stylesheet\" />\n",
       "<script title=\"htmlwidgets\" src=\"data:application/javascript;base64,[encoded data, 44256 characters]\"></script>\n",
       "<link href=\"data:text/css;charset-utf-8;base64,LmR0LWNyb3NzdGFsay1mYWRlIHsKICBvcGFjaXR5OiAwLjI7Cn0KCmh0bWwgYm9keSBkaXYuRFRTIGRpdi5kYXRhVGFibGVzX3Njcm9sbEJvZHkgewogIGJhY2tncm91bmQ6IG5vbmU7Cn0KCgovKgpGaXggaHR0cHM6Ly9naXRodWIuY29tL3JzdHVkaW8vRFQvaXNzdWVzLzU2MwpJZiB0aGUgYHRhYmxlLmRpc3BsYXlgIGlzIHNldCB0byAiYmxvY2siIChlLmcuLCBwa2dkb3duKSwgdGhlIGJyb3dzZXIgd2lsbCBkaXNwbGF5CmRhdGF0YWJsZSBvYmplY3RzIHN0cmFuZ2VseS4gVGhlIHNlYXJjaCBwYW5lbCBhbmQgdGhlIHBhZ2UgYnV0dG9ucyB3aWxsIHN0aWxsIGJlCmluIGZ1bGwtd2lkdGggYnV0IHRoZSB0YWJsZSBib2R5IHdpbGwgYmUgImNvbXBhY3QiIGFuZCBzaG9ydGVyLgpJbiB0aGVyb3J5LCBoYXZpbmcgdGhpcyBhdHRyaWJ1dGVzIHdpbGwgYWZmZWN0IGBkb209InQiYAp3aXRoIGBkaXNwbGF5OiBibG9ja2AgdXNlcnMuIEJ1dCBpbiByZWFsaXR5LCB0aGVyZSBzaG91bGQgYmUgbm8gb25lLgpXZSBtYXkgcmVtb3ZlIHRoZSBiZWxvdyBsaW5lcyBpbiB0aGUgZnV0dXJlIGlmIHRoZSB1cHN0cmVhbSBhZ3JlZSB0byBoYXZlIHRoaXMgdGhlcmUuClNlZSBodHRwczovL2dpdGh1Yi5jb20vRGF0YVRhYmxlcy9EYXRhVGFibGVzU3JjL2lzc3Vlcy8xNjAKKi8KCnRhYmxlLmRhdGFUYWJsZSB7CiAgZGlzcGxheTogdGFibGU7Cn0KCgovKgpXaGVuIERUT3V0cHV0KGZpbGwgPSBUUlVFKSwgaXQgcmVjZWl2ZXMgYSAuaHRtbC1maWxsLWl0ZW0gY2xhc3MgKHZpYSBodG1sdG9vbHM6OmJpbmRGaWxsUm9sZSgpKSwgd2hpY2ggZWZmZWN0aXZlbHkgYW1vdW50cyB0byBgZmxleDogMSAxIGF1dG9gLiBUaGF0J3MgbW9zdGx5IGZpbmUsIGJ1dCB0aGUgY2FzZSB3aGVyZSBgZmlsbENvbnRhaW5lcj1UUlVFYCtgaGVpZ2h0OmF1dG9gK2BmbGV4LWJhc2lzOmF1dG9gIGFuZCB0aGUgY29udGFpbmVyIChlLmcuLCBhIGJzbGliOjpjYXJkKCkpIGRvZXNuJ3QgaGF2ZSBhIGRlZmluZWQgaGVpZ2h0IGlzIGEgYml0IHByb2JsZW1hdGljIHNpbmNlIHRoZSB0YWJsZSB3YW50cyB0byBmaXQgdGhlIHBhcmVudCBidXQgdGhlIHBhcmVudCB3YW50cyB0byBmaXQgdGhlIHRhYmxlLCB3aGljaCByZXN1bHRzIHByZXR0eSBzbWFsbCB0YWJsZSBoZWlnaHQgKG1heWJlIGJlY2F1c2UgdGhlcmUgaXMgYSBtaW5pbXVtIGhlaWdodCBzb21ld2hlcmU/KS4gSXQgc2VlbXMgYmV0dGVyIGluIHRoaXMgY2FzZSB0byBpbXBvc2UgYSA0MDBweCBoZWlnaHQgZGVmYXVsdCBmb3IgdGhlIHRhYmxlLCB3aGljaCB3ZSBjYW4gZG8gYnkgc2V0dGluZyBgZmxleC1iYXNpc2AgdG8gNDAwcHggKHRoZSB0YWJsZSBpcyBzdGlsbCBhbGxvd2VkIHRvIGdyb3cvc2hyaW5rIHdoZW4gdGhlIGNvbnRhaW5lciBoYXMgYW4gb3BpbmlvbmF0ZWQgaGVpZ2h0KS4KKi8KCi5odG1sLWZpbGwtY29udGFpbmVyID4gLmh0bWwtZmlsbC1pdGVtLmRhdGF0YWJsZXMgewogIGZsZXgtYmFzaXM6IDQwMHB4Owp9Cg==\" rel=\"stylesheet\" />\n",
       "<script title=\"datatables-binding\" src=\"data:application/javascript;base64,[encoded data, 82568 characters]\"></script>\n",
       "<script title=\"jquery\" src=\"data:application/javascript;base64,[encoded data, 119336 characters]\"></script>\n",
       "<script title=\"dt-core\" src=\"data:application/javascript;base64,[encoded data, 116140 characters]\"></script>\n",
       "<link href=\"data:text/css;charset-utf-8;base64,[encoded data, 30268 characters]\" rel=\"stylesheet\" />\n",
       "<link href=\"data:text/css;charset-utf-8;base64,LyogU2VsZWN0ZWQgcm93cy9jZWxscyAqLwp0YWJsZS5kYXRhVGFibGUgdHIuc2VsZWN0ZWQgdGQsIHRhYmxlLmRhdGFUYWJsZSB0ZC5zZWxlY3RlZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2IwYmVkOSAhaW1wb3J0YW50Owp9Ci8qIEluIGNhc2Ugb2Ygc2Nyb2xsWC9ZIG9yIEZpeGVkSGVhZGVyICovCi5kYXRhVGFibGVzX3Njcm9sbEJvZHkgLmRhdGFUYWJsZXNfc2l6aW5nIHsKICB2aXNpYmlsaXR5OiBoaWRkZW47Cn0KCi8qIFRoZSBkYXRhdGFibGVzJyB0aGVtZSBDU1MgZmlsZSBkb2Vzbid0IGRlZmluZQp0aGUgY29sb3IgYnV0IHdpdGggd2hpdGUgYmFja2dyb3VuZC4gSXQgbGVhZHMgdG8gYW4gaXNzdWUgdGhhdAp3aGVuIHRoZSBIVE1MJ3MgYm9keSBjb2xvciBpcyBzZXQgdG8gJ3doaXRlJywgdGhlIHVzZXIgY2FuJ3QKc2VlIHRoZSB0ZXh0IHNpbmNlIHRoZSBiYWNrZ3JvdW5kIGlzIHdoaXRlLiBPbmUgY2FzZSBoYXBwZW5zIGluIHRoZQpSU3R1ZGlvJ3MgSURFIHdoZW4gaW5saW5lIHZpZXdpbmcgdGhlIERUIHRhYmxlIGluc2lkZSBhbiBSbWQgZmlsZSwKaWYgdGhlIElERSB0aGVtZSBpcyBzZXQgdG8gIkNvYmFsdCIuCgpTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JzdHVkaW8vRFQvaXNzdWVzLzQ0NyBmb3IgbW9yZSBpbmZvCgpUaGlzIGZpeGVzIHNob3VsZCBoYXZlIGxpdHRsZSBzaWRlLWVmZmVjdHMgYmVjYXVzZSBhbGwgdGhlIG90aGVyIGVsZW1lbnRzCm9mIHRoZSBkZWZhdWx0IHRoZW1lIHVzZSB0aGUgIzMzMyBmb250IGNvbG9yLgoKVE9ETzogVGhlIHVwc3RyZWFtIG1heSB1c2UgcmVsYXRpdmUgY29sb3JzIGZvciBib3RoIHRoZSB0YWJsZSBiYWNrZ3JvdW5kCmFuZCB0aGUgY29sb3IuIEl0IG1lYW5zIHRoZSB0YWJsZSBjYW4gZGlzcGxheSB3ZWxsIHdpdGhvdXQgdGhpcyBwYXRjaAp0aGVuLiBBdCB0aGF0IHRpbWUsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBiZWxvdyBDU1MgYXR0cmlidXRlcy4KKi8KZGl2LmRhdGF0YWJsZXMgewogIGNvbG9yOiAjMzMzOwp9Cg==\" rel=\"stylesheet\" />\n",
       "<script title=\"crosstalk\" src=\"data:application/javascript;base64,[encoded data, 25236 characters]\"></script>\n",
       "<link href=\"data:text/css;charset-utf-8;base64,LmNvbnRhaW5lci1mbHVpZC5jcm9zc3RhbGstYnNjb2xze21hcmdpbi1sZWZ0Oi0zMHB4O21hcmdpbi1yaWdodDotMzBweDt3aGl0ZS1zcGFjZTpub3JtYWx9Ym9keT4uY29udGFpbmVyLWZsdWlkLmNyb3NzdGFsay1ic2NvbHN7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6YXV0b30uY3Jvc3N0YWxrLWlucHV0LWNoZWNrYm94Z3JvdXAgLmNyb3NzdGFsay1vcHRpb25zLWdyb3VwIC5jcm9zc3RhbGstb3B0aW9ucy1jb2x1bW57ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1yaWdodDoxMnB4O3ZlcnRpY2FsLWFsaWduOnRvcH1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KXsuY3Jvc3N0YWxrLWlucHV0LWNoZWNrYm94Z3JvdXAgLmNyb3NzdGFsay1vcHRpb25zLWdyb3VwIC5jcm9zc3RhbGstb3B0aW9ucy1jb2x1bW57ZGlzcGxheTpibG9jaztwYWRkaW5nLXJpZ2h0OmluaGVyaXR9fS5jcm9zc3RhbGstaW5wdXR7bWFyZ2luLWJvdHRvbToxNXB4fS5jcm9zc3RhbGstaW5wdXQgLmNvbnRyb2wtbGFiZWx7bWFyZ2luLWJvdHRvbTowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY3Jvc3N0YWxrLWlucHV0IGlucHV0W3R5cGU9ImNoZWNrYm94Il17bWFyZ2luOjRweCAwIDA7bWFyZ2luLXRvcDoxcHg7bGluZS1oZWlnaHQ6bm9ybWFsfS5jcm9zc3RhbGstaW5wdXQgLmNoZWNrYm94e3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDoxMHB4O21hcmdpbi1ib3R0b206MTBweH0uY3Jvc3N0YWxrLWlucHV0IC5jaGVja2JveD5sYWJlbHtwYWRkaW5nLWxlZnQ6MjBweDttYXJnaW4tYm90dG9tOjA7Zm9udC13ZWlnaHQ6NDAwO2N1cnNvcjpwb2ludGVyfS5jcm9zc3RhbGstaW5wdXQgLmNoZWNrYm94IGlucHV0W3R5cGU9ImNoZWNrYm94Il0sLmNyb3NzdGFsay1pbnB1dCAuY2hlY2tib3gtaW5saW5lIGlucHV0W3R5cGU9ImNoZWNrYm94Il17cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLXRvcDoycHg7bWFyZ2luLWxlZnQ6LTIwcHh9LmNyb3NzdGFsay1pbnB1dCAuY2hlY2tib3grLmNoZWNrYm94e21hcmdpbi10b3A6LTVweH0uY3Jvc3N0YWxrLWlucHV0IC5jaGVja2JveC1pbmxpbmV7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1sZWZ0OjIwcHg7bWFyZ2luLWJvdHRvbTowO2ZvbnQtd2VpZ2h0OjQwMDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Y3Vyc29yOnBvaW50ZXJ9LmNyb3NzdGFsay1pbnB1dCAuY2hlY2tib3gtaW5saW5lKy5jaGVja2JveC1pbmxpbmV7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjEwcHh9Cg==\" rel=\"stylesheet\" />\n",
       "\t</head>\n",
       "\t<body>\n",
       "\t\t<div class=\"datatables html-widget html-fill-item\" id=\"htmlwidget-cf86dcba8fadfb393fea\" style=\"width:100%;height:auto;\"></div>\n",
       "<script type=\"application/json\" data-for=\"htmlwidget-cf86dcba8fadfb393fea\">{\"x\":{\"filter\":\"none\",\"vertical\":false,\"data\":[[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\",\"18\",\"19\",\"20\",\"21\",\"22\",\"23\",\"24\",\"25\",\"26\",\"27\",\"28\",\"29\",\"30\",\"31\",\"32\",\"33\",\"34\",\"35\",\"36\",\"37\",\"38\",\"39\",\"40\",\"41\",\"42\",\"43\",\"44\",\"45\",\"46\",\"47\",\"48\",\"49\",\"50\",\"51\",\"52\",\"53\",\"54\",\"55\",\"56\",\"57\",\"58\",\"59\",\"60\",\"61\",\"62\",\"63\",\"64\",\"65\",\"66\",\"67\",\"68\",\"69\",\"70\",\"71\",\"72\",\"73\",\"74\",\"75\",\"76\",\"77\",\"78\",\"79\",\"80\",\"81\",\"82\",\"83\",\"84\",\"85\",\"86\",\"87\",\"88\",\"89\",\"90\",\"91\",\"92\",\"93\",\"94\",\"95\",\"96\",\"97\",\"98\",\"99\",\"100\",\"101\",\"102\",\"103\",\"104\",\"105\",\"106\",\"107\",\"108\",\"109\",\"110\",\"111\",\"112\",\"113\",\"114\",\"115\",\"116\",\"117\",\"118\",\"119\",\"120\",\"121\",\"122\",\"123\",\"124\",\"125\",\"126\",\"127\",\"128\",\"129\",\"130\",\"131\",\"132\",\"133\",\"134\",\"135\",\"136\",\"137\",\"138\",\"139\",\"140\",\"141\",\"142\",\"143\",\"144\",\"145\",\"146\",\"147\",\"148\",\"149\",\"150\",\"151\",\"152\",\"153\",\"154\",\"155\",\"156\",\"157\",\"158\",\"159\",\"160\",\"161\",\"162\",\"163\",\"164\",\"165\",\"166\",\"167\",\"168\",\"169\",\"170\",\"171\",\"172\",\"173\",\"174\",\"175\",\"176\",\"177\",\"178\",\"179\",\"180\",\"181\",\"182\",\"183\",\"184\",\"185\",\"186\"],[\"CL:0000437\",\"CL:0000476\",\"CL:0000637\",\"CL:0000638\",\"CL:0000639\",\"CL:0000695\",\"CL:0001032\",\"CL:0001033\",\"CL:0002309\",\"CL:0002310\",\"CL:0002311\",\"CL:0002312\",\"CL:0002608\",\"CL:0002613\",\"CL:0008031\",\"CL:0008032\",\"CL:0008049\",\"CL:0010011\",\"CL:0010012\",\"CL:0011003\",\"CL:0011111\",\"CL:0012001\",\"CL:0020003\",\"CL:0020004\",\"CL:0020006\",\"CL:0020007\",\"CL:0020008\",\"CL:0020009\",\"CL:0020010\",\"CL:1001505\",\"CL:1001569\",\"CL:1001571\",\"CL:1001582\",\"CL:2000049\",\"CL:2000056\",\"CL:2000086\",\"CL:2000087\",\"CL:2000088\",\"CL:2000089\",\"CL:2000090\",\"CL:4023007\",\"CL:4023008\",\"CL:4023009\",\"CL:4023010\",\"CL:4023011\",\"CL:4023012\",\"CL:4023013\",\"CL:4023014\",\"CL:4023015\",\"CL:4023016\",\"CL:4023017\",\"CL:4023018\",\"CL:4023019\",\"CL:4023022\",\"CL:4023023\",\"CL:4023024\",\"CL:4023025\",\"CL:4023027\",\"CL:4023028\",\"CL:4023030\",\"CL:4023031\",\"CL:4023036\",\"CL:4023038\",\"CL:4023039\",\"CL:4023040\",\"CL:4023041\",\"CL:4023042\",\"CL:4023043\",\"CL:4023044\",\"CL:4023045\",\"CL:4023046\",\"CL:4023047\",\"CL:4023048\",\"CL:4023049\",\"CL:4023050\",\"CL:4023052\",\"CL:4023053\",\"CL:4023055\",\"CL:4023060\",\"CL:4023062\",\"CL:4023064\",\"CL:4023065\",\"CL:4023068\",\"CL:4023069\",\"CL:4023071\",\"CL:4023074\",\"CL:4023075\",\"CL:4023080\",\"CL:4023081\",\"CL:4023088\",\"CL:4023089\",\"CL:4023090\",\"CL:4023108\",\"CL:4023109\",\"CL:4023110\",\"CL:4023111\",\"CL:4023118\",\"CL:4023121\",\"CL:4023122\",\"CL:4023123\",\"CL:4023124\",\"CL:4023125\",\"CL:4023127\",\"CL:4023128\",\"CL:4023187\",\"CL:4030039\",\"CL:4030043\",\"CL:4030047\",\"CL:4030048\",\"CL:4030049\",\"CL:4030050\",\"CL:4030051\",\"CL:4030052\",\"CL:4030053\",\"CL:4030054\",\"CL:4030059\",\"CL:4030060\",\"CL:4030061\",\"CL:4030062\",\"CL:4030063\",\"CL:4030064\",\"CL:4030065\",\"CL:4030067\",\"CL:4030068\",\"CL:4032001\",\"CL:4042001\",\"CL:4042002\",\"CL:4042012\",\"CL:4042013\",\"CL:4042014\",\"CL:4042015\",\"CL:4042023\",\"CL:4042024\",\"CL:4042029\",\"CL:4042032\",\"CL:4042037\",\"CL:4072008\",\"CL:4072009\",\"CL:4072010\",\"CL:4072012\",\"CL:4072017\",\"CL:4072019\",\"CL:4072022\",\"CL:4072027\",\"CL:4072029\",\"CL:4072031\",\"CL:4072032\",\"CL:4072034\",\"CL:4072035\",\"CL:4072036\",\"CL:4072037\",\"CL:4072038\",\"CL:4072039\",\"CL:4072040\",\"CL:4072041\",\"CL:4072042\",\"CL:4072043\",\"CL:4072044\",\"CL:4072045\",\"CL:4072046\",\"CL:4304384\",\"CL:4310084\",\"CL:4310085\",\"CL:4310093\",\"CL:4310094\",\"CL:4310095\",\"CL:4310096\",\"CL:4310104\",\"CL:4310120\",\"CL:4310122\",\"CL:4310123\",\"CL:4310124\",\"CL:4310125\",\"CL:4310126\",\"CL:4310127\",\"CL:4310128\",\"CL:4310129\",\"CL:4310130\",\"CL:4310131\",\"CL:4310132\",\"CL:4310134\",\"CL:4310135\",\"CL:4310136\",\"CL:4310137\",\"CL:4310138\",\"CL:4310147\"],[\"gonadtroph\",\"thyrotroph\",\"chromophil cell of anterior pituitary gland\",\"acidophil cell of pars distalis of adenohypophysis\",\"basophil cell of pars distalis of adenohypophysis\",\"Cajal-Retzius cell\",\"cortical granule cell\",\"hippocampal granule cell\",\"corticotroph\",\"mammosomatotroph\",\"mammotroph\",\"somatotroph\",\"hippocampal neuron\",\"striatum neuron\",\"cortical interneuron\",\"rosehip neuron\",\"Betz cell\",\"cerebral cortex GABAergic interneuron\",\"cerebral cortex neuron\",\"magnocellular neurosecretory cell\",\"hypothalamic gonadotropin-releasing hormone neuron\",\"neuron of the forebrain\",\"internal globus pallidus core projecting neuron\",\"internal globus pallidus shell projection neuron\",\"OB-Dopa-GABA\",\"dorso-striatal cholinergic-GABAergic neuron\",\"striatal cholinergic-GABAergic neuron\",\"prototypic neuron\",\"arkypallidal neuron\",\"parvocellular neurosecretory cell\",\"hippocampal interneuron\",\"hippocampal pyramidal neuron\",\"lateral ventricle neuron\",\"primary motor cortex pyramidal cell\",\"Meynert cell\",\"neocortex basket cell\",\"dentate gyrus of hippocampal formation basket cell\",\"Ammon's horn basket cell\",\"dentate gyrus granule cell\",\"dentate gyrus of hippocampal formation stellate cell\",\"L2/3 bipolar VIP GABAergic interneuron (Mmus)\",\"intratelencephalic-projecting glutamatergic cortical neuron\",\"extratelencephalic-projecting glutamatergic cortical neuron\",\"alpha7 GABAergic cortical interneuron (Mmus)\",\"lamp5 GABAergic interneuron\",\"near-projecting glutamatergic cortical neuron\",\"corticothalamic-projecting glutamatergic cortical neuron\",\"L5 VIP GABAergic interneuron (Mmus)\",\"sncg GABAergic interneuron\",\"VIP GABAergic interneuron\",\"sst GABAergic interneuron\",\"pvalb GABAergic interneuron\",\"L5/6 cck, VIP GABAergic interneuron (Mmus)\",\"canopy lamp5 GABAergic cortical interneuron (Mmus)\",\"L5,6 neurogliaform lamp5 GABAergic interneuron (Mmus)\",\"neurogliaform lamp5 GABAergic cortical interneuron (Mmus)\",\"long-range projecting sst GABAergic cortical interneuron (Mmus)\",\"L5 sst T-Martinotti interneuron (Mmus)\",\"L5 non-Martinotti sst GABAergic interneuron (Mmus)\",\"L2/3/5 fan Martinotti sst GABAergic interneuron (Mmus)\",\"L4 sst Martinotti interneuron (Mmus)\",\"pvalb chandelier GABAergic interneuron\",\"L6b glutamatergic cortical neuron\",\"amygdala excitatory neuron\",\"L2/3-6 intratelencephalic projecting glutamatergic neuron\",\"L5 extratelencephalic projecting glutamatergic cortical neuron\",\"L6 corticothalamic-projecting glutamatergic cortical neuron\",\"L5/6 near-projecting glutamatergic neuron of the primary motor cortex\",\"non-medulla, extratelencephalic-projecting glutamatergic neuron of the primary motor cortex\",\"medulla-projecting glutamatergic neuron of the primary motor cortex\",\"L6b glutamatergic neuron of the primary motor cortex\",\"L2/3 intratelencephalic projecting glutamatergic neuron of the primary motor cortex\",\"L4/5 intratelencephalic projecting glutamatergic neuron of the primary motor cortex\",\"L5 intratelencephalic projecting glutamatergic neuron of the primary motor cortex\",\"L6 intratelencephalic projecting glutamatergic neuron of the primary motor cortex\",\"Betz upper motor neuron\",\"spinal interneuron synapsing Betz cell\",\"corticothalamic VAL/VM projecting glutamatergic neuron of the primary motor cortex\",\"hippocampal CA1-3 neuron\",\"dentate gyrus neuron\",\"caudal ganglionic eminence derived interneuron\",\"meis2 expressing cortical GABAergic cell\",\"thalamic excitatory neuron\",\"medial ganglionic eminence derived GABAergic interneuron\",\"L5/6 cck GABAergic interneuron (Mmus)\",\"mammillary body neuron\",\"L6 th sst GABAergic interneuron (Mmus)\",\"stellate L6 intratelencephalic projecting glutamatergic neuron of the primary motor cortex (Mmus)\",\"inverted L6 intratelencephalic projecting glutamatergic neuron of the primary motor cortex (Mmus)\",\"large basket cell\",\"nest basket cell\",\"small basket cell\",\"oxytocin-secreting magnocellular cell\",\"vasopressin-secreting magnocellular cell\",\"amygdala pyramidal neuron\",\"cerebral cortex pyramidal neuron\",\"L5/6 non-Martinotti sst GABAergic interneuron (Mmus)\",\"sst chodl GABAergic interneuron\",\"oxytocin receptor sst GABAergic cortical interneuron\",\"hypothalamus kisspeptin neuron\",\"dentate gyrus kisspeptin neuron\",\"KNDy neuron\",\"arcuate nucleus of hypothalamus KNDy neuron\",\"rostral periventricular region of the third ventricle KNDy neuron\",\"koniocellular cell\",\"von Economo neuron\",\"matrix D1 medium spiny neuron\",\"matrix D2 medium spiny neuron\",\"striosomal D1 medium spiny neuron\",\"striosomal D2 medium spiny neuron\",\"D1/D2-hybrid medium spiny neuron\",\"nucleus accumbens shell and olfactory tubercle D1 medium spiny neuron\",\"nucleus accumbens shell and olfactory tubercle D2 medium spiny neuron\",\"Islands of Calleja granule cell\",\"D1-NUDAP medium spiny neuron\",\"L2/3 intratelencephalic projecting glutamatergic neuron\",\"L2 intratelencephalic projecting glutamatergic neuron\",\"L3 intratelencephalic projecting glutamatergic neuron\",\"L4/5 intratelencephalic projecting glutamatergic neuron\",\"L4 intratelencephalic projecting glutamatergic neuron\",\"L5 intratelencephalic projecting glutamatergic neuron\",\"L6 intratelencephalic projecting glutamatergic neuron\",\"L5/6 near-projecting glutamatergic neuron\",\"L6 intratelencephalic projecting Car3 glutamatergic neuron\",\"reelin GABAergic cortical interneuron\",\"TAC3-positive striatal interneuron\",\"TAC3-positive medium spiny neuron\",\"L2 marginal neuron\",\"Lamp5 Lhx6 neuron\",\"spiny VIP neuron\",\"VIP-ChAT interneuron\",\"striatal pthlh-expressing interneuron\",\"striatal PTHLH MOXD1 expressing interneuron\",\"cortical immature neuron\",\"PAX6 GABAergic interneuron\",\"sst GABAergic neuron of the striatum\",\"A11 dopaminergic neuron\",\"A12 dopaminergic neuron\",\"A13 dopaminergic neuron\",\"A15 dopaminergic neuron\",\"agouti-related protein expressing neuron\",\"SCN pacemaker neuron\",\"Lamp5 Lhx6 GABAergic interneuron (Homo sapiens)\",\"sst GABAergic interneuron (Homo sapiens)\",\"pvalb GABAergic interneuron (Homo sapiens)\",\"sst chodl GABAergic interneuron (Homo sapiens)\",\"VIP GABAergic interneuron (Homo sapiens)\",\"lamp5 GABAergic interneuron (Homo sapiens)\",\"sncg GABAergic interneuron (Homo sapiens)\",\"PAX6 GABAergic interneuron (Homo sapiens)\",\"L2/3 intratelencephalic projecting glutamatergic neuron (Homo sapiens)\",\"L5 intratelencephalic projecting glutamatergic neuron (Homo sapiens)\",\"L4 intratelencephalic projecting glutamatergic neuron (Homo sapiens)\",\"L6 intratelencephalic projecting Car3 glutamatergic neuron (Homo sapiens)\",\"L6 intratelencephalic projecting glutamatergic neuron (Homo sapiens)\",\"L5/6 near-projecting glutamatergic neuron (Homo sapiens)\",\"L5 extratelencephalic projecting glutamatergic cortical neuron (Homo sapiens)\",\"L6 corticothalamic-projecting glutamatergic cortical neuron (Homo sapiens)\",\"L6b glutamatergic cortical neuron (Homo sapiens)\",\"pvalb chandelier GABAergic interneuron (Homo sapiens)\",\"hypothalamic gonadotropin-releasing hormone neuron (Mmus)\",\"striatal LAMP5 CXCL14 GABAergic interneuron (Primate)\",\"striatal LAMP5 LHX6 GABAergic interneuron (Primate)\",\"arkypallidal neuron (Primate)\",\"prototypic neuron (Primate)\",\"GPi Core neuron (Primate)\",\"GPi Shell neuron (Primate)\",\"Islands of Calleja granule cell (Primate)\",\"striatal pthlh-expressing interneuron (Primate)\",\"striatal SST-ADARB2 GABAergic interneuron (Primate)\",\"striatal SST-CHODL GABAergic interneuron (Primate)\",\"striatal SST-RSPO2 GABAergic interneuron (Primate)\",\"STR TAC3-PLPP4 GABA TAC3-positive striatal interneuron (Primate)\",\"STR-BF TAC3-PLPP4-LHX8 GABA TAC3-positive striatal interneuron (Primate)\",\"striatal VIP GABAergic interneuron (Primate)\",\"STRd cholinergic-GABAergic neuron (Primate)\",\"STRd D1 Matrix medium spiny neuron (Primate)\",\"striosomal D1 medium spiny neuron (Primate)\",\"STRd D1/D2-hybrid medium spiny neuron (Primate)\",\"STRd D2 Matrix medium spiny neuron (Primate)\",\"striosomal D2 medium spiny neuron (Primate)\",\"STR cholinergic-GABAergic neuron (Primate)\",\"STRv D1 medium spiny neuron (Primate)\",\"STRv D1-NUDAP medium spiny neuron (Primate)\",\"STRv D2 medium spiny neuron (Primate)\",\"OB Dopa-GABA neuron (Primate)\"]],\"container\":\"<table class=\\\"display\\\">\\n  <thead>\\n    <tr>\\n      <th> <\\/th>\\n      <th>subject<\\/th>\\n      <th>value<\\/th>\\n    <\\/tr>\\n  <\\/thead>\\n<\\/table>\",\"options\":{\"columnDefs\":[{\"orderable\":false,\"targets\":0},{\"name\":\" \",\"targets\":0},{\"name\":\"subject\",\"targets\":1},{\"name\":\"value\",\"targets\":2}],\"order\":[],\"autoWidth\":false,\"orderClasses\":false}},\"evals\":[],\"jsHooks\":[]}</script>\n",
       "\t</body>\n",
       "</html>\n"
      ],
      "text/plain": [
       "HTML widgets cannot be represented in plain text (need html)"
      ]
     },
     "metadata": {
      "text/html": {
       "isolated": true
      }
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "tbl(clss@con, \"rdfs_label_statement\") |>\n",
    "  filter(subject %in% clisneur) |>\n",
    "  select(subject, value) |>\n",
    "  collect() |>\n",
    "  DT::datatable()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4d68cc66",
   "metadata": {},
   "source": [
    "# Session information"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "55a9c4a1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "R version 4.6.1 (2026-06-24)\n",
       "Platform: aarch64-apple-darwin23\n",
       "Running under: macOS Sequoia 15.7.7\n",
       "\n",
       "Matrix products: default\n",
       "BLAS:   /Library/Frameworks/R.framework/Versions/4.6/Resources/lib/libRblas.0.dylib \n",
       "LAPACK: /Library/Frameworks/R.framework/Versions/4.6/Resources/lib/libRlapack.dylib;  LAPACK version 3.12.1\n",
       "\n",
       "locale:\n",
       "[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8\n",
       "\n",
       "time zone: America/New_York\n",
       "tzcode source: internal\n",
       "\n",
       "attached base packages:\n",
       "[1] stats     graphics  grDevices utils     datasets  methods   base     \n",
       "\n",
       "other attached packages:\n",
       "[1] S7_0.2.2          DT_0.34.0         DBI_1.3.0         dplyr_1.2.1      \n",
       "[5] ontoProc2_0.99.28 devtools_2.5.2    usethis_3.2.1     rmarkdown_2.31   \n",
       "\n",
       "loaded via a namespace (and not attached):\n",
       " [1] bslib_0.11.0         xfun_0.60            httr2_1.3.0         \n",
       " [4] htmlwidgets_1.6.4    ontologyPlot_1.7     Cairo_1.7-0         \n",
       " [7] crosstalk_1.2.2      vctrs_0.7.3          tools_4.6.1         \n",
       "[10] generics_0.1.4       stats4_4.6.1         curl_7.1.0          \n",
       "[13] tibble_3.3.1         RSQLite_3.53.3       blob_1.3.0          \n",
       "[16] pkgconfig_2.0.3      R.oo_1.27.1          dbplyr_2.6.0        \n",
       "[19] uuid_1.2-2           graph_1.91.0         lifecycle_1.0.5     \n",
       "[22] compiler_4.6.1       textshaping_1.0.5    repr_1.1.7          \n",
       "[25] getPass_0.2-4        sass_0.4.10          htmltools_0.5.9     \n",
       "[28] yaml_2.3.12          jquerylib_0.1.4      pillar_1.11.1       \n",
       "[31] crayon_1.5.3         ellipsis_0.3.3       R.utils_2.13.0      \n",
       "[34] cachem_1.1.0         sessioninfo_1.2.4    tidyselect_1.2.1    \n",
       "[37] digest_0.6.39        purrr_1.2.2          paintmap_1.0        \n",
       "[40] fastmap_1.2.0        grid_4.6.1           cli_3.6.6           \n",
       "[43] magrittr_2.0.5       base64enc_0.1-6      utf8_1.2.6          \n",
       "[46] pkgbuild_1.4.8       IRdisplay_1.1        withr_3.0.3         \n",
       "[49] filelock_1.0.3       IRkernel_1.3.2       bit64_4.8.2         \n",
       "[52] bit_4.6.0            otel_0.2.0           pbdZMQ_0.3-14       \n",
       "[55] ragg_1.5.2           R.methodsS3_1.8.2    memoise_2.0.1       \n",
       "[58] evaluate_1.0.5       knitr_1.51           BiocFileCache_3.3.0 \n",
       "[61] rlang_1.3.0          startup_0.23.0       ontologyIndex_2.12  \n",
       "[64] glue_1.8.1           xml2_1.6.0           Rgraphviz_2.57.0    \n",
       "[67] BiocGenerics_0.59.10 pkgload_1.5.3        jsonlite_2.0.0      \n",
       "[70] R6_2.6.1             systemfonts_1.3.2    fs_2.1.0            "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sessionInfo()"
   ]
  }
 ],
 "metadata": {
  "author": "Vincent J. Carey, stvjc at channing.harvard.edu",
  "kernelspec": {
   "display_name": "R",
   "language": "R",
   "name": "ir"
  },
  "language_info": {
   "codemirror_mode": "r",
   "file_extension": ".r",
   "mimetype": "text/x-r-source",
   "name": "R",
   "pygments_lexer": "r",
   "version": "4.6.1"
  },
  "title": "ontoProc2 -- leveraging semantic SQL for ontology analysis in Bioconductor"
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
