diff --git a/rdf/RDF.ipynb b/rdf/RDF.ipynb index c16e57f..1688415 100644 --- a/rdf/RDF.ipynb +++ b/rdf/RDF.ipynb @@ -67,12 +67,12 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": { "deletable": false, "editable": false, "nbgrader": { - "checksum": "387f9c38b548f29b56ae5ef5ae76fd4f", + "checksum": "6455a9642f93288f6c74b88d0892c4c7", "grade": false, "grade_id": "cell-d7f1ea9c021693b8", "locked": true, @@ -80,25 +80,11 @@ "solution": false } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: future in /home/cif/anaconda3/lib/python3.5/site-packages (from -r requirements.txt (line 1)) (0.16.0)\n", - "Requirement already satisfied: rdflib in /home/cif/anaconda3/lib/python3.5/site-packages (from -r requirements.txt (line 2)) (4.0.1)\n", - "Requirement already satisfied: rdflib-jsonld in /home/cif/.local/lib/python3.5/site-packages (from -r requirements.txt (line 3)) (0.4.0)\n", - "Requirement already satisfied: lxml in /home/cif/anaconda3/lib/python3.5/site-packages (from -r requirements.txt (line 4)) (4.2.4)\n", - "Requirement already satisfied: html5lib in /home/cif/anaconda3/lib/python3.5/site-packages (from -r requirements.txt (line 5)) (1.0.1)\n", - "Requirement already satisfied: isodate in /home/cif/anaconda3/lib/python3.5/site-packages (from rdflib->-r requirements.txt (line 2)) (0.5.4)\n", - "Requirement already satisfied: pyparsing in /home/cif/anaconda3/lib/python3.5/site-packages (from rdflib->-r requirements.txt (line 2)) (2.2.0)\n", - "Requirement already satisfied: webencodings in /home/cif/anaconda3/lib/python3.5/site-packages (from html5lib->-r requirements.txt (line 5)) (0.5.1)\n", - "Requirement already satisfied: six>=1.9 in /home/cif/anaconda3/lib/python3.5/site-packages (from html5lib->-r requirements.txt (line 5)) (1.11.0)\n" - ] - } - ], + "outputs": [], "source": [ - "!pip install --user -r requirements.txt" + "# Install a pip package in the current Jupyter kernel\n", + "import sys\n", + "!{sys.executable} -m pip install -r requirements.txt\n" ] }, { @@ -272,7 +258,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": { "deletable": false, "editable": false, @@ -285,17 +271,7 @@ "solution": false } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "IPython.CodeCell.options_default.highlight_modes['magic_turtle'] = {'reg':[/^%%ttl/]};" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "from helpers import *\n", "from rdflib import term, RDF, Namespace" @@ -306,9 +282,9 @@ "metadata": { "deletable": false, "nbgrader": { - "checksum": "3e23398d5277f2db2b3b5fb84f9623d6", + "checksum": "76c052d3f1117f07468068a90f969760", "grade": true, - "grade_id": "cell-da88c2f8170436fe", + "grade_id": "cell-57f67d1e662b7f09", "locked": false, "points": 0, "schema_version": 1, @@ -316,37 +292,34 @@ } }, "source": [ - "You have to fill in the parts marked:\n", + "In these exercises, you have to fill in the parts marked:\n", "\n", "```\n", "# YOUR ANSWER HERE\n", - "```\n", - "\n", - "To make sure everything is working, try the following example.\n", - "The solution is:\n", - "\n", - "```turtle\n", - "@prefix foaf: .\n", - "@prefix geo: .\n", - "@prefix rdf: .\n", - "\n", - " \n", - " a foaf:Person;\n", - " foaf:interest ;\n", - " foaf:based_near [\n", - " geo:lat \"34.0736111\" ;\n", - " geo:lon \"-118.3994444\"\n", - " ] .\n", - "```\n", - "\n", - "Fill in the answer and run the test code.\n", - "\n", - "This order (%%ttl) is a so-called magic cell command to execute a function. You can read more here https://ipython.readthedocs.io/en/stable/interactive/magics.html#cell-magics" + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "nbgrader": { + "checksum": "d2a1ff53084a9bd94110f071a67d9305", + "grade": true, + "grade_id": "cell-da88c2f8170436fe", + "locked": false, + "points": 0, + "schema_version": 1, + "solution": true + } + }, + "source": [ + "# YOUR ANSWER HERE" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": { "deletable": false, "nbgrader": { @@ -358,31 +331,31 @@ "solution": true } }, - "outputs": [ - { - "data": { - "text/markdown": [ - "Error on line ?\n", - "\n", - "Reason: No plugin registered for (ttl, )\n", - "\n", - "If you don't know what this error means, try an online validator: http://ttl.summerofcode.be/\n" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "%%ttl example\n", "\n", "# YOUR ANSWER HERE" ] }, + { + "cell_type": "markdown", + "metadata": { + "deletable": false, + "editable": false, + "nbgrader": { + "checksum": "f6eb0c6c19c1756d7705f52866b00f82", + "grade": false, + "grade_id": "cell-a4ed500079ba36ca", + "locked": true, + "schema_version": 1, + "solution": false + } + }, + "source": [ + "Now run the tests:" + ] + }, { "cell_type": "code", "execution_count": null, @@ -390,7 +363,7 @@ "deletable": false, "editable": false, "nbgrader": { - "checksum": "5982ca82090e267401af135ca1f371a8", + "checksum": "7a21480d0282aed4f943d0c9d6ecd6e6", "grade": true, "grade_id": "cell-23e61b9f48d597fc", "locked": true, @@ -401,6 +374,7 @@ }, "outputs": [], "source": [ + "# This code tests that the definition above is correct.\n", "g = solution('example')\n", "test('Some triples have been loaded',\n", " len(g))\n", @@ -464,11 +438,10 @@ "metadata": {}, "source": [ "To make sure we are following Principles 1 and 2, we should use URIs that can be queried.\n", - "For the sake of this exercise, you can use the made-up `http://example/sitc/` as base for our URIs.\n", + "For the sake of this exercise, you have use the made-up `http://example/sitc/` as base for our URIs.\n", "Hence, the URIs of our hotels will look like this: `http://example/sitc/my-fancy-hotel`.\n", "These URIs can not be queried, **and should not be used in real annotations**, but we will see how to fix that in a future exercise.\n", "\n", - "\n", "We will use the vocabularies defined in https://schema.org e.g.:\n", " * https://schema.org/Review defines properties about reviews\n", " * https://schema.org/Hotel defines properties about hotels\n", @@ -623,128 +596,44 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Could not get rdfa data\n" - ] - }, - { - "data": { - "text/markdown": [ - "\n", - "Results:\n", - "\n", - "```turtle\n", - "@prefix ns1: .\n", - "@prefix ns2: .\n", - "@prefix ns3: .\n", - "@prefix ns4: .\n", - "@prefix rdf: .\n", - "@prefix rdfs: .\n", - "@prefix xml: .\n", - "@prefix xsd: .\n", - "\n", - " ns4:item () .\n", - "\n", - "[] a ns2:Error ;\n", - " ns1:date \"2019-02-13T17:42:13.310135\"^^xsd:dateTime ;\n", - " ns1:description \"__init__() got an unexpected keyword argument 'encoding'\" ;\n", - " ns2:context [ a ns3:Request ;\n", - " ns3:requestURI \"http://www.hotellasalve.com/\" ],\n", - " [ a ns3:Response ;\n", - " ns3:responseCode ] .\n", - "\n", - "\n", - "```\n" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "print_data('http://www.hotellasalve.com/')" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Could not get rdfa data\n", - "https://photos.mandarinoriental.com/is/content/MandarinOriental/RZMAD - Madrid/Logos/hotel-ritz-hotel-logo-SVG.svg does not look like a valid URI, trying to serialize this will break.\n", - "tel:+34 91 701 67 67 does not look like a valid URI, trying to serialize this will break.\n" - ] - }, - { - "data": { - "text/markdown": [ - "\n", - "Results:\n", - "\n", - "```turtle\n", - "@prefix ns1: .\n", - "@prefix ns2: .\n", - "@prefix ns3: .\n", - "@prefix ns4: .\n", - "@prefix ns5: .\n", - "@prefix rdf: .\n", - "@prefix rdfs: .\n", - "@prefix xml: .\n", - "@prefix xsd: .\n", - "\n", - " ns5:item ( [ a ns1:Hotel ;\n", - " ns1:address [ a ns1:PostalAddress ;\n", - " ns1:addressCountry \"Spain\"@en ;\n", - " ns1:addressLocality \"Madrid\"@en ;\n", - " ns1:postalCode \"28014\"@en ;\n", - " ns1:streetAddress \"Plaza de la Lealtad 5\"@en ] ;\n", - " ns1:description \"Experience our 5 Star hotel in central Madrid, Retiro Park offering luxurious rooms and suites, fine dining, private spa, meeting and wedding facilities.\"@en ;\n", - " ns1:email ;\n", - " ns1:image ;\n", - " ns1:name \"Hotel Ritz, Madrid\"@en ;\n", - " ns1:tel ;\n", - " ns1:url ,\n", - " ] ) ;\n", - " ns4:usesVocabulary ns1: .\n", - "\n", - "[] a ns4:Error ;\n", - " ns3:date \"2019-02-13T17:43:52.577508\"^^xsd:dateTime ;\n", - " ns3:description \"__init__() got an unexpected keyword argument 'encoding'\" ;\n", - " ns4:context [ a ns2:Request ;\n", - " ns2:requestURI \"https://www.mandarinoriental.com/madrid/hotel-ritz/luxury-hotel\" ],\n", - " [ a ns2:Response ;\n", - " ns2:responseCode ] .\n", - "\n", - "\n", - "```\n" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "print_data('https://www.mandarinoriental.com/madrid/hotel-ritz/luxury-hotel')" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": false, + "nbgrader": { + "checksum": "c7af0b9af5a64773785cc890f2431c78", + "grade": true, + "grade_id": "cell-c2e5b58ea74e8276", + "locked": false, + "points": 1, + "schema_version": 1, + "solution": true + } + }, + "outputs": [], + "source": [ + "# Try new sites here\n", + "\n", + "# YOUR ANSWER HERE" + ] + }, { "cell_type": "markdown", "metadata": { @@ -773,11 +662,11 @@ "metadata": { "deletable": false, "nbgrader": { - "checksum": "2a7a6ab7d69f7ca5db64233128260045", + "checksum": "56a77e133b532997723bf2f8116389e4", "grade": true, "grade_id": "cell-17508ecf96884653", "locked": false, - "points": 0, + "points": 1, "schema_version": 1, "solution": true } @@ -792,7 +681,7 @@ "deletable": false, "editable": false, "nbgrader": { - "checksum": "531928c9e3b8462baddd4d700c240995", + "checksum": "9311bca044d7057c86dd753f5343e19b", "grade": false, "grade_id": "cell-d36826d6323c96e8", "locked": true, @@ -801,7 +690,7 @@ } }, "source": [ - "What vocabularyes and ontologies do they use?" + "What vocabularies and ontologies do they use?" ] }, { @@ -809,11 +698,11 @@ "metadata": { "deletable": false, "nbgrader": { - "checksum": "f100004eceae0c8159ade9d713af47e7", + "checksum": "ba7b24b557d627e2665ca31c75c24c23", "grade": true, "grade_id": "cell-17508ecf96884655", "locked": false, - "points": 0, + "points": 1, "schema_version": 1, "solution": true } @@ -824,9 +713,20 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "deletable": false, + "editable": false, + "nbgrader": { + "checksum": "853651c95cbcd69cd5f495f03d29d19a", + "grade": false, + "grade_id": "cell-e25a0db3fe8a6b4b", + "locked": true, + "schema_version": 1, + "solution": false + } + }, "source": [ - "What are the similarities between sites" + "What properties and annotations do they have in common?" ] }, { @@ -834,11 +734,11 @@ "metadata": { "deletable": false, "nbgrader": { - "checksum": "3d9ad086580ee27d93395dac8c16551d", + "checksum": "779f0f750508eb52b2d98b92689e426b", "grade": true, "grade_id": "cell-30797c9ac87cc7e1", "locked": false, - "points": 0, + "points": 1, "schema_version": 1, "solution": true } @@ -847,36 +747,22 @@ "# YOUR ANSWER HERE" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "What are the similarities between sites" - ] - }, { "cell_type": "markdown", "metadata": { "deletable": false, + "editable": false, "nbgrader": { - "checksum": "4c03ad45eb1234cadccab2b468a69123", - "grade": true, - "grade_id": "answer-similarities", - "locked": false, - "points": 0, + "checksum": "f8fff644855ca50a5219598322aa9b32", + "grade": false, + "grade_id": "cell-33862c8e38173d9c", + "locked": true, "schema_version": 1, - "solution": true + "solution": false } }, "source": [ - "# YOUR ANSWER HERE" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "What are the biggest differences" + "What sites provide the most, or the most useful annotations?" ] }, { @@ -884,11 +770,11 @@ "metadata": { "deletable": false, "nbgrader": { - "checksum": "6ccc2db2be4826a146a6c34bc54f00de", + "checksum": "8ef0ebd54eefb44ff7019f17f58be3ec", "grade": true, "grade_id": "cell-17508ecf96884657", "locked": false, - "points": 0, + "points": 1, "schema_version": 1, "solution": true } @@ -920,11 +806,11 @@ "metadata": { "deletable": false, "nbgrader": { - "checksum": "e0b4d9f1a2dfe5a7ab835f7349aa3796", + "checksum": "b5f208a95a8803e97f82c5f2cdf319dd", "grade": true, "grade_id": "answer-missing", "locked": false, - "points": 0, + "points": 1, "schema_version": 1, "solution": true } @@ -974,6 +860,27 @@ "print_data('https://mastodon.social/@Gargron')" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "deletable": false, + "nbgrader": { + "checksum": "fb8bd92e931c7836bb3c22dadd3be583", + "grade": true, + "grade_id": "cell-ff2413f45311f086", + "locked": false, + "points": 0, + "schema_version": 1, + "solution": true + } + }, + "outputs": [], + "source": [ + "# Try some new sites here.\n", + "# YOUR ANSWER HERE" + ] + }, { "cell_type": "markdown", "metadata": { @@ -1026,24 +933,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.5" - }, - "latex_envs": { - "LaTeX_envs_menu_present": true, - "autocomplete": true, - "bibliofile": "biblio.bib", - "cite_by": "apalike", - "current_citInitial": 1, - "eqLabelWithNumbers": true, - "eqNumInitial": 1, - "hotkeys": { - "equation": "Ctrl-E", - "itemize": "Ctrl-I" - }, - "labels_anchors": false, - "latex_user_defs": false, - "report_style_numbering": false, - "user_envs_cfg": false + "version": "3.7.2" } }, "nbformat": 4, diff --git a/rdf/helpers.py b/rdf/helpers.py index 24c2f4d..c280e72 100644 --- a/rdf/helpers.py +++ b/rdf/helpers.py @@ -53,7 +53,7 @@ If you don\'t know what this error means, try an online validator: http://ttl.su key = line or 'default' try: DEFINITIONS[key] = g.parse(data=cell, - format="ttl") + format="n3") except SyntaxError as ex: return Markdown(msg.format(line=ex.lines, reason=ex._why)) except Exception as ex: