1
0
mirror of https://github.com/gsi-upm/sitc synced 2025-09-15 03:12:20 +00:00

Compare commits

22 Commits

Author SHA1 Message Date
J. Fernando Sánchez
b43125ca59 LOD: minor changes 2021-02-22 17:32:31 +01:00
cif2cif
5144b7f228 Added intro RDF and tutorial 2021-02-22 12:55:40 +01:00
cif2cif
8b6d6de169 added tutorial SPARQL 2021-02-18 18:10:59 +01:00
Carlos A. Iglesias
7271b5e632 Update README.md
Added clone comment
2021-02-09 19:54:56 +01:00
Carlos A. Iglesias
bd99321d6b Update README.md
Fixed a typo
2021-02-09 19:53:55 +01:00
Carlos A. Iglesias
91b8f66056 Update 1_1_Notebooks.ipynb
Changes URL for Anacoda
2021-02-09 19:53:14 +01:00
Carlos A. Iglesias
242a0a9252 Update 4_7_Exercises.ipynb 2020-04-29 18:46:31 +02:00
Carlos A. Iglesias
d8d25c4dc3 Update 4_7_Exercises.ipynb 2020-04-29 18:11:50 +02:00
Carlos A. Iglesias
4979fe6877 Update 4_7_Exercises.ipynb 2020-04-29 18:10:10 +02:00
Carlos A. Iglesias
c5e0f146c4 Update 4_7_Exercises.ipynb 2020-04-29 18:06:24 +02:00
Carlos A. Iglesias
167475029e Updated exercise 1 since the code of the previous link was outdated 2020-04-29 18:04:18 +02:00
Carlos A. Iglesias
da79a18bfc Fixed broken link 2020-04-23 23:25:09 +02:00
Carlos A. Iglesias
47761c11aa errata en algoritmos 2020-03-05 17:19:56 +01:00
J. Fernando Sánchez
fd5aa4a1fd fix typo 2020-02-20 17:38:02 +01:00
J. Fernando Sánchez
396a7b17ca update RDF example 2020-02-20 17:36:07 +01:00
J. Fernando Sánchez
2248188219 Updated URL rdf and LOD 2020-02-20 11:28:55 +01:00
Carlos A. Iglesias
21dc5ec3de Update 1__10_Modules_Packages.ipynb 2020-02-13 18:10:08 +01:00
Carlos A. Iglesias
db99033727 Update 1__10_Modules_Packages.ipynb 2020-02-13 18:08:25 +01:00
Carlos A. Iglesias
5459e801d5 Update 1_7_Variables.ipynb 2020-02-13 17:56:36 +01:00
Carlos A. Iglesias
75f08ea170 Merge pull request #5 from gsi-upm/dveni-patch-2
Update 4_1_Lexical_Processing.ipynb
2019-11-27 10:19:12 +01:00
Dani Vera
19ea5dff09 Update 4_1_Lexical_Processing.ipynb 2019-11-26 15:14:40 +01:00
Carlos A. Iglesias
e70689072f Merge pull request #4 from gsi-upm/dveni-patch-1
Update 3_3_Data_Munging_with_Pandas.ipynb
2019-09-19 10:46:19 +02:00
62 changed files with 17045 additions and 211 deletions

View File

@@ -5,8 +5,8 @@ Exercises for Intelligent Systems Course at Universidad Politécnica de Madrid,
For following this course:
- Follow the instructions to install the environment: https://github.com/gsi-upm/sitc/blob/master/python/1_1_Notebooks.ipynb (Just install 'conda')
- Download the course: use 'https://github.com/gsi-upm/sitc'
- Run in a terminal in the foloder sitc: jupyter notebook (and enjoy)
- Download the course: use 'https://github.com/gsi-upm/sitc' (or clone the repository to receive updates).
- Run in a terminal in the folder sitc: jupyter notebook (and enjoy)
Topics
* Python: quick introduction to Python

View File

@@ -0,0 +1,484 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"![](files/images/EscUpmPolit_p.gif \"UPM\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<header style=\"width:100%;position:relative\">\n",
" <div style=\"width:80%;float:right;\">\n",
" <h1>Course Notes for Learning Intelligent Systems</h1>\n",
" <h3>Department of Telematic Engineering Systems</h3>\n",
" <h5>Universidad Politécnica de Madrid. © Carlos A. Iglesias </h5>\n",
" </div>\n",
" <img style=\"width:15%;\" src=\"../logo.jpg\" alt=\"UPM\" />\n",
"</header>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Introduction\n",
"\n",
"This lecture provides an introduction to RDF and the SPARQL query language.\n",
"\n",
"This is the first in a series of notebooks about SPARQL, which consists of:\n",
"\n",
"* This notebook, which explains basic concepts of RDF and SPARQL\n",
"* [A notebook](01_SPARQL_Introduction.ipynb) that provides an introduction to SPARQL through a collection of exercises of increasing difficulty.\n",
"* [An optional notebook](02_SPARQL_Custom_Endpoint.ipynb) with queries to a custom dataset.\n",
"The dataset is meant to be done after the [RDF exercises](../rdf/RDF.ipynb) and it is out of the scope of this course.\n",
"You can consult it if you are interested."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# RDF basics\n",
"This section is taken from [[1](#1), [2](#2)].\n",
"\n",
"RDF allows us to make statements about resources. The format of these statements is simple. A statement always has the following structure:\n",
"\n",
" <subject> <predicate> <object>\n",
" \n",
"An RDF statement expresses a relationship between two resources. The **subject** and the **object** represent the two resources being related; the **predicate** represents the nature of their relationship.\n",
"The relationship is phrased in a directional way (from subject to object).\n",
"In RDF this relationship is known as a **property**.\n",
"Because RDF statements consist of three elements they are called **triples**.\n",
"\n",
"Here are some examples of RDF triples (informally expressed in pseudocode):\n",
"\n",
" <Bob> <is a> <person>.\n",
" <Bob> <is a friend of> <Alice>.\n",
" \n",
"Resources are identified by [IRIs](https://en.wikipedia.org/wiki/Internationalized_Resource_Identifier), which can appear in all three positions of a triple. For example, the IRI for Leonardo da Vinci in DBpedia is:\n",
"\n",
" <http://dbpedia.org/resource/Leonardo_da_Vinci>\n",
"\n",
"IRIs can be abbreviated as *prefixed names*. For example, \n",
" PREFIX dbr: <http://dbpedia.org/resource/>\n",
" <dbr:Leonardo_da_Vinci>\n",
" \n",
"Objects can be literals: \n",
" * strings (e.g., \"plain string\" or \"string with language\"@en)\n",
" * numbers (e.g., \"13.4\"^^xsd:float)\n",
" * dates (e.g., )\n",
" * booleans\n",
" * etc.\n",
" \n",
"RDF data is stored in RDF repositories that expose SPARQL endpoints.\n",
"Let's query one of the most famous RDF repositories: [dbpedia](https://wiki.dbpedia.org/).\n",
"First, we should learn how to execute SPARQL in a notebook."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Executing SPARQL in a notebook\n",
"There are several ways to execute SPARQL in a notebook.\n",
"Some of the most popular are:\n",
"\n",
"* using libraries such as [sparql-client](https://pypi.org/project/sparql-client/) or [rdflib](https://rdflib.dev/sparqlwrapper/) that enable executing SPARQL within a Python3 kernel\n",
"* using other libraries. In our case, a light library has been developed (the file helpers.py) for accessing SPARQL endpoints using an HTTP connection.\n",
"* using the [graph notebook package](https://pypi.org/project/graph-notebook/)\n",
"* using a SPARQL kernel [sparql kernel](https://github.com/paulovn/sparql-kernel) instead of the Python3 kernel\n",
"\n",
"\n",
"We are going to use the second option to avoid installing new packages.\n",
"\n",
"To use the library, you need to:\n",
"\n",
"1. Import `sparql` from helpers (i.e., `helpers.py`, a file that is available in the github repository)\n",
"2. Use the `%%sparql` magic command to indicate the SPARQL endpoint and then the SPARQL code.\n",
"\n",
"Let's try it!\n",
"\n",
"# Queries agains DBPedia\n",
"\n",
"We are going to execute a SPARQL query against DBPedia. This section is based on [[8](#8)].\n",
"\n",
"First, we just create a query to retrieve arbitrary triples (subject, predicate, object) without any restriction (besides limiting the result to 10 triples)."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from helpers import sparql"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"%%sparql https://live.dbpedia.org/sparql\n",
"\n",
"SELECT ?s ?p ?o\n",
"WHERE {\n",
" ?s ?p ?o\n",
"}\n",
"LIMIT 10"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Well, it worked, but the results are not particulary interesting. \n",
"Let's search for a famous football player, Fernando Torres.\n",
"\n",
"To do so, we will search for entities whose English \"human-readable representation\" (i.e., label) matches \"Fernando Torres\":"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"%%sparql https://live.dbpedia.org/sparql\n",
"\n",
"SELECT *\n",
"WHERE\n",
" {\n",
" ?athlete rdfs:label \"Fernando Torres\"@en \n",
" }"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Great, we found the IRI of the node: `http://dbpedia.org/resource/Fernando_Torres`\n",
"\n",
"Now we can start asking for more properties.\n",
"\n",
"To do so, go to http://dbpedia.org/resource/Fernando_Torres and you will see all the information available about Fernando Torres. Pay attention to the names of predicates to be able to create new queries. For example, we are interesting in knowing where Fernando Torres was born (`dbo:birthPlace`).\n",
"\n",
"Let's go!"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"%%sparql https://dbpedia.org/sparql\n",
"\n",
"PREFIX dbo: <http://dbpedia.org/ontology/>\n",
"\n",
"SELECT *\n",
"WHERE\n",
" {\n",
" ?athlete rdfs:label \"Fernando Torres\"@en ;\n",
" dbo:birthPlace ?birthPlace . \n",
" }"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If we examine the SPARQL query, we find three blocks:\n",
"\n",
"* **PREFIX** section: IRIs of vocabularies and the prefix used below, to avoid long IRIs. e.g., by defining the `dbo` prefix in our example, the `dbo:birthPlace` below expands to `http://dbpedia.org/ontology/birthPlace`.\n",
"* **SELECT** section: variables we want to return (`*` is an abbreviation that selects all of the variables in a query)\n",
"* **WHERE** clause: triples where some elements are variables. These variables are bound during the query processing process and bounded variables are returned.\n",
"\n",
"Now take a closer look at the **WHERE** section.\n",
"We said earlier that triples are made out of three elements and each triple pattern should finish with a period (`.`) (although the last pattern can omit this).\n",
"However, when two or more triple patterns share the same subject, we omit it all but the first one, and use ` ;` as separator.\n",
"If if both the subject and predicate are the same, we could use a coma `,` instead.\n",
"This allows us to avoid repetition and make queries more readable.\n",
"But don't forget the space before your separators (`;` and `.`).\n",
"\n",
"The result is interesting, we know he was born in Fuenlabrada, but we see an additional (wrong) value, the Spanish national football team. The conversion process from Wikipedia to DBPedia should still be tuned :).\n",
"\n",
"We can *fix* it, by adding some more constaints.\n",
"In our case, only want a birth place that is also a municipality (i.e., its type is `http://dbpedia.org/resource/Municipalities_of_Spain`).\n",
"Let's see!"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"%%sparql https://dbpedia.org/sparql\n",
"\n",
"PREFIX dbo: <http://dbpedia.org/ontology/>\n",
"PREFIX dbr: <http://dbpedia.org/resource/>\n",
"\n",
"SELECT *\n",
"WHERE\n",
" {\n",
" ?athlete rdfs:label \"Fernando Torres\"@en ;\n",
" dbo:birthPlace ?birthPlace .\n",
" ?birthPlace dbo:type dbr:Municipalities_of_Spain \n",
" }"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Great. Now it looks better.\n",
"Notice that we added a new prefix.\n",
"\n",
"Now, is Fuenlabrada is a big city?\n",
"Let's find out.\n",
"\n",
"**Hint**: you can find more subject / object / predicate nodes related to [Fuenlabrada])http://dbpedia.org/resource/Fuenlabrada) in the RDF graph just as we did before.\n",
"That is how we found the `dbo:areaTotal` property."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"%%sparql https://dbpedia.org/sparql\n",
"\n",
"PREFIX dbo: <http://dbpedia.org/ontology/>\n",
"PREFIX dbr: <http://dbpedia.org/resource/>\n",
"\n",
"SELECT *\n",
"WHERE\n",
" {\n",
" dbr:Fuenlabrada dbo:areaTotal ?area \n",
" }"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Well, it shows 39.1 km$^2$.\n",
"\n",
"Let's go back to our Fernando Torres.\n",
"What we are really insterested in is the name of the city he was born in, not its IRI.\n",
"As we saw before, the human-readable name is provided by the `rdfs:label` property:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"%%sparql https://dbpedia.org/sparql\n",
"\n",
"PREFIX dbo: <http://dbpedia.org/ontology/>\n",
"PREFIX dbp: <http://dbpedia.org/property/>\n",
"\n",
"SELECT *\n",
"WHERE\n",
" {\n",
" ?player rdfs:label \"Fernando Torres\"@en ;\n",
" dbo:birthPlace ?birthPlace .\n",
" ?birthPlace dbo:type dbr:Municipalities_of_Spain ;\n",
" rdfs:label ?placeName \n",
" \n",
" }"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Well, we are almost there. We see that we receive the city name in many languages. We want just the English name. Let's filter!"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"%%sparql https://dbpedia.org/sparql\n",
"\n",
"PREFIX dbo: <http://dbpedia.org/ontology/>\n",
"PREFIX dbp: <http://dbpedia.org/property/>\n",
"\n",
"SELECT *\n",
"WHERE\n",
" {\n",
" ?player rdfs:label \"Fernando Torres\"@en ;\n",
" dbo:birthPlace ?birthPlace .\n",
" ?birthPlace dbo:type dbr:Municipalities_of_Spain ;\n",
" rdfs:label ?placeName .\n",
" FILTER ( LANG ( ?placeName ) = 'en' )\n",
" \n",
" }"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Awesome!\n",
"\n",
"But we said we don't care about the IRI of the place. We only want two pieces of data: Fernando's birth date and the name of his birthplace.\n",
"\n",
"Let's tune our query a bit more."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"%%sparql https://dbpedia.org/sparql\n",
"\n",
"PREFIX dbo: <http://dbpedia.org/ontology/>\n",
"PREFIX dbp: <http://dbpedia.org/property/>\n",
"\n",
"SELECT ?birthDate, ?placeName\n",
"WHERE\n",
" {\n",
" ?player rdfs:label \"Fernando Torres\"@en ;\n",
" dbo:birthDate ?birthDate ;\n",
" dbo:birthPlace ?birthPlace .\n",
" ?birthPlace dbo:type dbr:Municipalities_of_Spain ;\n",
" rdfs:label ?placeName .\n",
" FILTER ( LANG ( ?placeName ) = 'en' )\n",
" \n",
" }"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Great 😃\n",
"\n",
"Are there many football players born in Fuenlabrada? Let's find out!"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"%%sparql https://dbpedia.org/sparql\n",
"\n",
"PREFIX dbo: <http://dbpedia.org/ontology/>\n",
"PREFIX dbp: <http://dbpedia.org/property/>\n",
"\n",
"SELECT *\n",
"WHERE\n",
" {\n",
" ?player a dbo:SoccerPlayer ; \n",
" dbo:birthPlace dbr:Fuenlabrada . \n",
" }"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Well, not that many. Observe we have used `a`.\n",
"It is just an abbreviation for `rdf:type`, both can be used interchangeably.\n",
"\n",
"If you want additional examples, you can follow the notebook by [Shawn Graham](https://github.com/o-date/sparql-and-lod/blob/master/sparql-intro.ipynb), which is based on the SPARQL tutorial by Matthew Lincoln, available [here in English](https://programminghistorian.org/en/lessons/retired/graph-databases-and-SPARQL) and [here in Spanish](https://programminghistorian.org/es/lecciones/retirada/sparql-datos-abiertos-enlazados]). You have also a local copy of these tutorials together with this notebook [here in English](https://htmlpreview.github.io/?https://github.com/gsi-upm/sitc/blob/master/lod/tutorial/graph-databases-and-SPARQL.html) and [here in Spanish](https://htmlpreview.github.io/?https://github.com/gsi-upm/sitc/blob/master/lod/tutorial/sparql-datos-abiertos-enlazados.html). \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## References"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* <a id=\"1\">[1]</a> [SPARQL by Example. A Tutorial. Lee Feigenbaum. W3C, 2009](https://www.w3.org/2009/Talks/0615-qbe/#q1)\n",
"* <a id=\"2\">[2]</a> [RDF Primer W3C](https://www.w3.org/TR/rdf11-primer/)\n",
"* <a id=\"3\">[3]</a> [SPARQL queries of Beatles recording sessions](http://www.snee.com/bobdc.blog/2017/11/sparql-queries-of-beatles-reco.html)\n",
"* <a id=\"4\">[4]</a> [RDFLib documentation](https://rdflib.readthedocs.io/en/stable/).\n",
"* <a id=\"5\">[5]</a> [Wikidata Query Service query examples](https://www.wikidata.org/wiki/Wikidata:SPARQL_query_service/queries/examples)\n",
"* <a id=\"6\">[6]</a> [RDF Graph Data Model. Learn about the RDF graph model used by Stardog.](https://www.stardog.com/tutorials/data-model)\n",
"* <a id=\"7\">[7]</a> [Learn SPARQL Write Knowledge Graph queries using SPARQL with step-by-step examples.](https://www.stardog.com/tutorials/sparql/)\n",
"* <a id=\"8\">[8]</a> [Running Basic SPARQL Queries Against DBpedia.](https://medium.com/virtuoso-blog/dbpedia-basic-queries-bc1ac172cc09)\n",
"* <a id=\"8\">[9]</a> [Intro SPARQL based on painters.](https://github.com/o-date/sparql-and-lod/blob/master/sparql-intro.ipynb)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Licence\n",
"The notebook is freely licensed under under the [Creative Commons Attribution Share-Alike license](https://creativecommons.org/licenses/by/2.0/). \n",
"\n",
"© Carlos A. Iglesias, Universidad Politécnica de Madrid."
]
}
],
"metadata": {
"datacleaner": {
"position": {
"top": "50px"
},
"python": {
"varRefreshCmd": "try:\n print(_datacleaner.dataframe_metadata())\nexcept:\n print([])"
},
"window_display": false
},
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.1"
},
"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
}
},
"nbformat": 4,
"nbformat_minor": 1
}

View File

@@ -6,11 +6,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "7276f055a8c504d3c80098c62ed41a4f",
"grade": false,
"grade_id": "cell-0bfe38f97f6ab2d2",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -56,11 +57,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"checksum": "99aecbad8f94966d92d72dc911d3ff99",
"cell_type": "markdown",
"checksum": "40ccd05ad0704781327031a84dfb9939",
"grade": false,
"grade_id": "cell-4f8492996e74bf20",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -69,7 +71,7 @@
"\n",
"* This notebook\n",
"* External SPARQL editors (optional)\n",
" * YASGUI-GSI http://yasgui.cluster.gsi.dit.upm.es\n",
" * YASGUI-GSI http://yasgui.gsi.upm.es\n",
" * DBpedia virtuoso http://dbpedia.org/sparql\n",
"\n",
"Using the YASGUI-GSI editor has several advantages over other options.\n",
@@ -93,18 +95,19 @@
"deletable": false,
"editable": false,
"nbgrader": {
"checksum": "99e3107f9987cdddae7866dded27f165",
"cell_type": "markdown",
"checksum": "81894e9d65e5dd9f3b6e1c5f66804bf6",
"grade": false,
"grade_id": "cell-70ac24910356c3cf",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
"source": [
"## Instructions\n",
"\n",
"We will be using a semantic server, available at: http://fuseki.cluster.gsi.dit.upm.es/sitc.\n",
"We will be using a semantic server, available at: http://fuseki.gsi.upm.es/sitc.\n",
"\n",
"This server contains a dataset about [Beatles songs](http://www.snee.com/bobdc.blog/2017/11/sparql-queries-of-beatles-reco.html), which we will query with SPARQL.\n",
"\n",
@@ -122,11 +125,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "1d332d3d11fd6b57f0ec0ac3c358c6cb",
"grade": false,
"grade_id": "cell-eb13908482825e42",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -144,11 +148,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "aca7c5538b8fc53e99c92e94e6818c83",
"grade": false,
"grade_id": "cell-b3f3d92fa2100c3d",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -163,11 +168,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "e896b6560e45d5c385a43aa85e3523c7",
"grade": false,
"grade_id": "cell-04410e75828c388d",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -193,11 +199,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"checksum": "96ca90572d6b275fa515c6b976115257",
"cell_type": "markdown",
"checksum": "34710d3bb8e2cf826833a43adb7fb448",
"grade": false,
"grade_id": "cell-2a44c0da2c206d01",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -210,7 +217,7 @@
"Some examples are:\n",
"\n",
"* DBpedia's virtuoso query editor https://dbpedia.org/sparql\n",
"* A javascript based client hosted at GSI: http://yasgui.cluster.gsi.dit.upm.es/\n",
"* A javascript based client hosted at GSI: http://yasgui.gsi.upm.es/\n",
"\n",
"[^1]: http://www.snee.com/bobdc.blog/2017/11/sparql-queries-of-beatles-reco.html"
]
@@ -221,11 +228,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "79c60bd3d4c13f380aae5778c5ce7245",
"grade": false,
"grade_id": "cell-d645128d3af18117",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -241,11 +249,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "f7428fe79cd33383dfd3b09a0d951b6e",
"grade": false,
"grade_id": "cell-8391a5322a9ad4a7",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -260,11 +269,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "f6b5da583694dd5cc9326c670830875d",
"grade": false,
"grade_id": "cell-4f56a152e4d70c02",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -313,17 +323,18 @@
"deletable": false,
"editable": false,
"nbgrader": {
"checksum": "7a9dc62ab639143c9fc13593e50500d4",
"cell_type": "code",
"checksum": "3bc71f851a33fa401d18ea3ab02cf61f",
"grade": false,
"grade_id": "cell-8ce8c954513f17e7",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/sitc/\n",
"%%sparql http://fuseki.gsi.upm.es/sitc/\n",
"\n",
"SELECT ?entity ?type\n",
"WHERE {\n",
@@ -338,11 +349,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "d6a79c2f5fd005a9e15a8f67dcfd4784",
"grade": false,
"grade_id": "cell-3d6d622c717c3950",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -375,17 +387,18 @@
"metadata": {
"deletable": false,
"nbgrader": {
"checksum": "69e016b0224f410f03f6217ac30c03a8",
"cell_type": "code",
"checksum": "65be7168bedb4f6dc2f19e2138bab232",
"grade": false,
"grade_id": "cell-6e904d692b5facad",
"locked": false,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/sitc/\n",
"%%sparql http://fuseki.gsi.upm.es/sitc/\n",
"\n",
"SELECT ?entity ?prop\n",
"WHERE {\n",
@@ -401,12 +414,13 @@
"deletable": false,
"editable": false,
"nbgrader": {
"checksum": "97bd5d5383bd94a72c7452bc33e4b0f9",
"cell_type": "code",
"checksum": "e78b57fa9baab578f5a4bd22dc499fca",
"grade": true,
"grade_id": "cell-3fc0d3c43dfd04a3",
"locked": true,
"points": 0,
"schema_version": 1,
"points": 1,
"schema_version": 3,
"solution": false
}
},
@@ -440,7 +454,7 @@
"metadata": {},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/sitc/\n",
"%%sparql http://fuseki.gsi.upm.es/sitc/\n",
"\n",
"SELECT ?type\n",
"WHERE {\n",
@@ -465,7 +479,7 @@
"metadata": {},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/sitc/\n",
"%%sparql http://fuseki.gsi.upm.es/sitc/\n",
"\n",
"SELECT DISTINCT ?type\n",
"WHERE {\n",
@@ -507,17 +521,18 @@
"metadata": {
"deletable": false,
"nbgrader": {
"checksum": "47c4f68e342ffe59a3804de7b6a3909b",
"cell_type": "code",
"checksum": "35563ff455c7e8b1c91f61db97b2011b",
"grade": false,
"grade_id": "cell-e615f9a77c4bc9a5",
"locked": false,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/sitc/\n",
"%%sparql http://fuseki.gsi.upm.es/sitc/\n",
"\n",
"SELECT DISTINCT ?property\n",
"WHERE {\n",
@@ -532,12 +547,13 @@
"deletable": false,
"editable": false,
"nbgrader": {
"checksum": "c9ffeba2d4ffc3e0b95f15a0ec6012c5",
"cell_type": "code",
"checksum": "7603c90d8c177e2e6678baa2f1b6af36",
"grade": true,
"grade_id": "cell-9168718938ab7347",
"locked": true,
"points": 0,
"schema_version": 1,
"points": 1,
"schema_version": 3,
"solution": false
}
},
@@ -569,7 +585,7 @@
"metadata": {},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/sitc/\n",
"%%sparql http://fuseki.gsi.upm.es/sitc/\n",
"\n",
"PREFIX s: <http://learningsparql.com/ns/schema/>\n",
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n",
@@ -638,17 +654,18 @@
"metadata": {
"deletable": false,
"nbgrader": {
"checksum": "8b0faf938efc1a64a70515da3c132605",
"cell_type": "code",
"checksum": "069811507dbac4b86dc5d3adc82ba4ec",
"grade": false,
"grade_id": "cell-0223a51f609edcf9",
"locked": false,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/sitc/\n",
"%%sparql http://fuseki.gsi.upm.es/sitc/\n",
"\n",
"PREFIX s: <http://learningsparql.com/ns/schema/>\n",
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n",
@@ -667,12 +684,13 @@
"deletable": false,
"editable": false,
"nbgrader": {
"checksum": "e93d7336fd125d95996e60fd312a4e4d",
"cell_type": "code",
"checksum": "9833a3efa75c7e2784ef5d60aae2a13e",
"grade": true,
"grade_id": "cell-3c7943c6382c62f5",
"locked": true,
"points": 0,
"schema_version": 1,
"points": 1,
"schema_version": 3,
"solution": false
}
},
@@ -706,17 +724,18 @@
"metadata": {
"deletable": false,
"nbgrader": {
"checksum": "271f2b194c2db4c558a46e8312b593e6",
"cell_type": "code",
"checksum": "b68a279085a1ed087f5e474a6602299e",
"grade": false,
"grade_id": "cell-8f43547dd788bb33",
"locked": false,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/sitc/\n",
"%%sparql http://fuseki.gsi.upm.es/sitc/\n",
"\n",
"PREFIX s: <http://learningsparql.com/ns/schema/>\n",
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n",
@@ -735,12 +754,13 @@
"deletable": false,
"editable": false,
"nbgrader": {
"checksum": "9f1f7cec8ce4674971543728ada86674",
"cell_type": "code",
"checksum": "b4461d243cc058b1828769cc906d4947",
"grade": true,
"grade_id": "cell-e13a1c921af2f6eb",
"locked": true,
"points": 0,
"schema_version": 1,
"points": 1,
"schema_version": 3,
"solution": false
}
},
@@ -790,17 +810,18 @@
"metadata": {
"deletable": false,
"nbgrader": {
"checksum": "9dcd9c6d51a61ac129cffa06e1463c66",
"cell_type": "code",
"checksum": "335403f01e484ce5563ff059e9764ff4",
"grade": false,
"grade_id": "cell-a0f0b9d9b05c9631",
"locked": false,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/sitc/\n",
"%%sparql http://fuseki.gsi.upm.es/sitc/\n",
"\n",
"PREFIX s: <http://learningsparql.com/ns/schema/>\n",
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n",
@@ -820,12 +841,13 @@
"deletable": false,
"editable": false,
"nbgrader": {
"checksum": "a044b3fd6b8bd4e098bbe4d818cb4e9f",
"cell_type": "code",
"checksum": "45530eb91cbc5b3fddcc93d96f07e579",
"grade": true,
"grade_id": "cell-bc012ca9d7ad2867",
"locked": true,
"points": 0,
"schema_version": 1,
"points": 1,
"schema_version": 3,
"solution": false
}
},
@@ -867,17 +889,18 @@
"metadata": {
"deletable": false,
"nbgrader": {
"checksum": "9da7a62b6237078f5eab7e593a8eb590",
"cell_type": "code",
"checksum": "8fb253675d2e8510e2c6780b960721e5",
"grade": false,
"grade_id": "cell-523b963fa4e288d0",
"locked": false,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/sitc/\n",
"%%sparql http://fuseki.gsi.upm.es/sitc/\n",
"\n",
"PREFIX s: <http://learningsparql.com/ns/schema/>\n",
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n",
@@ -898,12 +921,13 @@
"deletable": false,
"editable": false,
"nbgrader": {
"checksum": "c8e3a929faf2afa72207c6921382654c",
"cell_type": "code",
"checksum": "f4474b302bc2f634b3b2ee6e1c7e7257",
"grade": true,
"grade_id": "cell-aa9a4e18d6fda225",
"locked": true,
"points": 0,
"schema_version": 1,
"points": 1,
"schema_version": 3,
"solution": false
}
},
@@ -945,17 +969,18 @@
"metadata": {
"deletable": false,
"nbgrader": {
"checksum": "d8419711d2db43ad657e2658a1ea86c4",
"cell_type": "code",
"checksum": "c7b6620f5ba28b482197ab693cb7142a",
"grade": false,
"grade_id": "cell-e89d08031e30b299",
"locked": false,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/sitc/\n",
"%%sparql http://fuseki.gsi.upm.es/sitc/\n",
"\n",
"PREFIX s: <http://learningsparql.com/ns/schema/>\n",
"PREFIX m: <http://learningsparql.com/ns/musician/>\n",
@@ -975,12 +1000,13 @@
"deletable": false,
"editable": false,
"nbgrader": {
"checksum": "29404e07edf639cdc0ce0d82e654ec31",
"cell_type": "code",
"checksum": "c90e1427d7e48d9ae8abab40ff92e3b0",
"grade": true,
"grade_id": "cell-903d2be00885e1d2",
"locked": true,
"points": 0,
"schema_version": 1,
"points": 1,
"schema_version": 3,
"solution": false
}
},
@@ -1021,17 +1047,18 @@
"metadata": {
"deletable": false,
"nbgrader": {
"checksum": "7a0a7206384e7e1d9eb4450dd9e9871f",
"cell_type": "code",
"checksum": "7556bacb20c1fbd059dec165c982908d",
"grade": false,
"grade_id": "cell-1429e4eb5400dbc7",
"locked": false,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/sitc/\n",
"%%sparql http://fuseki.gsi.upm.es/sitc/\n",
"\n",
"PREFIX s: <http://learningsparql.com/ns/schema/>\n",
"PREFIX m: <http://learningsparql.com/ns/musician/>\n",
@@ -1053,12 +1080,13 @@
"deletable": false,
"editable": false,
"nbgrader": {
"checksum": "bd4dc379fea969d513be0ea97ee75922",
"cell_type": "code",
"checksum": "34a8432e8d4cea70994c8214ed0e5eb6",
"grade": true,
"grade_id": "cell-907aaf6001e27e50",
"locked": true,
"points": 0,
"schema_version": 1,
"points": 1,
"schema_version": 3,
"solution": false
}
},
@@ -1094,7 +1122,7 @@
"metadata": {},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/sitc/\n",
"%%sparql http://fuseki.gsi.upm.es/sitc/\n",
"\n",
"PREFIX s: <http://learningsparql.com/ns/schema/>\n",
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n",
@@ -1124,17 +1152,18 @@
"metadata": {
"deletable": false,
"nbgrader": {
"checksum": "4a231b4d6874dad435512b988c17c39e",
"cell_type": "code",
"checksum": "2d0633303eedd0655e9b64bb00317dba",
"grade": false,
"grade_id": "cell-ee208c762d00da9c",
"locked": false,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/sitc/\n",
"%%sparql http://fuseki.gsi.upm.es/sitc/\n",
"\n",
"PREFIX s: <http://learningsparql.com/ns/schema/>\n",
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n",
@@ -1156,12 +1185,13 @@
"deletable": false,
"editable": false,
"nbgrader": {
"checksum": "8118099bf14d9f0eb241c4d93ea6f0b9",
"cell_type": "code",
"checksum": "301aa479241fa02534ee047cf7577eee",
"grade": true,
"grade_id": "cell-ddeec32b8ac3d894",
"locked": true,
"points": 0,
"schema_version": 1,
"points": 1,
"schema_version": 3,
"solution": false
}
},
@@ -1193,7 +1223,7 @@
"metadata": {},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/sitc/\n",
"%%sparql http://fuseki.gsi.upm.es/sitc/\n",
"\n",
"PREFIX s: <http://learningsparql.com/ns/schema/>\n",
"PREFIX i: <http://learningsparql.com/ns/instrument/>\n",
@@ -1228,7 +1258,7 @@
"metadata": {},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/sitc/\n",
"%%sparql http://fuseki.gsi.upm.es/sitc/\n",
"\n",
"PREFIX s: <http://learningsparql.com/ns/schema/>\n",
"PREFIX i: <http://learningsparql.com/ns/instrument/>\n",
@@ -1261,17 +1291,18 @@
"metadata": {
"deletable": false,
"nbgrader": {
"checksum": "4b0a0854457c37640aad67f375ed3a17",
"cell_type": "code",
"checksum": "3bc508872193750d57d07efbf334c212",
"grade": false,
"grade_id": "cell-dcd68c45c1608a28",
"locked": false,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/sitc/\n",
"%%sparql http://fuseki.gsi.upm.es/sitc/\n",
"\n",
"PREFIX s: <http://learningsparql.com/ns/schema/>\n",
"PREFIX i: <http://learningsparql.com/ns/instrument/>\n",
@@ -1294,12 +1325,13 @@
"deletable": false,
"editable": false,
"nbgrader": {
"checksum": "f7122b2284b5d59d59ce4a2925f0bb21",
"cell_type": "code",
"checksum": "69edef3121b8dfab385a00cd181c956f",
"grade": true,
"grade_id": "cell-1e706b9c1c1331bc",
"locked": true,
"points": 0,
"schema_version": 1,
"points": 1,
"schema_version": 3,
"solution": false
}
},
@@ -1343,17 +1375,18 @@
"metadata": {
"deletable": false,
"nbgrader": {
"checksum": "09621e7af911faf39a834e8281bc6d1f",
"cell_type": "code",
"checksum": "300df0a3cf9729dd4814b3153b2fedb4",
"grade": false,
"grade_id": "cell-0c7cc924a13d792a",
"locked": false,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/sitc/\n",
"%%sparql http://fuseki.gsi.upm.es/sitc/\n",
"\n",
"PREFIX s: <http://learningsparql.com/ns/schema/>\n",
"PREFIX i: <http://learningsparql.com/ns/instrument/>\n",
@@ -1379,12 +1412,13 @@
"deletable": false,
"editable": false,
"nbgrader": {
"checksum": "cebff8ce42f3f36923e81e083a23d24c",
"cell_type": "code",
"checksum": "22d6fcdb72a8b2c5ab496cdbb5e2740a",
"grade": true,
"grade_id": "cell-2541abc93ab4d506",
"locked": true,
"points": 0,
"schema_version": 1,
"points": 1,
"schema_version": 3,
"solution": false
}
},
@@ -1416,17 +1450,18 @@
"metadata": {
"deletable": false,
"nbgrader": {
"checksum": "ea9797f3b2d001ea41d7fa7a5170d5fb",
"cell_type": "code",
"checksum": "e4e898c8a16b8aa5865dfde2f6e68ec6",
"grade": false,
"grade_id": "cell-d750b6d64c6aa0a7",
"locked": false,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/sitc/\n",
"%%sparql http://fuseki.gsi.upm.es/sitc/\n",
"\n",
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> \n",
"PREFIX s: <http://learningsparql.com/ns/schema/>\n",
@@ -1478,17 +1513,18 @@
"metadata": {
"deletable": false,
"nbgrader": {
"checksum": "2d82df272d43f678d3b19bf0b41530c1",
"cell_type": "code",
"checksum": "fade6ab714376e0eabfa595dd6bd6a8b",
"grade": false,
"grade_id": "cell-2f5aa516f8191787",
"locked": false,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/sitc/\n",
"%%sparql http://fuseki.gsi.upm.es/sitc/\n",
"\n",
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> \n",
"PREFIX s: <http://learningsparql.com/ns/schema/>\n",
@@ -1513,12 +1549,13 @@
"deletable": false,
"editable": false,
"nbgrader": {
"checksum": "bc83dd9577c9111b1f0ef5bd40c4ec08",
"cell_type": "code",
"checksum": "33e93ec2a3d1f9eb4b0310d4651b74c2",
"grade": true,
"grade_id": "cell-bcd0f7e26b6c11c2",
"locked": true,
"points": 0,
"schema_version": 1,
"points": 1,
"schema_version": 3,
"solution": false
}
},
@@ -1567,17 +1604,18 @@
"metadata": {
"deletable": false,
"nbgrader": {
"checksum": "a1e20e2be817a592683dea89eed0120e",
"cell_type": "code",
"checksum": "09262d81449c498c37e4b9d9b1dcdfed",
"grade": false,
"grade_id": "cell-d3a742bd87d9c793",
"locked": false,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/sitc/\n",
"%%sparql http://fuseki.gsi.upm.es/sitc/\n",
"\n",
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> \n",
"PREFIX s: <http://learningsparql.com/ns/schema/>\n",
@@ -1597,12 +1635,13 @@
"deletable": false,
"editable": false,
"nbgrader": {
"checksum": "087630476d73bb415b065fafbd6024f0",
"cell_type": "code",
"checksum": "d583b30a1e00960df3a4411b6854c8c8",
"grade": true,
"grade_id": "cell-409402df0e801d09",
"locked": true,
"points": 0,
"schema_version": 1,
"points": 1,
"schema_version": 3,
"solution": false
}
},
@@ -1648,17 +1687,18 @@
"metadata": {
"deletable": false,
"nbgrader": {
"checksum": "1d2cb88412c89c35861a4f9fccea3bf2",
"cell_type": "code",
"checksum": "9ddd2d1f50f841b889bfd29b175d06da",
"grade": false,
"grade_id": "cell-9d1ec854eb530235",
"locked": false,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/sitc/\n",
"%%sparql http://fuseki.gsi.upm.es/sitc/\n",
"\n",
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> \n",
"\n",
@@ -1680,12 +1720,13 @@
"deletable": false,
"editable": false,
"nbgrader": {
"checksum": "aa20aa4d11632ea5bd6004df3187d979",
"cell_type": "code",
"checksum": "0ea5496acd1c3edd9e188b351690a533",
"grade": true,
"grade_id": "cell-a79c688b4566dbe8",
"locked": true,
"points": 0,
"schema_version": 1,
"points": 1,
"schema_version": 3,
"solution": false
}
},
@@ -1738,17 +1779,18 @@
"metadata": {
"deletable": false,
"nbgrader": {
"checksum": "508b7f8656e849838aa93cd38f1c6635",
"cell_type": "code",
"checksum": "d18e8b6e1d32aed395a533febb29fcb5",
"grade": false,
"grade_id": "cell-7ea1f5154cdd8324",
"locked": false,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/sitc/\n",
"%%sparql http://fuseki.gsi.upm.es/sitc/\n",
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> \n",
"PREFIX s: <http://learningsparql.com/ns/schema/>\n",
"PREFIX i: <http://learningsparql.com/ns/instrument/>\n",
@@ -1782,17 +1824,18 @@
"metadata": {
"deletable": false,
"nbgrader": {
"checksum": "cff1f9c034393f8af055e1f930d5fe32",
"cell_type": "code",
"checksum": "f926fa3a3568d122454a12312859cda1",
"grade": false,
"grade_id": "cell-b6bee887a1b1fc60",
"locked": false,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/sitc/\n",
"%%sparql http://fuseki.gsi.upm.es/sitc/\n",
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> \n",
"PREFIX s: <http://learningsparql.com/ns/schema/>\n",
"PREFIX i: <http://learningsparql.com/ns/instrument/>\n",
@@ -1844,7 +1887,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.2"
"version": "3.8.1"
}
},
"nbformat": 4,

View File

@@ -6,11 +6,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "7276f055a8c504d3c80098c62ed41a4f",
"grade": false,
"grade_id": "cell-0bfe38f97f6ab2d2",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -31,11 +32,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "42642609861283bc33914d16750b7efa",
"grade": false,
"grade_id": "cell-0cd673883ee592d1",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -59,11 +61,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "a3ecb4b300a5ab82376a4a8cb01f7e6b",
"grade": false,
"grade_id": "cell-10264483046abcc4",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -80,11 +83,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "2fedf0d73fc90104d1ab72c3413dfc83",
"grade": false,
"grade_id": "cell-4f8492996e74bf20",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -100,11 +104,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "c5f8646518bd832a47d71f9d3218237a",
"grade": false,
"grade_id": "cell-eb13908482825e42",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -148,7 +153,7 @@
"metadata": {},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/hotels\n",
"%%sparql http://fuseki.gsi.upm.es/hotels\n",
" \n",
"SELECT ?g (COUNT(?s) as ?count) WHERE {\n",
" GRAPH ?g {\n",
@@ -160,14 +165,12 @@
]
},
{
"cell_type": "code",
"execution_count": null,
"cell_type": "markdown",
"metadata": {},
"outputs": [],
"source": [
"You should see many graphs, with different triple counts.\n",
"\n",
"The biggest one should be http://fuseki.cluster.gsi.dit.upm.es/synthetic"
"The biggest one should be http://fuseki.gsi.upm.es/synthetic"
]
},
{
@@ -183,11 +186,11 @@
"metadata": {},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/hotels\n",
"%%sparql http://fuseki.gsi.upm.es/hotels\n",
" \n",
"SELECT *\n",
"WHERE {\n",
" GRAPH <http://fuseki.cluster.gsi.dit.upm.es/synthetic>{\n",
" GRAPH <http://fuseki.gsi.upm.es/synthetic>{\n",
" ?s ?p ?o .\n",
" }\n",
"}\n",
@@ -233,13 +236,13 @@
"metadata": {},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/hotels\n",
"%%sparql http://fuseki.gsi.upm.es/hotels\n",
"\n",
"PREFIX schema: <http://schema.org/>\n",
" \n",
"SELECT ?s ?o\n",
"WHERE {\n",
" GRAPH <http://fuseki.cluster.gsi.dit.upm.es/35c20a49f8c6581be1cf7bd56d12d131>{\n",
" GRAPH <http://fuseki.gsi.upm.es/35c20a49f8c6581be1cf7bd56d12d131>{\n",
" ?s a ?o .\n",
" }\n",
"\n",
@@ -264,11 +267,11 @@
"metadata": {},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/hotels\n",
"%%sparql http://fuseki.gsi.upm.es/hotels\n",
" \n",
"SELECT *\n",
"WHERE {\n",
" GRAPH <http://fuseki.cluster.gsi.dit.upm.es/synthetic>{\n",
" GRAPH <http://fuseki.gsi.upm.es/synthetic>{\n",
" ?s ?p ?o .\n",
" }\n",
"}\n",
@@ -295,7 +298,7 @@
"metadata": {},
"outputs": [],
"source": [
"%%sparql http://fuseki.cluster.gsi.dit.upm.es/hotels\n",
"%%sparql http://fuseki.gsi.upm.es/hotels\n",
"\n",
"PREFIX schema: <http://schema.org/>\n",
" \n",
@@ -308,7 +311,7 @@
" SELECT ?g\n",
" WHERE {\n",
" GRAPH ?g {}\n",
" FILTER (str(?g) != 'http://fuseki.cluster.gsi.dit.upm.es/synthetic')\n",
" FILTER (str(?g) != 'http://fuseki.gsi.upm.es/synthetic')\n",
" }\n",
" }\n",
"\n",
@@ -339,12 +342,13 @@
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "860c3977cd06736f1342d535944dbb63",
"grade": true,
"grade_id": "cell-9bd08e4f5842cb89",
"locked": false,
"points": 0,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
@@ -366,12 +370,13 @@
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "1946a7ed4aba8d168bb3fad898c05651",
"grade": true,
"grade_id": "cell-9dc1c9033198bb18",
"locked": false,
"points": 0,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
@@ -393,12 +398,13 @@
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "6714abc5226618b76dc4c1aaed6d1a49",
"grade": true,
"grade_id": "cell-6c18003ced54be23",
"locked": false,
"points": 0,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
@@ -449,7 +455,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.2"
"version": "3.8.1"
}
},
"nbformat": 4,

1417
lod/03_SPARQL_Writers.ipynb Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,661 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "7276f055a8c504d3c80098c62ed41a4f",
"grade": false,
"grade_id": "cell-0bfe38f97f6ab2d2",
"locked": true,
"schema_version": 3,
"solution": false
}
},
"source": [
"<header style=\"width:100%;position:relative\">\n",
" <div style=\"width:80%;float:right;\">\n",
" <h1>Course Notes for Learning Intelligent Systems</h1>\n",
" <h3>Department of Telematic Engineering Systems</h3>\n",
" <h5>Universidad Politécnica de Madrid</h5>\n",
" </div>\n",
" <img style=\"width:15%;\" src=\"../logo.jpg\" alt=\"UPM\" />\n",
"</header>"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "bd478e6253226d24ba7f33cb9f6ba706",
"grade": false,
"grade_id": "cell-0cd673883ee592d1",
"locked": true,
"schema_version": 3,
"solution": false
}
},
"source": [
"## Advanced SPARQL\n",
"\n",
"This notebook complements [the SPARQL notebook](./01_SPARQL.ipynb) with some advanced commands.\n",
"\n",
"If you have not completed the exercises in the previous notebook, please do so before continuing.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "9ea4fd529653214745b937d5fc4559e5",
"grade": false,
"grade_id": "cell-10264483046abcc4",
"locked": true,
"schema_version": 3,
"solution": false
}
},
"source": [
"## Objectives\n",
"\n",
"* To cover some SPARQL concepts that are less frequently used "
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "2fedf0d73fc90104d1ab72c3413dfc83",
"grade": false,
"grade_id": "cell-4f8492996e74bf20",
"locked": true,
"schema_version": 3,
"solution": false
}
},
"source": [
"## Tools\n",
"\n",
"See [the SPARQL notebook](./01_SPARQL_Introduction.ipynb#Tools)"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "c5f8646518bd832a47d71f9d3218237a",
"grade": false,
"grade_id": "cell-eb13908482825e42",
"locked": true,
"schema_version": 3,
"solution": false
}
},
"source": [
"Run this line to enable the `%%sparql` magic command."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from helpers import *"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Exercises"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Working with dates"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To explore dates, we will focus on our Writers example.\n",
"\n",
"First, search for writers born in the XX century.\n",
"You can use a special filter, knowing that `\"2000\"^^xsd:date` is the first date of year 2000."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "69e23e6e3dc06ca9d2b5d878c2baba94",
"grade": false,
"grade_id": "cell-ab7755944d46f9ca",
"locked": false,
"schema_version": 3,
"solution": true
}
},
"outputs": [],
"source": [
"%%sparql\n",
"\n",
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n",
"PREFIX dct:<http://purl.org/dc/terms/>\n",
"PREFIX dbc:<http://dbpedia.org/resource/Category:>\n",
"PREFIX dbo:<http://dbpedia.org/ontology/>\n",
"\n",
"SELECT ?escritor, ?nombre, year(?fechaNac) as ?nac\n",
"\n",
"WHERE {\n",
" ?escritor dct:subject dbc:Spanish_novelists .\n",
" ?escritor rdfs:label ?nombre .\n",
" ?escritor dbo:birthDate ?fechaNac .\n",
" FILTER(lang(?nombre) = \"es\") .\n",
" # YOUR ANSWER HERE\n",
"}\n",
"# YOUR ANSWER HERE\n",
"LIMIT 1000"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "211c632634327a1fd805326fa0520cdd",
"grade": true,
"grade_id": "cell-cf3821f2d33fb0f6",
"locked": true,
"points": 0,
"schema_version": 3,
"solution": false
}
},
"outputs": [],
"source": [
"assert 'Camilo José Cela' in solution()['columns']['nombre']\n",
"assert 'Javier Marías' in solution()['columns']['nombre']\n",
"assert all(int(x) > 1899 and int(x) < 2001 for x in solution()['columns']['nac'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, get the list of Spanish novelists that are still alive.\n",
"\n",
"A person is alive if their death date is not defined and the were born less than 100 years ago.\n",
"\n",
"Remember, we can check whether the optional value for a key was bound in a SPARQL query using `BOUND(?key)`."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "e4579d551790c33ba4662562c6a05d99",
"grade": false,
"grade_id": "cell-474b1a72dec6827c",
"locked": false,
"schema_version": 3,
"solution": true
}
},
"outputs": [],
"source": [
"%%sparql\n",
"\n",
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n",
"PREFIX dct:<http://purl.org/dc/terms/>\n",
"PREFIX dbc:<http://dbpedia.org/resource/Category:>\n",
"PREFIX dbo:<http://dbpedia.org/ontology/>\n",
"\n",
"SELECT ?escritor, ?nombre, year(?fechaNac) as ?nac\n",
"\n",
"WHERE {\n",
" ?escritor dct:subject dbc:Spanish_novelists .\n",
" ?escritor rdfs:label ?nombre .\n",
" ?escritor dbo:birthDate ?fechaNac .\n",
"# YOUR ANSWER HERE\n",
" FILTER(lang(?nombre) = \"es\") .\n",
"}\n",
"# YOUR ANSWER HERE\n",
"LIMIT 1000"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "770bbddef5210c28486a1929e4513ada",
"grade": true,
"grade_id": "cell-46b62dd2856bc919",
"locked": true,
"points": 0,
"schema_version": 3,
"solution": false
}
},
"outputs": [],
"source": [
"assert 'Fernando Arrabal' in solution()['columns']['nombre']\n",
"assert 'Albert Espinosa' in solution()['columns']['nombre']\n",
"for year in solution()['columns']['nac']:\n",
" assert int(year) >= 1918"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Working with badly formatted dates (OPTIONAL!)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, get the list of Spanish novelists that died before their fifties (i.e. younger than 50 years old), or that aren't 50 years old yet.\n",
"\n",
"For the sake of simplicity, you can use the `year(<date>)` function.\n",
"\n",
"Hint: you can use boolean logic in your filters (e.g. `&&` and `||`).\n",
"\n",
"Hint 2: Some dates are not formatted properly, which makes some queries fail when they shouldn't. As a workaround, you could convert the date to string, and back to date again: `xsd:dateTime(str(?date))`."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "2a24f623c23116fd23877facb487dd16",
"grade": false,
"grade_id": "cell-ceefd3c8fbd39d79",
"locked": false,
"schema_version": 3,
"solution": true
}
},
"outputs": [],
"source": [
"%%sparql\n",
"\n",
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n",
"PREFIX dct:<http://purl.org/dc/terms/>\n",
"PREFIX dbc:<http://dbpedia.org/resource/Category:>\n",
"PREFIX dbo:<http://dbpedia.org/ontology/>\n",
"\n",
"SELECT ?escritor, ?nombre, year(?fechaNac) as ?nac, ?fechaDef\n",
"\n",
"WHERE {\n",
" ?escritor dct:subject dbc:Spanish_novelists .\n",
" ?escritor rdfs:label ?nombre .\n",
" ?escritor dbo:birthDate ?fechaNac .\n",
" # YOUR ANSWER HERE\n",
"}\n",
"# YOUR ANSWER HERE\n",
"LIMIT 100"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "18bb2d8d586bf4a5231973e69958ab75",
"grade": true,
"grade_id": "cell-461cd6ccc6c2dc79",
"locked": true,
"points": 0,
"schema_version": 3,
"solution": false
}
},
"outputs": [],
"source": [
"assert 'Javier Sierra' in solution()['columns']['nombre']\n",
"assert 'http://dbpedia.org/resource/Sanmao_(author)' in solution()['columns']['escritor']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Regular expressions"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[Regular expressions](https://www.w3.org/TR/rdf-sparql-query/#funcex-regex) are a very powerful tool, but we will only cover the basics in this exercise.\n",
"\n",
"In essence, regular expressions match strings against patterns.\n",
"In their simplest form, they can be used to find substrings within a variable.\n",
"For instance, using `regex(?label, \"substring\")` would only match if and only if the `?label` variable contains `substring`.\n",
"But regular expressions can be more complex than that.\n",
"For instance, we can find patterns such as: a 10 digit number, a 5 character long string, or variables without whitespaces.\n",
"\n",
"The syntax of the regex function is the following:\n",
"\n",
"```\n",
"regex(?variable, \"pattern\", \"flags\")\n",
"```\n",
"\n",
"Flags are optional configuration options for the regular expression, such as *do not care about case* (`i` flag).\n",
"\n",
"As an example, let us find the cities in Madrid that contain \"de\" in their name."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"%%sparql\n",
"\n",
"SELECT ?localidad\n",
"WHERE {\n",
" ?localidad <http://dbpedia.org/ontology/isPartOf> <http://dbpedia.org/resource/Community_of_Madrid> .\n",
" ?localidad rdfs:label ?nombre .\n",
" FILTER (lang(?nombre) = \"es\" ).\n",
" FILTER regex(?nombre, \"de\", \"i\")\n",
"}\n",
"LIMIT 10"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, use regular expressions to find Spanish novelists whose **first name** is Juan.\n",
"In other words, their name **starts with** \"Juan\"."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "6e444c20b411033a6c45fd5a566018fa",
"grade": false,
"grade_id": "cell-a57d3546a812f689",
"locked": false,
"schema_version": 3,
"solution": true
}
},
"outputs": [],
"source": [
"%%sparql\n",
"\n",
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n",
"PREFIX dct:<http://purl.org/dc/terms/>\n",
"PREFIX dbc:<http://dbpedia.org/resource/Category:>\n",
"PREFIX dbr:<http://dbpedia.org/resource/>\n",
"PREFIX dbo:<http://dbpedia.org/ontology/>\n",
"\n",
"# YOUR ANSWER HERE\n",
"\n",
"WHERE {\n",
" {\n",
" ?escritor dct:subject dbc:Spanish_poets .\n",
" }\n",
" UNION {\n",
" ?escritor dct:subject dbc:Spanish_novelists .\n",
" }\n",
" ?escritor rdfs:label ?nombre\n",
" FILTER(lang(?nombre) = \"es\") .\n",
"# YOUR ANSWER HERE\n",
"}\n",
"ORDER BY ?nombre\n",
"LIMIT 1000"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "66db9abddfafa91c2dc25577457f71fb",
"grade": true,
"grade_id": "cell-c149fe65008f39a9",
"locked": true,
"points": 0,
"schema_version": 3,
"solution": false
}
},
"outputs": [],
"source": [
"assert len(solution()['columns']['nombre']) > 15\n",
"for i in solution()['columns']['nombre']:\n",
" assert 'Juan' in i\n",
"assert \"Robert Juan-Cantavella\" not in solution()['columns']['nombre']"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "1be6d6e4d8e74240ef07deffcbe5e71a",
"grade": false,
"grade_id": "cell-0c2f0113d97dc9de",
"locked": true,
"schema_version": 3,
"solution": false
}
},
"source": [
"## Group concat"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "c8dbb73a781bd24080804f289a1cea0b",
"grade": false,
"grade_id": "asdasdasdddddddddddasdasdsad",
"locked": true,
"schema_version": 3,
"solution": false
}
},
"source": [
"Sometimes, it is useful to aggregate results from form different rows.\n",
"For instance, we might want to get a comma-separated list of the names in each each autonomous community in Spain.\n",
"\n",
"In those cases, we can use the `GROUP_CONCAT` function."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"%%sparql\n",
"\n",
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n",
"PREFIX dbo: <http://dbpedia.org/ontology/>\n",
"PREFIX dbr: <http://dbpedia.org/resource/>\n",
" \n",
"SELECT ?com, GROUP_CONCAT(?name, \",\") as ?places # notice how we rename the variable\n",
"\n",
"WHERE {\n",
" ?localidad dbo:isPartOf ?com .\n",
" ?com dbo:type dbr:Autonomous_communities_of_Spain .\n",
" ?localidad rdfs:label ?name .\n",
" FILTER (lang(?name)=\"es\")\n",
"}\n",
"\n",
"ORDER BY ?com\n",
"LIMIT 100"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "e100e2f89c832cf832add62c107e4008",
"grade": false,
"grade_id": "asdiopjasdoijasdoijasd",
"locked": true,
"schema_version": 3,
"solution": false
}
},
"source": [
"Try it yourself, to get a list of works by each of these authors:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "9f6e26faab2be98c72fb7a917ac5a421",
"grade": false,
"grade_id": "cell-2e3de17c75047652",
"locked": false,
"schema_version": 3,
"solution": true
}
},
"outputs": [],
"source": [
"%%sparql\n",
"\n",
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n",
"PREFIX dct:<http://purl.org/dc/terms/>\n",
"PREFIX dbc:<http://dbpedia.org/resource/Category:>\n",
"PREFIX dbr:<http://dbpedia.org/resource/>\n",
"PREFIX dbo:<http://dbpedia.org/ontology/>\n",
"\n",
"# YOUR ANSWER HERE\n",
"\n",
"WHERE {\n",
" ?escritor dct:subject dbc:Spanish_novelists .\n",
" ?escritor rdfs:label ?nombre .\n",
" ?escritor dbo:birthDate ?fechaNac .\n",
" ?escritor dbo:birthPlace dbr:Madrid .\n",
" OPTIONAL {\n",
" ?obra dbo:author ?escritor .\n",
" ?obra rdfs:label ?titulo .\n",
" }\n",
" OPTIONAL {\n",
" ?escritor dbo:deathDate ?fechaDef .\n",
" }\n",
" FILTER (?fechaNac <= \"2000\"^^xsd:date).\n",
" FILTER (?fechaNac >= \"1918\"^^xsd:date).\n",
" FILTER (!bound(?fechaDef) || (?fechaNac >= \"1918\"^^xsd:date)) .\n",
" FILTER(lang(?nombre) = \"es\") .\n",
" FILTER(!bound(?titulo) || lang(?titulo) = \"en\") .\n",
"\n",
"}\n",
"ORDER BY ?nombre\n",
"LIMIT 10000"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## References"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Licence\n",
"The notebook is freely licensed under under the [Creative Commons Attribution Share-Alike license](https://creativecommons.org/licenses/by/2.0/). \n",
"\n",
"© 2018 Universidad Politécnica de Madrid."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

View File

@@ -20,7 +20,9 @@ display_javascript(js, raw=True)
def send_query(query, endpoint):
FORMATS = ",".join(["application/sparql-results+json", "text/javascript", "application/json"])
FORMATS = ",".join(["application/sparql-results+json",
"text/javascript",
"application/json"])
data = {'query': query}
# b = quote_plus(query)
@@ -33,7 +35,11 @@ def send_query(query, endpoint):
res = urlopen(r)
data = res.read().decode('utf-8')
if res.getcode() == 200:
return json.loads(data)
try:
return json.loads(data)
except Exception:
print('Got: ', data, file=sys.stderr)
raise
raise Exception('Error getting results: {}'.format(data))
@@ -60,7 +66,7 @@ def solution():
def query(query, endpoint=None, print_table=False):
global LAST_QUERY
endpoint = endpoint or "http://fuseki.cluster.gsi.dit.upm.es/sitc/"
endpoint = endpoint or "http://fuseki.gsi.upm.es/sitc/"
results = send_query(query, endpoint)
tuples = to_table(results)

View File

@@ -0,0 +1,61 @@
.highlight { padding-top: 0; margin: 0;}
.highlight .c { color: #999988; font-style: italic } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #000000; font-weight: bold } /* Keyword */
.highlight .o { color: #000000; font-weight: bold } /* Operator */
.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #999999; font-weight: bold; font-style: italic } /* Comment.Preproc */
.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #999999 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #aaaaaa } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { color: #000000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #000000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #000000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #000000; font-weight: bold } /* Keyword.Pseudo */
.highlight .kr { color: #000000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #009999 } /* Literal.Number */
.highlight .s { color: #d01040 } /* Literal.String */
.highlight .na { color: #008080 } /* Name.Attribute */
.highlight .nb { color: #0086B3 } /* Name.Builtin */
.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
.highlight .no { color: #008080 } /* Name.Constant */
.highlight .nd { color: #3c5d5d; font-weight: bold } /* Name.Decorator */
.highlight .ni { color: #800080 } /* Name.Entity */
.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
.highlight .nl { color: #990000; font-weight: bold } /* Name.Label */
.highlight .nn { color: #555555 } /* Name.Namespace */
.highlight .nt { color: #000080 } /* Name.Tag */
.highlight .nv { color: #008080 } /* Name.Variable */
.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mf { color: #009999 } /* Literal.Number.Float */
.highlight .mh { color: #009999 } /* Literal.Number.Hex */
.highlight .mi { color: #009999 } /* Literal.Number.Integer */
.highlight .mo { color: #009999 } /* Literal.Number.Oct */
.highlight .sb { color: #d01040 } /* Literal.String.Backtick */
.highlight .sc { color: #d01040 } /* Literal.String.Char */
.highlight .sd { color: #d01040 } /* Literal.String.Doc */
.highlight .s2 { color: #d01040 } /* Literal.String.Double */
.highlight .se { color: #d01040 } /* Literal.String.Escape */
.highlight .sh { color: #d01040 } /* Literal.String.Heredoc */
.highlight .si { color: #d01040 } /* Literal.String.Interpol */
.highlight .sx { color: #d01040 } /* Literal.String.Other */
.highlight .sr { color: #009926 } /* Literal.String.Regex */
.highlight .s1 { color: #d01040 } /* Literal.String.Single */
.highlight .ss { color: #990073 } /* Literal.String.Symbol */
.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
.highlight .vc { color: #008080 } /* Name.Variable.Class */
.highlight .vg { color: #008080 } /* Name.Variable.Global */
.highlight .vi { color: #008080 } /* Name.Variable.Instance */
.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */

968
lod/tutorial/css/style.css Normal file
View File

@@ -0,0 +1,968 @@
@media screen {
body {
font-family: 'Quattrocento', Verdana, sans-serif;
font-size:16px;
background-color:#ffffff;
}
.container {
max-width: 48rem;
overflow: hidden;
text-overflow: ellipsis;
}
/* =============================================================================
Helper classes
========================================================================== */
.noclear {
clear:none;
}
.expanded {
max-width: 58rem;
}
.garnish {
width: 23%;
padding:0;
}
.full-width {
width:80%;
margin: 0 auto;
text-align:center;
}
.float-right {
float:right;
margin-left: 1rem;
margin-bottom: 1rem;
}
.float-left {
margin-right: 1rem;
margin-bottom: 1rem;
}
/* =============================================================================
Home Page
========================================================================== */
.home-block {
padding:3rem 0;
color:#666;
}
.home-block h2 {
margin:0;
font-size:2.8rem;
color:#333;
text-align:center;
}
.home-block p {
margin:0rem;
font-family:'Open Sans';
font-size:1.2rem;
padding-top:2rem;
text-align:justify;
}
.home-block a:visited {
color: #38c;
}
.home-stripe-1 {
color:#eee;
background:#27b;
}
.home-stripe-1 h2, .home-stripe-2 h2 {
color:#fff;
}
.home-stripe-1 a:visited, .home-stripe-1 a:link {
color:#6bf;
}
.home-stripe-2 {
color:#fff;
background:#289;
}
.home-stripe-2 a:visited, .home-stripe-2 a:link {
color:#6cd;
}
.home-image {
width: 75%;
}
.home-logo img {
width: 200px;
}
.home-logo a h1 {
color: #fff;
}
.home-logo {
color: #fff;
}
.home-logo li {
font-size: 1.2rem;
}
.en-back {
background-color: #444444;
}
.es-back {
background-color: #535D7F;
}
.fr-back {
background-color: #3D7C81;
}
.pt-back {
background-color: #d6b664;
}
.sitewide-alert {
position: relative;
margin-bottom: 0;
}
/* =============================================================================
Lesson Headers
========================================================================== */
header {
margin:-3rem 0 3rem 0;
padding:0;
font-family:'Roboto', sans-serif;
color:#ccc;
background: #efefef;
border-top:1px solid #333;
border-bottom:1px solid #333;
text-align:left;
}
header .container-fluid {
margin:0;
padding:1rem;
background: #f5f5f5;
}
header h1 {
margin:0;
padding:0;
font-size:1.8rem;
text-align:left;
}
header h2 {
font-family:'Roboto', sans-serif;
font-size:1.2rem;
color:#333;
margin: 1.5rem 0 1.5rem 0rem;
text-align:left;
}
header h3, header h4 {
font: .9rem/1.1rem 'Roboto Condensed', sans-serif;
text-transform:uppercase;
font-variant:small-caps;
letter-spacing:80%;
color:#666;
margin:.3rem 0 0 0;
padding:0;
}
header h4 {
display:inline;
margin:0;
line-height:1.3rem;
}
header .header-image {
float:left;
border:.2rem solid gray;
margin:0;
padding:0;
max-width: 200px;
}
header .header-abstract {
font: 1rem/1.4rem 'Roboto', sans-serif;
color:#666;
margin:1rem 0;
}
header .header-helpers {
clear:both;
background:#ccc;
color:#fff;
border-top:1px solid #999;
border-bottom:1px solid #999;
}
header ul {
margin:0;
padding:0;
list-style-type: none;
}
header li, header .metarow {
font: .9rem/1.1rem 'Roboto Condensed';
}
header .metarow {
color:#999;
}
header .peer-review, header .open-license {
font-size: 0.9rem;
color: #666;
margin: 0;
}
/* =============================================================================
Lessons Index
========================================================================== */
/*****************
FILTER BUTTONS
******************/
ul.filter, ul.sort-by {
margin: 0 0 1rem 0;
padding: 0px;
text-align:center;
}
li.filter,
li.sort,
#filter-none {
font: .9rem/1.1rem 'Open Sans', sans-serif;
padding: .4rem .6rem;
border:none;
border-radius: 3px;
display:inline-block;
text-transform:uppercase;
text-decoration: none;
}
.filter li:hover,
.sort-by li:hover,
#filter-none:hover {
cursor: pointer;
}
.activities li.current:hover,
.filter li.current:hover,
.sort-by li.current:hover {
cursor:default;
}
.topic li a {
text-decoration: none;
}
.activities li {
background-color:#38c;
color:#fff;
}
.activities li:hover {
background-color:#16a;
}
.activities li.current {
background-color:#059;
}
.topics li {
background-color:#eee;
color: #38a;
}
.topics li:hover {
background-color:#ccc;
}
.topics li.current {
background-color:#aaa;
color: #333;
}
#filter-none {
width:99.5%;
clear:both;
text-align:center;
margin-bottom:1rem;
background-color:#fefefe;
color:#666;
border:1px solid #999;
}
#filter-none:hover {
background-color:#ededed;
}
/*****************
SEARCH
*****************/
.search-input {
width:55%;
clear:both;
margin-bottom:1rem;
background-color:#fefefe;
color:#666;
border:1px solid #999;
font: .9rem/1.1rem 'Open Sans',
sans-serif;
padding: .4rem .6rem;
border-radius: 3px;
display:inline-block;
text-transform:uppercase;
text-decoration: none;
}
#search-button,
#enable-search-button {
background-color: #efefef;
color: rgb(153, 143, 143);
width: 35%;
font: .9rem/1.1rem 'Open Sans',
sans-serif;
padding: .4rem .6rem;
border: none;
border-radius: 3px;
display: inline-block;
text-transform: uppercase;
text-decoration: none;
}
@media only screen and (max-width: 767px) {
/* phones */
#search-button,
#enable-search-button {
width: 80%;
}
}
#search-info-button {
padding: 0.5rem;
color: rgb(153, 143, 143);
}
#search-info {
display: none;
height:0px;
background:#efefef;
overflow:hidden;
transition:0.5s;
-webkit-transition:0.5s;
width: 100%;
text-align: left;
box-sizing: border-box;
}
#search-info.visible {
display: block;
height: fit-content;
height: -moz-max-content;
padding: 10px;
margin-top: 10px;
}
/*****************
SORT BUTTONS
*****************/
li.sort {
background-color: #efefef;
color:#666;
width:49.5%;
}
li.sort:hover {
text-decoration: none;
background-color:#cecece;
}
#current-sort {
font-size:75%;
}
.sort.my-desc:after, .sort-desc:after {
width: 0;
height: 0;
border-left: .4rem solid transparent;
border-right: .4rem solid transparent;
border-top: .4rem solid;
content:"";
position: relative;
top:.75rem;
right:-.3rem;
}
.sort.my-asc:after, .sort-asc:after {
width: 0;
height: 0;
border-left: .4rem solid transparent;
border-right: .4rem solid transparent;
border-bottom: .4rem solid;
content:"";
position: relative;
bottom:.75rem;
right:-.3rem;
}
.sort-desc:after {
top:1rem;
}
.sort-asc:after {
bottom:1rem;
}
/*****************************
LESSON INDEX RESULTS LIST
*****************************/
h2.results-title {
margin:1rem 0;
font: 1.6rem/2rem 'Roboto Condensed';
color:#666;
text-transform:uppercase;
}
#results-value {
color:#000;
}
#lesson-list .list ul {
margin:0;
padding:0;
}
#lesson-list .list li {
list-style-type:none;
margin:0;
}
.lesson-description {
margin-bottom:2rem;
padding:0rem;
min-height:120px;
text-align:left;
}
.lesson-description img {
width:100%;
}
.lesson-image {
width:120px;
float:left;
margin-right:1rem;
}
.above-title {
margin:0 0 .2rem 0;
font: .8rem/1rem 'Roboto Condensed';
color:#999;
text-transform:uppercase;
clear:none;
}
.lesson-description h2.title {
font: 1.2rem/1.3rem 'Crete Round', serif;
margin:0 0 .8rem 0;
clear:none;
}
.list .date,
.lesson-description .activity,
.lesson-description .topics,
.lesson-description .difficulty {
display: none;
}
#pre-loader {
visibility: hidden;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
width: 100%;
position: fixed;
top: 0;
left: 0;
z-index: 9999;
transition: opacity 0.3s linear;
background: rgba(211, 211, 211, 0.8);
}
/* =============================================================================
Top Navigation Bar
========================================================================== */
.navbar {
padding: .6rem 1rem;
margin: 0 0 3rem 0;
}
.navbar-dark .navbar-nav .nav-link {
font-family:'Open Sans';
text-transform:uppercase;
color:#fff;
font-size:.9rem;
}
.btn-group > .btn-secondary {
border-color: #333333;
background-color: #888888;
}
.lang {
text-transform:lowercase !important;
}
.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-brand:hover {
color:#39a;
}
.navbar-toggler-icon {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255,255,255, 1)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E");
}
.navbar-collapse {
text-align:center;
}
.navbar-dark .navbar-brand {
font-family:'Crete Round', serif;
color:#fff;
letter-spacing: .02em;
}
.btn-group > a.btn {
padding-left: 1rem;
padding-right: 1rem;
}
a.dropdown-item {
border-bottom:1px solid #ccc;
font-family:'Roboto';
}
.dropdown-menu {
position: absolute;
background: #fff;
border: 1px solid #ccc;
margin:0;
padding:0;
}
.dropdown-menu a {
font-size:.8rem;
line-height:2rem;
text-transform:uppercase;
}
.dropdown-menu a:last-child {
border-bottom:none;
}
.dropdown-menu:after, .dropdown-menu:before {
bottom: 100%;
left: 20%;
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
}
.dropdown-menu:after {
border-color: rgba(255, 255, 255, 0);
border-bottom-color: #fff;
border-width: 12px;
margin-left: -12px;
}
.dropdown-menu:before {
border-color: rgba(51, 153, 170, 0);
border-bottom-color: #ccc;
border-width: 13px;
margin-left: -13px;
}
.navbar-dark .navbar-nav .nav-link:focus {
color: #ccc;
}
.header-link {
position: absolute;
right: 0.6em;
opacity: 0;
-webkit-transition: opacity 0.2s ease-in-out 0.1s;
-moz-transition: opacity 0.2s ease-in-out 0.1s;
-ms-transition: opacity 0.2s ease-in-out 0.1s;
}
h2:hover .header-link,
h3:hover .header-link,
h4:hover .header-link,
h5:hover .header-link,
h6:hover .header-link {
opacity: 1;
}
/* =============================================================================
Lesson Typography
========================================================================== */
a {text-decoration:none;}
a:link {color: #38c;}
a:visited {color: #39a;}
a:hover {color: #555;}
a:active {color: #555;}
b, strong { font-weight: bold; }
blockquote { margin: 1em 2em; padding: 0 1em 0 1em; font-style: italic; border:1px solid #666; background: #eeeeee;}
hr {
display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 2em 0; padding: 0; }
img {
max-width:100%;
}
ins { background: #ff9; color: #000; text-decoration: none; }
h1,h2,h3,h4,h5 {
font-family:'Crete Round', serif;
font-weight:normal;
clear:both;
}
h1 {
font-size:2rem;
margin-bottom:1.5rem;
letter-spacing:-.03rem;
text-align:center;
}
h2 {
font-size:1.6rem;
margin-top:3rem;
letter-spacing:-.02rem;
}
h3 {
font-size:1.4rem;
margin-top:2.5rem;
}
h4 {
font-size:1.2rem;
margin-top:1.8rem;
}
h5 {
font-size:1.0rem;
margin-top:1.4rem;
}
h1 a, h2 a, h3 a, h4 a, h5 a {
text-decoration:none;
}
h1 a:link { color: #38c; }
h1 a:visited {color: #39a; }
/* select button generated by codeblocks.js */
.fa-align-left {opacity: 0.2;}
.highlight:hover .fa-align-left {opacity: 1;}
q { quotes: none; }
q:before, q:after { content: ""; content: none; }
small { font-size: 85%; }
/* Position subscript and superscript content without affecting line-height: h5bp.com/k */
sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
sup { top: -0.5em; }
sub { bottom: -0.25em; }
li {
margin-bottom:.5rem;
line-height:1.4rem;
}
li.nav-item {
margin-bottom:0;
}
.alert {
font-family: 'Roboto';
}
.alert h2, .alert h3, .alert h4 {
margin-top:0;
}
/* =============================================================================
Code Highlighting
========================================================================== */
code {
font-family: monospace, serif;
font-size:.9rem;
}
.highlight {
margin: 1rem 0 1rem 0;
padding:.5rem .2rem;
font-size:.9rem;
white-space: pre;
word-wrap: normal;
overflow: auto;
border: 1px solid #eee;
background: #fafafa;
}
/* =============================================================================
Figures
========================================================================== */
figure {
margin: 0 auto .5rem;
text-align: center;
display:table;
}
figcaption {
margin-top:.5rem;
font-family:'Open Sans';
font-size:0.8em;
color: #666;
display:block;
caption-side: bottom;
}
.author-info, .citation-info {
border-top:1px solid #333;
padding-top:1rem;
margin-top:2rem;
}
.author-name, .suggested-citation-header {
font-family:'Roboto Condensed';
font-weight: 600;
font-size:1.2rem;
color: #666;
text-transform:uppercase;
}
.author-description p, .suggested-citation-text p {
font-size:0.9rem;
font-family:'Open Sans';
color: #666;
}
/* =============================================================================
Tables
========================================================================== */
table {
width: 100%;
margin-bottom: 1em;
}
th, td {
padding: 10px;
text-align: left;
border-bottom: 1px solid #ddd;
}
thead {
background-color: #535353;
color: #fff;
font-weight: bold;
}
tr:nth-child(even) {background-color: #f2f2f2}
/* =============================================================================
Blog Index and Layout
========================================================================== */
.blog-header {
text-align:center;
}
.blog-header h2 {
margin:0;
line-height: 2rem;
}
.blog-header h3 { /*author*/
margin-top:.4rem;
color: #666;
font-size:1rem;
}
.blog-header h4{
color: #999;
font-size:1rem;
margin-bottom:.2rem;
font-family:'Roboto Condensed';
text-transform:uppercase;
}
.blog-header figure {
max-width:80%;
}
.blog-header figcaption {
text-align: center;
}
.blog-page-header {
margin-bottom:3rem;
}
/* =============================================================================
Project Team
========================================================================== */
.contact-box {
margin-bottom:3rem;
}
/* =============================================================================
Footer
========================================================================== */
footer[role="contentinfo"] {
margin-top: 2rem;
padding: 2rem 0;
font-family:'Open Sans';
font-size:.9rem;
color: #fff;
background-color:#666;
text-align:center;
}
footer a, footer a:link, footer a:visited {
color: #fff;
border-bottom:1px #eee dotted;
}
footer a:hover {
text-decoration: none;
border-bottom:1px #fff solid;
}
footer .fa {
margin: 0 .2rem 0rem 0rem;
}
.footer-head {
font-size:1.1rem;
line-height:1.4rem;
margin-bottom:1rem;
}
} /* end screen */
@media only screen and (max-width: 768px) {
.garnish {
display:none;
}
.dropdown-menu:after, .dropdown-menu:before {
display:none;
}
}
/* Print Styling */
@media screen {
/* Class to hide elements only shown when printing */
.hide-print {
display: none !important;
}
}
@media print {
* { background: transparent !important; color: black !important; box-shadow:none !important; text-shadow: none !important; filter:none !important; -ms-filter: none !important; } /* Black prints faster: h5bp.com/s */
a, a:visited { text-decoration: underline; }
a[href]:after { content: " (" attr(href) ")"; }
abbr[title]:after { content: " (" attr(title) ")"; }
a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } /* Don't show links for images, or javascript/internal links */
pre, blockquote {
border: 1px solid #999;
page-break-inside: avoid;
margin: 0.5cm;
padding: 0.5cm
}
thead { display: table-header-group; } /* h5bp.com/t */
tr, img { page-break-inside: avoid; }
img { max-width: 100% !important; }
@page {
margin: 1.5cm;
}
body { font-size: 0.85rem;}
p, h2, h3 { orphans: 3; widows: 3; }
h1, h2, h3 { page-break-after: avoid; }
h1 { font-size: 1.4rem; }
h2 { font-size: 1.1rem; }
h3 { font-size: 1rem; }
h4 { font-size: 0.9rem; }
.header-bottom {
margin-bottom: 2rem;
page-break-after: always;
}
.hide-screen {
/* Hide elements that only appear on screen */
display: none !important;
}
.print-header {
/* format navbar for print */
display: block;
z-index:1030;
width: 100%;
height: 3rem;
padding: .6rem 1rem;
margin-bottom: 1rem;
color:#fff;
white-space: nowrap;
font-family: 'Crete Round', serif;
border-bottom: 1px solid lightgrey;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 256 256" style="enable-background:new 0 0 256 256;" xml:space="preserve">
<style type="text/css">
.st0{fill:#A6CE39;}
.st1{fill:#FFFFFF;}
</style>
<path class="st0" d="M256,128c0,70.7-57.3,128-128,128C57.3,256,0,198.7,0,128C0,57.3,57.3,0,128,0C198.7,0,256,57.3,256,128z"/>
<g>
<path class="st1" d="M86.3,186.2H70.9V79.1h15.4v48.4V186.2z"/>
<path class="st1" d="M108.9,79.1h41.6c39.6,0,57,28.3,57,53.6c0,27.5-21.5,53.6-56.8,53.6h-41.8V79.1z M124.3,172.4h24.5
c34.9,0,42.9-26.5,42.9-39.7c0-21.5-13.7-39.7-43.7-39.7h-23.7V172.4z"/>
<path class="st1" d="M88.7,56.8c0,5.5-4.5,10.1-10.1,10.1c-5.6,0-10.1-4.6-10.1-10.1c0-5.6,4.5-10.1,10.1-10.1
C84.2,46.7,88.7,51.3,88.7,56.8z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 983 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 KiB

View File

@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.38.0 (20140413.2041)
-->
<!-- Title: %3 Pages: 1 -->
<svg width="262pt" height="124pt"
viewBox="0.00 0.00 261.53 124.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 120)">
<title>%3</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-120 257.533,-120 257.533,4 -4,4"/>
<!-- nw -->
<g id="node1" class="node"><title>nw</title>
<ellipse fill="none" stroke="gray" cx="49.3505" cy="-98" rx="49.2014" ry="18"/>
<text text-anchor="middle" x="49.3505" y="-95" font-family="Helvetica,sans-Serif" font-size="10.00">The Nightwatch</text>
</g>
<!-- oil -->
<g id="node3" class="node"><title>oil</title>
<ellipse fill="none" stroke="gray" cx="117.35" cy="-18" rx="42.8742" ry="18"/>
<text text-anchor="middle" x="117.35" y="-15" font-family="Helvetica,sans-Serif" font-size="10.00">oil on canvas</text>
</g>
<!-- nw&#45;&gt;oil -->
<g id="edge1" class="edge"><title>nw&#45;&gt;oil</title>
<path fill="none" stroke="gray" d="M63.7715,-80.4582C73.3018,-69.5265 85.9453,-55.0236 96.5567,-42.8517"/>
<polygon fill="gray" stroke="gray" points="99.2502,-45.0882 103.183,-35.2505 93.9738,-40.4882 99.2502,-45.0882"/>
<text text-anchor="middle" x="108.138" y="-55.6" font-family="Helvetica,sans-Serif" font-size="8.00">has medium</text>
</g>
<!-- wb -->
<g id="node2" class="node"><title>wb</title>
<ellipse fill="none" stroke="gray" cx="185.35" cy="-98" rx="68.3645" ry="18"/>
<text text-anchor="middle" x="185.35" y="-95" font-family="Helvetica,sans-Serif" font-size="10.00">Woman with a Balance</text>
</g>
<!-- wb&#45;&gt;oil -->
<g id="edge2" class="edge"><title>wb&#45;&gt;oil</title>
<path fill="none" stroke="gray" d="M170.595,-80.0752C161.138,-69.2266 148.718,-54.9801 138.252,-42.9755"/>
<polygon fill="gray" stroke="gray" points="140.589,-40.3299 131.38,-35.0922 135.313,-44.9299 140.589,-40.3299"/>
<text text-anchor="middle" x="176.138" y="-55.6" font-family="Helvetica,sans-Serif" font-size="8.00">has medium</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -0,0 +1,104 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.38.0 (20140413.2041)
-->
<!-- Title: %3 Pages: 1 -->
<svg width="438pt" height="212pt"
viewBox="0.00 0.00 437.70 212.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 208)">
<title>%3</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-208 433.703,-208 433.703,4 -4,4"/>
<!-- nw -->
<g id="node1" class="node"><title>nw</title>
<ellipse fill="none" stroke="gray" cx="132" cy="-186" rx="49.2014" ry="18"/>
<text text-anchor="middle" x="132" y="-183" font-family="Helvetica,sans-Serif" font-size="10.00">The Nightwatch</text>
</g>
<!-- rr -->
<g id="node2" class="node"><title>rr</title>
<ellipse fill="none" stroke="gray" cx="132" cy="-98" rx="60.0217" ry="18"/>
<text text-anchor="middle" x="132" y="-95" font-family="Helvetica,sans-Serif" font-size="10.00">Rembrandt van Rijn</text>
</g>
<!-- nw&#45;&gt;rr -->
<g id="edge1" class="edge"><title>nw&#45;&gt;rr</title>
<path fill="none" stroke="gray" d="M132,-167.597C132,-155.746 132,-139.817 132,-126.292"/>
<polygon fill="gray" stroke="gray" points="135.5,-126.084 132,-116.084 128.5,-126.084 135.5,-126.084"/>
<text text-anchor="middle" x="150.678" y="-143.6" font-family="Helvetica,sans-Serif" font-size="8.00">was</text>
<text text-anchor="middle" x="150.678" y="-135.6" font-family="Helvetica,sans-Serif" font-size="8.00">created by</text>
</g>
<!-- oil -->
<g id="node5" class="node"><title>oil</title>
<ellipse fill="none" stroke="gray" cx="253" cy="-98" rx="42.8742" ry="18"/>
<text text-anchor="middle" x="253" y="-95" font-family="Helvetica,sans-Serif" font-size="10.00">oil on canvas</text>
</g>
<!-- nw&#45;&gt;oil -->
<g id="edge3" class="edge"><title>nw&#45;&gt;oil</title>
<path fill="none" stroke="gray" d="M153.632,-169.625C173.196,-155.72 202.162,-135.133 223.779,-119.768"/>
<polygon fill="gray" stroke="gray" points="225.837,-122.6 231.96,-113.954 221.781,-116.894 225.837,-122.6"/>
<text text-anchor="middle" x="225.787" y="-139.6" font-family="Helvetica,sans-Serif" font-size="8.00">has medium</text>
</g>
<!-- nwd -->
<g id="node7" class="node"><title>nwd</title>
<ellipse fill="none" stroke="gray" cx="27" cy="-98" rx="27" ry="18"/>
<text text-anchor="middle" x="27" y="-95" font-family="Helvetica,sans-Serif" font-size="10.00">1642</text>
</g>
<!-- nw&#45;&gt;nwd -->
<g id="edge2" class="edge"><title>nw&#45;&gt;nwd</title>
<path fill="none" stroke="gray" d="M112.741,-169.226C95.413,-155.034 69.877,-134.118 51.1799,-118.804"/>
<polygon fill="gray" stroke="gray" points="53.3315,-116.043 43.3774,-112.414 48.896,-121.458 53.3315,-116.043"/>
<text text-anchor="middle" x="106.566" y="-143.6" font-family="Helvetica,sans-Serif" font-size="8.00">was</text>
<text text-anchor="middle" x="106.566" y="-135.6" font-family="Helvetica,sans-Serif" font-size="8.00">created in</text>
</g>
<!-- d -->
<g id="node6" class="node"><title>d</title>
<ellipse fill="none" stroke="gray" cx="263" cy="-18" rx="27" ry="18"/>
<text text-anchor="middle" x="263" y="-15" font-family="Helvetica,sans-Serif" font-size="10.00">Dutch</text>
</g>
<!-- rr&#45;&gt;d -->
<g id="edge5" class="edge"><title>rr&#45;&gt;d</title>
<path fill="none" stroke="gray" d="M157.881,-81.5897C180.033,-68.4005 211.867,-49.4456 234.691,-35.8559"/>
<polygon fill="gray" stroke="gray" points="236.761,-38.6968 243.563,-30.5735 233.18,-32.6822 236.761,-38.6968"/>
<text text-anchor="middle" x="227.572" y="-55.6" font-family="Helvetica,sans-Serif" font-size="8.00">has nationality</text>
</g>
<!-- rrb -->
<g id="node8" class="node"><title>rrb</title>
<ellipse fill="none" stroke="gray" cx="132" cy="-18" rx="27" ry="18"/>
<text text-anchor="middle" x="132" y="-15" font-family="Helvetica,sans-Serif" font-size="10.00">1606</text>
</g>
<!-- rr&#45;&gt;rrb -->
<g id="edge4" class="edge"><title>rr&#45;&gt;rrb</title>
<path fill="none" stroke="gray" d="M132,-79.6893C132,-69.8938 132,-57.4218 132,-46.335"/>
<polygon fill="gray" stroke="gray" points="135.5,-46.2623 132,-36.2623 128.5,-46.2624 135.5,-46.2623"/>
<text text-anchor="middle" x="152.455" y="-55.6" font-family="Helvetica,sans-Serif" font-size="8.00">was born in</text>
</g>
<!-- jv -->
<g id="node3" class="node"><title>jv</title>
<ellipse fill="none" stroke="gray" cx="372" cy="-98" rx="57.9076" ry="18"/>
<text text-anchor="middle" x="372" y="-95" font-family="Helvetica,sans-Serif" font-size="10.00">Johannes Vermeer</text>
</g>
<!-- jv&#45;&gt;d -->
<g id="edge6" class="edge"><title>jv&#45;&gt;d</title>
<path fill="none" stroke="gray" d="M349.942,-81.2155C332.328,-68.6108 307.605,-50.9191 289.023,-37.6222"/>
<polygon fill="gray" stroke="gray" points="290.879,-34.6462 280.71,-31.673 286.805,-40.3388 290.879,-34.6462"/>
<text text-anchor="middle" x="345.572" y="-55.6" font-family="Helvetica,sans-Serif" font-size="8.00">has nationality</text>
</g>
<!-- wb -->
<g id="node4" class="node"><title>wb</title>
<ellipse fill="none" stroke="gray" cx="277" cy="-186" rx="68.3645" ry="18"/>
<text text-anchor="middle" x="277" y="-183" font-family="Helvetica,sans-Serif" font-size="10.00">Woman with a Balance</text>
</g>
<!-- wb&#45;&gt;jv -->
<g id="edge7" class="edge"><title>wb&#45;&gt;jv</title>
<path fill="none" stroke="gray" d="M295.278,-168.646C301.824,-162.776 309.251,-156.101 316,-150 325.983,-140.975 336.934,-131.015 346.484,-122.31"/>
<polygon fill="gray" stroke="gray" points="349.095,-124.666 354.124,-115.341 344.377,-119.494 349.095,-124.666"/>
<text text-anchor="middle" x="350.678" y="-143.6" font-family="Helvetica,sans-Serif" font-size="8.00">was</text>
<text text-anchor="middle" x="350.678" y="-135.6" font-family="Helvetica,sans-Serif" font-size="8.00">created by</text>
</g>
<!-- wb&#45;&gt;oil -->
<g id="edge8" class="edge"><title>wb&#45;&gt;oil</title>
<path fill="none" stroke="gray" d="M272.258,-168.009C268.905,-155.995 264.342,-139.641 260.498,-125.869"/>
<polygon fill="gray" stroke="gray" points="263.791,-124.647 257.732,-115.956 257.049,-126.528 263.791,-124.647"/>
<text text-anchor="middle" x="289.787" y="-139.6" font-family="Helvetica,sans-Serif" font-size="8.00">has medium</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

@@ -0,0 +1,104 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.38.0 (20140413.2041)
-->
<!-- Title: %3 Pages: 1 -->
<svg width="438pt" height="212pt"
viewBox="0.00 0.00 437.70 212.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 208)">
<title>%3</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-208 433.703,-208 433.703,4 -4,4"/>
<!-- nw -->
<g id="node1" class="node"><title>nw</title>
<ellipse fill="none" stroke="red" cx="132" cy="-186" rx="49.2014" ry="18"/>
<text text-anchor="middle" x="132" y="-183" font-family="Helvetica,sans-Serif" font-size="10.00">The Nightwatch</text>
</g>
<!-- rr -->
<g id="node2" class="node"><title>rr</title>
<ellipse fill="none" stroke="red" cx="132" cy="-98" rx="60.0217" ry="18"/>
<text text-anchor="middle" x="132" y="-95" font-family="Helvetica,sans-Serif" font-size="10.00">Rembrandt van Rijn</text>
</g>
<!-- nw&#45;&gt;rr -->
<g id="edge1" class="edge"><title>nw&#45;&gt;rr</title>
<path fill="none" stroke="orange" d="M132,-167.597C132,-155.746 132,-139.817 132,-126.292"/>
<polygon fill="orange" stroke="orange" points="135.5,-126.084 132,-116.084 128.5,-126.084 135.5,-126.084"/>
<text text-anchor="middle" x="150.678" y="-143.6" font-family="Helvetica,sans-Serif" font-size="8.00">was</text>
<text text-anchor="middle" x="150.678" y="-135.6" font-family="Helvetica,sans-Serif" font-size="8.00">created by</text>
</g>
<!-- oil -->
<g id="node5" class="node"><title>oil</title>
<ellipse fill="none" stroke="gray" cx="253" cy="-98" rx="42.8742" ry="18"/>
<text text-anchor="middle" x="253" y="-95" font-family="Helvetica,sans-Serif" font-size="10.00">oil on canvas</text>
</g>
<!-- nw&#45;&gt;oil -->
<g id="edge3" class="edge"><title>nw&#45;&gt;oil</title>
<path fill="none" stroke="gray" d="M153.632,-169.625C173.196,-155.72 202.162,-135.133 223.779,-119.768"/>
<polygon fill="gray" stroke="gray" points="225.837,-122.6 231.96,-113.954 221.781,-116.894 225.837,-122.6"/>
<text text-anchor="middle" x="225.787" y="-139.6" font-family="Helvetica,sans-Serif" font-size="8.00">has medium</text>
</g>
<!-- nwd -->
<g id="node7" class="node"><title>nwd</title>
<ellipse fill="none" stroke="gray" cx="27" cy="-98" rx="27" ry="18"/>
<text text-anchor="middle" x="27" y="-95" font-family="Helvetica,sans-Serif" font-size="10.00">1642</text>
</g>
<!-- nw&#45;&gt;nwd -->
<g id="edge2" class="edge"><title>nw&#45;&gt;nwd</title>
<path fill="none" stroke="gray" d="M112.741,-169.226C95.413,-155.034 69.877,-134.118 51.1799,-118.804"/>
<polygon fill="gray" stroke="gray" points="53.3315,-116.043 43.3774,-112.414 48.896,-121.458 53.3315,-116.043"/>
<text text-anchor="middle" x="106.566" y="-143.6" font-family="Helvetica,sans-Serif" font-size="8.00">was</text>
<text text-anchor="middle" x="106.566" y="-135.6" font-family="Helvetica,sans-Serif" font-size="8.00">created in</text>
</g>
<!-- d -->
<g id="node6" class="node"><title>d</title>
<ellipse fill="none" stroke="orange" cx="263" cy="-18" rx="27" ry="18"/>
<text text-anchor="middle" x="263" y="-15" font-family="Helvetica,sans-Serif" font-size="10.00">Dutch</text>
</g>
<!-- rr&#45;&gt;d -->
<g id="edge5" class="edge"><title>rr&#45;&gt;d</title>
<path fill="none" stroke="orange" d="M157.881,-81.5897C180.033,-68.4005 211.867,-49.4456 234.691,-35.8559"/>
<polygon fill="orange" stroke="orange" points="236.761,-38.6968 243.563,-30.5735 233.18,-32.6822 236.761,-38.6968"/>
<text text-anchor="middle" x="227.572" y="-55.6" font-family="Helvetica,sans-Serif" font-size="8.00">has nationality</text>
</g>
<!-- rrb -->
<g id="node8" class="node"><title>rrb</title>
<ellipse fill="none" stroke="gray" cx="132" cy="-18" rx="27" ry="18"/>
<text text-anchor="middle" x="132" y="-15" font-family="Helvetica,sans-Serif" font-size="10.00">1606</text>
</g>
<!-- rr&#45;&gt;rrb -->
<g id="edge4" class="edge"><title>rr&#45;&gt;rrb</title>
<path fill="none" stroke="gray" d="M132,-79.6893C132,-69.8938 132,-57.4218 132,-46.335"/>
<polygon fill="gray" stroke="gray" points="135.5,-46.2623 132,-36.2623 128.5,-46.2624 135.5,-46.2623"/>
<text text-anchor="middle" x="152.455" y="-55.6" font-family="Helvetica,sans-Serif" font-size="8.00">was born in</text>
</g>
<!-- jv -->
<g id="node3" class="node"><title>jv</title>
<ellipse fill="none" stroke="red" cx="372" cy="-98" rx="57.9076" ry="18"/>
<text text-anchor="middle" x="372" y="-95" font-family="Helvetica,sans-Serif" font-size="10.00">Johannes Vermeer</text>
</g>
<!-- jv&#45;&gt;d -->
<g id="edge6" class="edge"><title>jv&#45;&gt;d</title>
<path fill="none" stroke="orange" d="M349.942,-81.2155C332.328,-68.6108 307.605,-50.9191 289.023,-37.6222"/>
<polygon fill="orange" stroke="orange" points="290.879,-34.6462 280.71,-31.673 286.805,-40.3388 290.879,-34.6462"/>
<text text-anchor="middle" x="345.572" y="-55.6" font-family="Helvetica,sans-Serif" font-size="8.00">has nationality</text>
</g>
<!-- wb -->
<g id="node4" class="node"><title>wb</title>
<ellipse fill="none" stroke="red" cx="277" cy="-186" rx="68.3645" ry="18"/>
<text text-anchor="middle" x="277" y="-183" font-family="Helvetica,sans-Serif" font-size="10.00">Woman with a Balance</text>
</g>
<!-- wb&#45;&gt;jv -->
<g id="edge7" class="edge"><title>wb&#45;&gt;jv</title>
<path fill="none" stroke="orange" d="M295.278,-168.646C301.824,-162.776 309.251,-156.101 316,-150 325.983,-140.975 336.934,-131.015 346.484,-122.31"/>
<polygon fill="orange" stroke="orange" points="349.095,-124.666 354.124,-115.341 344.377,-119.494 349.095,-124.666"/>
<text text-anchor="middle" x="350.678" y="-143.6" font-family="Helvetica,sans-Serif" font-size="8.00">was</text>
<text text-anchor="middle" x="350.678" y="-135.6" font-family="Helvetica,sans-Serif" font-size="8.00">created by</text>
</g>
<!-- wb&#45;&gt;oil -->
<g id="edge8" class="edge"><title>wb&#45;&gt;oil</title>
<path fill="none" stroke="gray" d="M272.258,-168.009C268.905,-155.995 264.342,-139.641 260.498,-125.869"/>
<polygon fill="gray" stroke="gray" points="263.791,-124.647 257.732,-115.956 257.049,-126.528 263.791,-124.647"/>
<text text-anchor="middle" x="289.787" y="-139.6" font-family="Helvetica,sans-Serif" font-size="8.00">has medium</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

@@ -0,0 +1,104 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.38.0 (20140413.2041)
-->
<!-- Title: %3 Pages: 1 -->
<svg width="438pt" height="212pt"
viewBox="0.00 0.00 437.70 212.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 208)">
<title>%3</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-208 433.703,-208 433.703,4 -4,4"/>
<!-- nw -->
<g id="node1" class="node"><title>nw</title>
<ellipse fill="none" stroke="red" cx="132" cy="-186" rx="49.2014" ry="18"/>
<text text-anchor="middle" x="132" y="-183" font-family="Helvetica,sans-Serif" font-size="10.00">The Nightwatch</text>
</g>
<!-- rr -->
<g id="node2" class="node"><title>rr</title>
<ellipse fill="none" stroke="gray" cx="132" cy="-98" rx="60.0217" ry="18"/>
<text text-anchor="middle" x="132" y="-95" font-family="Helvetica,sans-Serif" font-size="10.00">Rembrandt van Rijn</text>
</g>
<!-- nw&#45;&gt;rr -->
<g id="edge1" class="edge"><title>nw&#45;&gt;rr</title>
<path fill="none" stroke="gray" d="M132,-167.597C132,-155.746 132,-139.817 132,-126.292"/>
<polygon fill="gray" stroke="gray" points="135.5,-126.084 132,-116.084 128.5,-126.084 135.5,-126.084"/>
<text text-anchor="middle" x="150.678" y="-143.6" font-family="Helvetica,sans-Serif" font-size="8.00">was</text>
<text text-anchor="middle" x="150.678" y="-135.6" font-family="Helvetica,sans-Serif" font-size="8.00">created by</text>
</g>
<!-- oil -->
<g id="node5" class="node"><title>oil</title>
<ellipse fill="none" stroke="orange" cx="253" cy="-98" rx="42.8742" ry="18"/>
<text text-anchor="middle" x="253" y="-95" font-family="Helvetica,sans-Serif" font-size="10.00">oil on canvas</text>
</g>
<!-- nw&#45;&gt;oil -->
<g id="edge3" class="edge"><title>nw&#45;&gt;oil</title>
<path fill="none" stroke="orange" d="M153.632,-169.625C173.196,-155.72 202.162,-135.133 223.779,-119.768"/>
<polygon fill="orange" stroke="orange" points="225.837,-122.6 231.96,-113.954 221.781,-116.894 225.837,-122.6"/>
<text text-anchor="middle" x="225.787" y="-139.6" font-family="Helvetica,sans-Serif" font-size="8.00">has medium</text>
</g>
<!-- nwd -->
<g id="node7" class="node"><title>nwd</title>
<ellipse fill="none" stroke="gray" cx="27" cy="-98" rx="27" ry="18"/>
<text text-anchor="middle" x="27" y="-95" font-family="Helvetica,sans-Serif" font-size="10.00">1642</text>
</g>
<!-- nw&#45;&gt;nwd -->
<g id="edge2" class="edge"><title>nw&#45;&gt;nwd</title>
<path fill="none" stroke="gray" d="M112.741,-169.226C95.413,-155.034 69.877,-134.118 51.1799,-118.804"/>
<polygon fill="gray" stroke="gray" points="53.3315,-116.043 43.3774,-112.414 48.896,-121.458 53.3315,-116.043"/>
<text text-anchor="middle" x="105.455" y="-143.6" font-family="Helvetica,sans-Serif" font-size="8.00">was</text>
<text text-anchor="middle" x="105.455" y="-135.6" font-family="Helvetica,sans-Serif" font-size="8.00">createdin</text>
</g>
<!-- d -->
<g id="node6" class="node"><title>d</title>
<ellipse fill="none" stroke="gray" cx="263" cy="-18" rx="27" ry="18"/>
<text text-anchor="middle" x="263" y="-15" font-family="Helvetica,sans-Serif" font-size="10.00">Dutch</text>
</g>
<!-- rr&#45;&gt;d -->
<g id="edge5" class="edge"><title>rr&#45;&gt;d</title>
<path fill="none" stroke="gray" d="M157.881,-81.5897C180.033,-68.4005 211.867,-49.4456 234.691,-35.8559"/>
<polygon fill="gray" stroke="gray" points="236.761,-38.6968 243.563,-30.5735 233.18,-32.6822 236.761,-38.6968"/>
<text text-anchor="middle" x="227.572" y="-55.6" font-family="Helvetica,sans-Serif" font-size="8.00">has nationality</text>
</g>
<!-- rrb -->
<g id="node8" class="node"><title>rrb</title>
<ellipse fill="none" stroke="gray" cx="132" cy="-18" rx="27" ry="18"/>
<text text-anchor="middle" x="132" y="-15" font-family="Helvetica,sans-Serif" font-size="10.00">1606</text>
</g>
<!-- rr&#45;&gt;rrb -->
<g id="edge4" class="edge"><title>rr&#45;&gt;rrb</title>
<path fill="none" stroke="gray" d="M132,-79.6893C132,-69.8938 132,-57.4218 132,-46.335"/>
<polygon fill="gray" stroke="gray" points="135.5,-46.2623 132,-36.2623 128.5,-46.2624 135.5,-46.2623"/>
<text text-anchor="middle" x="152.455" y="-55.6" font-family="Helvetica,sans-Serif" font-size="8.00">was born in</text>
</g>
<!-- jv -->
<g id="node3" class="node"><title>jv</title>
<ellipse fill="none" stroke="gray" cx="372" cy="-98" rx="57.9076" ry="18"/>
<text text-anchor="middle" x="372" y="-95" font-family="Helvetica,sans-Serif" font-size="10.00">Johannes Vermeer</text>
</g>
<!-- jv&#45;&gt;d -->
<g id="edge6" class="edge"><title>jv&#45;&gt;d</title>
<path fill="none" stroke="gray" d="M349.942,-81.2155C332.328,-68.6108 307.605,-50.9191 289.023,-37.6222"/>
<polygon fill="gray" stroke="gray" points="290.879,-34.6462 280.71,-31.673 286.805,-40.3388 290.879,-34.6462"/>
<text text-anchor="middle" x="345.572" y="-55.6" font-family="Helvetica,sans-Serif" font-size="8.00">has nationality</text>
</g>
<!-- wb -->
<g id="node4" class="node"><title>wb</title>
<ellipse fill="none" stroke="red" cx="277" cy="-186" rx="68.3645" ry="18"/>
<text text-anchor="middle" x="277" y="-183" font-family="Helvetica,sans-Serif" font-size="10.00">Woman with a Balance</text>
</g>
<!-- wb&#45;&gt;jv -->
<g id="edge7" class="edge"><title>wb&#45;&gt;jv</title>
<path fill="none" stroke="gray" d="M295.278,-168.646C301.824,-162.776 309.251,-156.101 316,-150 325.983,-140.975 336.934,-131.015 346.484,-122.31"/>
<polygon fill="gray" stroke="gray" points="349.095,-124.666 354.124,-115.341 344.377,-119.494 349.095,-124.666"/>
<text text-anchor="middle" x="350.678" y="-143.6" font-family="Helvetica,sans-Serif" font-size="8.00">was</text>
<text text-anchor="middle" x="350.678" y="-135.6" font-family="Helvetica,sans-Serif" font-size="8.00">created by</text>
</g>
<!-- wb&#45;&gt;oil -->
<g id="edge8" class="edge"><title>wb&#45;&gt;oil</title>
<path fill="none" stroke="orange" d="M272.258,-168.009C268.905,-155.995 264.342,-139.641 260.498,-125.869"/>
<polygon fill="orange" stroke="orange" points="263.791,-124.647 257.732,-115.956 257.049,-126.528 263.791,-124.647"/>
<text text-anchor="middle" x="289.787" y="-139.6" font-family="Helvetica,sans-Serif" font-size="8.00">has medium</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

View File

@@ -0,0 +1,127 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.38.0 (20140413.2041)
-->
<!-- Title: %3 Pages: 1 -->
<svg width="636pt" height="364pt"
viewBox="0.00 0.00 636.30 364.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 360)">
<title>%3</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-360 632.301,-360 632.301,4 -4,4"/>
<!-- o -->
<g id="node1" class="node"><title>o</title>
<ellipse fill="none" stroke="red" cx="274.27" cy="-338" rx="53.3595" ry="18"/>
<text text-anchor="middle" x="274.27" y="-335" font-family="Helvetica,sans-Serif" font-size="10.00">object/PPA82633</text>
</g>
<!-- th1 -->
<g id="node2" class="node"><title>th1</title>
<ellipse fill="none" stroke="red" cx="40.2702" cy="-258" rx="40.0417" ry="18"/>
<text text-anchor="middle" x="40.2702" y="-255" font-family="Helvetica,sans-Serif" font-size="10.00">thes:x11409</text>
</g>
<!-- o&#45;&gt;th1 -->
<g id="edge1" class="edge"><title>o&#45;&gt;th1</title>
<path fill="none" stroke="red" d="M224.341,-331.342C190.446,-326.351 145.117,-317.397 107.454,-302 93.6639,-296.363 79.5997,-287.87 67.927,-279.917"/>
<polygon fill="red" stroke="red" points="69.704,-276.888 59.5111,-273.997 65.6765,-282.613 69.704,-276.888"/>
<text text-anchor="middle" x="147.178" y="-295.6" font-family="Helvetica,sans-Serif" font-size="8.00">ecrm:p45_consists_of</text>
</g>
<!-- dep -->
<g id="node4" class="node"><title>dep</title>
<ellipse fill="none" stroke="red" cx="172.27" cy="-258" rx="74.1479" ry="18"/>
<text text-anchor="middle" x="172.27" y="-255" font-family="Helvetica,sans-Serif" font-size="10.00">person&#45;institution/147800</text>
</g>
<!-- o&#45;&gt;dep -->
<g id="edge3" class="edge"><title>o&#45;&gt;dep</title>
<path fill="none" stroke="red" d="M235.65,-325.351C222.058,-319.869 207.403,-312.234 196.239,-302 191.195,-297.376 186.961,-291.439 183.525,-285.462"/>
<polygon fill="red" stroke="red" points="186.46,-283.516 178.779,-276.219 180.234,-286.714 186.46,-283.516"/>
<text text-anchor="middle" x="228.286" y="-295.6" font-family="Helvetica,sans-Serif" font-size="8.00">ecrm:P62_depicts</text>
</g>
<!-- etc -->
<g id="node6" class="node"><title>etc</title>
<ellipse fill="none" stroke="gray" cx="274.27" cy="-18" rx="27" ry="18"/>
<text text-anchor="middle" x="274.27" y="-15" font-family="Helvetica,sans-Serif" font-size="10.00">etc...</text>
</g>
<!-- o&#45;&gt;etc -->
<g id="edge10" class="edge"><title>o&#45;&gt;etc</title>
<path fill="none" stroke="gray" d="M274.27,-319.958C274.27,-304.156 274.27,-279.99 274.27,-259 274.27,-259 274.27,-259 274.27,-97 274.27,-80.1099 274.27,-61.1626 274.27,-46.172"/>
<polygon fill="gray" stroke="gray" points="277.77,-46.0417 274.27,-36.0418 270.77,-46.0418 277.77,-46.0417"/>
</g>
<!-- own -->
<g id="node7" class="node"><title>own</title>
<ellipse fill="none" stroke="red" cx="395.27" cy="-258" rx="93.1176" ry="18"/>
<text text-anchor="middle" x="395.27" y="-255" font-family="Helvetica,sans-Serif" font-size="10.00">thesIdentifier:the&#45;british&#45;museum</text>
</g>
<!-- o&#45;&gt;own -->
<g id="edge5" class="edge"><title>o&#45;&gt;own</title>
<path fill="none" stroke="red" d="M297.887,-321.776C315.86,-310.19 340.856,-294.077 361.023,-281.077"/>
<polygon fill="red" stroke="red" points="363.112,-283.894 369.621,-275.534 359.319,-278.011 363.112,-283.894"/>
<text text-anchor="middle" x="392.854" y="-295.6" font-family="Helvetica,sans-Serif" font-size="8.00">ecrm:P54_has_current_owner</text>
</g>
<!-- con -->
<g id="node8" class="node"><title>con</title>
<ellipse fill="none" stroke="red" cx="524.27" cy="-178" rx="80.1403" ry="18"/>
<text text-anchor="middle" x="524.27" y="-175" font-family="Helvetica,sans-Serif" font-size="10.00">object/PPA82633/concept/1</text>
</g>
<!-- o&#45;&gt;con -->
<g id="edge6" class="edge"><title>o&#45;&gt;con</title>
<path fill="none" stroke="red" d="M322.863,-330.474C381.749,-321.472 475.782,-303.207 497.27,-276 513.047,-256.024 519.612,-227.389 522.339,-206.409"/>
<polygon fill="red" stroke="red" points="525.845,-206.541 523.445,-196.222 518.886,-205.786 525.845,-206.541"/>
<text text-anchor="middle" x="548.839" y="-255.6" font-family="Helvetica,sans-Serif" font-size="8.00">ecrm:P128_carries</text>
</g>
<!-- th1lab -->
<g id="node3" class="node"><title>th1lab</title>
<ellipse fill="none" stroke="gray" cx="40.2702" cy="-178" rx="27" ry="18"/>
<text text-anchor="middle" x="40.2702" y="-175" font-family="Helvetica,sans-Serif" font-size="10.00">paper</text>
</g>
<!-- th1&#45;&gt;th1lab -->
<g id="edge2" class="edge"><title>th1&#45;&gt;th1lab</title>
<path fill="none" stroke="gray" d="M40.2702,-239.689C40.2702,-229.894 40.2702,-217.422 40.2702,-206.335"/>
<polygon fill="gray" stroke="gray" points="43.7703,-206.262 40.2702,-196.262 36.7703,-206.262 43.7703,-206.262"/>
<text text-anchor="middle" x="66.2858" y="-215.6" font-family="Helvetica,sans-Serif" font-size="8.00">skos:prefLabel</text>
</g>
<!-- deplab -->
<g id="node5" class="node"><title>deplab</title>
<ellipse fill="none" stroke="gray" cx="172.27" cy="-178" rx="66.8537" ry="18"/>
<text text-anchor="middle" x="172.27" y="-175" font-family="Helvetica,sans-Serif" font-size="10.00">Julius Caesar Scaliger</text>
</g>
<!-- dep&#45;&gt;deplab -->
<g id="edge4" class="edge"><title>dep&#45;&gt;deplab</title>
<path fill="none" stroke="gray" d="M172.27,-239.689C172.27,-229.894 172.27,-217.422 172.27,-206.335"/>
<polygon fill="gray" stroke="gray" points="175.77,-206.262 172.27,-196.262 168.77,-206.262 175.77,-206.262"/>
<text text-anchor="middle" x="198.286" y="-215.6" font-family="Helvetica,sans-Serif" font-size="8.00">skos:prefLabel</text>
</g>
<!-- contype -->
<g id="node9" class="node"><title>contype</title>
<ellipse fill="none" stroke="gray" cx="431.27" cy="-98" rx="85.8678" ry="18"/>
<text text-anchor="middle" x="431.27" y="-95" font-family="Helvetica,sans-Serif" font-size="10.00">ecrm:E73_Information_Object</text>
</g>
<!-- con&#45;&gt;contype -->
<g id="edge7" class="edge"><title>con&#45;&gt;contype</title>
<path fill="none" stroke="gray" d="M504.547,-160.458C491.321,-149.365 473.71,-134.595 459.068,-122.314"/>
<polygon fill="gray" stroke="gray" points="461.196,-119.531 451.285,-115.787 456.698,-124.895 461.196,-119.531"/>
<text text-anchor="middle" x="494.61" y="-135.6" font-family="Helvetica,sans-Serif" font-size="8.00">rdf:type</text>
</g>
<!-- concon -->
<g id="node10" class="node"><title>concon</title>
<ellipse fill="none" stroke="gray" cx="576.27" cy="-98" rx="40.8927" ry="18"/>
<text text-anchor="middle" x="576.27" y="-95" font-family="Helvetica,sans-Serif" font-size="10.00">thes:x12440</text>
</g>
<!-- con&#45;&gt;concon -->
<g id="edge8" class="edge"><title>con&#45;&gt;concon</title>
<path fill="none" stroke="gray" d="M535.553,-160.075C542.599,-149.507 551.795,-135.713 559.664,-123.91"/>
<polygon fill="gray" stroke="gray" points="562.73,-125.619 565.365,-115.357 556.906,-121.736 562.73,-125.619"/>
<text text-anchor="middle" x="588.96" y="-135.6" font-family="Helvetica,sans-Serif" font-size="8.00">ecrm:P129_is_about</text>
</g>
<!-- conlab -->
<g id="node11" class="node"><title>conlab</title>
<ellipse fill="none" stroke="gray" cx="576.27" cy="-18" rx="33.894" ry="18"/>
<text text-anchor="middle" x="576.27" y="-15" font-family="Helvetica,sans-Serif" font-size="10.00">academic</text>
</g>
<!-- concon&#45;&gt;conlab -->
<g id="edge9" class="edge"><title>concon&#45;&gt;conlab</title>
<path fill="none" stroke="gray" d="M576.27,-79.6893C576.27,-69.8938 576.27,-57.4218 576.27,-46.335"/>
<polygon fill="gray" stroke="gray" points="579.77,-46.2623 576.27,-36.2623 572.77,-46.2624 579.77,-46.2623"/>
<text text-anchor="middle" x="602.286" y="-55.6" font-family="Helvetica,sans-Serif" font-size="8.00">skos:prefLabel</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

View File

@@ -0,0 +1,114 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.38.0 (20140413.2041)
-->
<!-- Title: %3 Pages: 1 -->
<svg width="367pt" height="364pt"
viewBox="0.00 0.00 367.21 364.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 360)">
<title>%3</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-360 363.215,-360 363.215,4 -4,4"/>
<!-- obj -->
<g id="node1" class="node"><title>obj</title>
<ellipse fill="none" stroke="gray" cx="148.735" cy="-338" rx="148.97" ry="18"/>
<text text-anchor="middle" x="148.735" y="-335" font-family="Helvetica,sans-Serif" font-size="10.00">http://collection.britishmuseum.org/id/object/PPA82633</text>
</g>
<!-- object_type -->
<g id="node2" class="node"><title>object_type</title>
<ellipse fill="none" stroke="gray" cx="51.7348" cy="-258" rx="38.5366" ry="18"/>
<text text-anchor="middle" x="51.7348" y="-255" font-family="Helvetica,sans-Serif" font-size="10.00">object_type</text>
</g>
<!-- obj&#45;&gt;object_type -->
<g id="edge1" class="edge"><title>obj&#45;&gt;object_type</title>
<path fill="none" stroke="gray" d="M98.3951,-320.855C88.4182,-315.964 78.6502,-309.764 70.9106,-302 66.4004,-297.476 62.8568,-291.706 60.1099,-285.873"/>
<polygon fill="gray" stroke="gray" points="63.1969,-284.17 56.2095,-276.205 56.7054,-286.789 63.1969,-284.17"/>
<text text-anchor="middle" x="108.647" y="-295.6" font-family="Helvetica,sans-Serif" font-size="8.00">bmo:PX_object_type</text>
</g>
<!-- production -->
<g id="node4" class="node"><title>production</title>
<ellipse fill="none" stroke="gray" cx="148.735" cy="-258" rx="36.3999" ry="18"/>
<text text-anchor="middle" x="148.735" y="-255" font-family="Helvetica,sans-Serif" font-size="10.00">production</text>
</g>
<!-- obj&#45;&gt;production -->
<g id="edge3" class="edge"><title>obj&#45;&gt;production</title>
<path fill="none" stroke="gray" d="M148.735,-319.689C148.735,-309.894 148.735,-297.422 148.735,-286.335"/>
<polygon fill="gray" stroke="gray" points="152.235,-286.262 148.735,-276.262 145.235,-286.262 152.235,-286.262"/>
<text text-anchor="middle" x="203.657" y="-295.6" font-family="Helvetica,sans-Serif" font-size="8.00">ecrm:P108i_was_produced_by</text>
</g>
<!-- other -->
<g id="node8" class="node"><title>other</title>
<text text-anchor="middle" x="281.735" y="-255" font-family="Helvetica,sans-Serif" font-size="10.00">Other top&#45;level object attributes</text>
</g>
<!-- obj&#45;&gt;other -->
<g id="edge7" class="edge"><title>obj&#45;&gt;other</title>
<path fill="none" stroke="gray" d="M223.709,-322.337C236.677,-317.399 249.318,-310.804 259.735,-302 264.947,-297.595 269.068,-291.646 272.265,-285.579"/>
<polygon fill="gray" stroke="gray" points="275.598,-286.706 276.554,-276.154 269.227,-283.807 275.598,-286.706"/>
<text text-anchor="middle" x="271.069" y="-295.6" font-family="Helvetica,sans-Serif" font-size="8.00">...</text>
</g>
<!-- print -->
<g id="node3" class="node"><title>print</title>
<ellipse fill="none" stroke="gray" cx="51.7348" cy="-178" rx="27" ry="18"/>
<text text-anchor="middle" x="51.7348" y="-175" font-family="Helvetica,sans-Serif" font-size="10.00">print</text>
</g>
<!-- object_type&#45;&gt;print -->
<g id="edge2" class="edge"><title>object_type&#45;&gt;print</title>
<path fill="none" stroke="gray" d="M51.7348,-239.689C51.7348,-229.894 51.7348,-217.422 51.7348,-206.335"/>
<polygon fill="gray" stroke="gray" points="55.2349,-206.262 51.7348,-196.262 48.2349,-206.262 55.2349,-206.262"/>
<text text-anchor="middle" x="77.7504" y="-215.6" font-family="Helvetica,sans-Serif" font-size="8.00">skos:prefLabel</text>
</g>
<!-- date -->
<g id="node5" class="node"><title>date</title>
<ellipse fill="none" stroke="gray" cx="134.735" cy="-178" rx="27" ry="18"/>
<text text-anchor="middle" x="134.735" y="-175" font-family="Helvetica,sans-Serif" font-size="10.00">date</text>
</g>
<!-- production&#45;&gt;date -->
<g id="edge4" class="edge"><title>production&#45;&gt;date</title>
<path fill="none" stroke="gray" d="M143.042,-240.075C141.328,-234.389 139.605,-227.974 138.481,-222 137.543,-217.015 136.839,-211.66 136.311,-206.48"/>
<polygon fill="gray" stroke="gray" points="139.778,-205.937 135.456,-196.264 132.803,-206.521 139.778,-205.937"/>
<text text-anchor="middle" x="175.862" y="-215.6" font-family="Helvetica,sans-Serif" font-size="8.00">ecrm:P9_consists_of</text>
</g>
<!-- other_prod -->
<g id="node9" class="node"><title>other_prod</title>
<text text-anchor="middle" x="234.735" y="-175" font-family="Helvetica,sans-Serif" font-size="10.00">Other production info</text>
</g>
<!-- production&#45;&gt;other_prod -->
<g id="edge8" class="edge"><title>production&#45;&gt;other_prod</title>
<path fill="none" stroke="gray" d="M176.351,-246.343C188.633,-240.562 202.579,-232.439 212.735,-222 217.34,-217.267 221.193,-211.376 224.322,-205.489"/>
<polygon fill="gray" stroke="gray" points="227.508,-206.94 228.646,-196.406 221.187,-203.931 227.508,-206.94"/>
<text text-anchor="middle" x="222.069" y="-215.6" font-family="Helvetica,sans-Serif" font-size="8.00">...</text>
</g>
<!-- timespan -->
<g id="node6" class="node"><title>timespan</title>
<ellipse fill="none" stroke="gray" cx="134.735" cy="-98" rx="32.8294" ry="18"/>
<text text-anchor="middle" x="134.735" y="-95" font-family="Helvetica,sans-Serif" font-size="10.00">timespan</text>
</g>
<!-- date&#45;&gt;timespan -->
<g id="edge5" class="edge"><title>date&#45;&gt;timespan</title>
<path fill="none" stroke="gray" d="M134.735,-159.689C134.735,-149.894 134.735,-137.422 134.735,-126.335"/>
<polygon fill="gray" stroke="gray" points="138.235,-126.262 134.735,-116.262 131.235,-126.262 138.235,-126.262"/>
<text text-anchor="middle" x="178.088" y="-135.6" font-family="Helvetica,sans-Serif" font-size="8.00">ecrm:P4_has_time&#45;span</text>
</g>
<!-- start_date -->
<g id="node7" class="node"><title>start_date</title>
<ellipse fill="none" stroke="gray" cx="66.7348" cy="-18" rx="34.828" ry="18"/>
<text text-anchor="middle" x="66.7348" y="-15" font-family="Helvetica,sans-Serif" font-size="10.00">start_date</text>
</g>
<!-- timespan&#45;&gt;start_date -->
<g id="edge6" class="edge"><title>timespan&#45;&gt;start_date</title>
<path fill="none" stroke="gray" d="M105.598,-89.5265C91.4682,-84.285 75.76,-75.6942 67.3129,-62 64.4467,-57.3534 63.1708,-51.8529 62.8105,-46.3654"/>
<polygon fill="gray" stroke="gray" points="66.3171,-46.1414 63.0686,-36.0569 59.3193,-45.9661 66.3171,-46.1414"/>
<text text-anchor="middle" x="124.446" y="-55.6" font-family="Helvetica,sans-Serif" font-size="8.00">ecrm:P82a_begin_of_the_begin</text>
</g>
<!-- other_date -->
<g id="node10" class="node"><title>other_date</title>
<text text-anchor="middle" x="202.735" y="-15" font-family="Helvetica,sans-Serif" font-size="10.00">End of begin, Start of end...</text>
</g>
<!-- timespan&#45;&gt;other_date -->
<g id="edge9" class="edge"><title>timespan&#45;&gt;other_date</title>
<path fill="none" stroke="gray" d="M155.643,-84.0943C164.163,-78.1192 173.652,-70.4665 180.735,-62 184.802,-57.138 188.386,-51.398 191.417,-45.7224"/>
<polygon fill="gray" stroke="gray" points="194.728,-46.9184 195.983,-36.3981 188.442,-43.8394 194.728,-46.9184"/>
<text text-anchor="middle" x="190.069" y="-55.6" font-family="Helvetica,sans-Serif" font-size="8.00">...</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 KiB

34
lod/tutorial/js/bootstrap-4-navbar.js vendored Normal file
View File

@@ -0,0 +1,34 @@
/*!
* Bootstrap 4 multi dropdown navbar ( https://bootstrapthemes.co/demo/resource/bootstrap-4-multi-dropdown-navbar/ )
* Copyright 2017.
* Licensed under the GPL license
*/
$( document ).ready( function () {
$( '.mobile-drop a.dropdown-toggle' ).on( 'click', function ( e ) {
var $el = $( this );
var $parent = $( this ).offsetParent( ".mobile-drop" );
if ($('.show.mobile-drop').length > 0){
$('.show.mobile-drop').each(function(item){
$(this).toggleClass('show');
});
}
var $subMenu = $( this ).next( ".mobile-drop" );
$subMenu.toggleClass( 'show' );
$( this ).parent( "li" ).toggleClass( 'show' );
$( this ).parents( 'li.nav-item.dropdown.mobile-drop.show' ).on( 'click', function ( e ) {
$( '.mobile-drop .show' ).removeClass( "show" );
} );
if ( !$parent.parent().hasClass( 'navbar-nav' ) ) {
$el.next().css( { "top": $el[0].offsetTop, "left": $parent.outerWidth() - 4 } );
}
return false;
} );
} );

View File

@@ -0,0 +1,8 @@
$(document).ready(function() {
$('a').each(function() {
var a = new RegExp('/' + window.location.host + '/');
if (!a.test(this.href)) {
$(this).attr("target","_blank");
}
});
});

View File

@@ -0,0 +1,13 @@
// http://ben.balter.com/2014/03/13/pages-anchor-links/
$(function() {
return $("h2, h3, h4, h5, h6").each(function(i, el) {
var $el, icon, id;
$el = $(el);
id = $el.attr('id');
icon = '<i class="fa fa-link" style="font-size: 0.8em"></i>';
if (id) {
return $el.append($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
}
});
});

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

53
lod/upload.sh Normal file
View File

@@ -0,0 +1,53 @@
#!/bin/sh
# This is a bit messy
if [ "$#" -lt 1 ]; then
graph="http://example.com/sitc/submission/"
endpoint="http://fuseki.gsi.upm.es/hotels/data"
else if [ "$#" -lt 2 ]; then
endpoint=$1
graph_base="http://example.com/sitc"
else
if [ "$#" -lt 3 ]; then
endpoint=$1
graph=$2
else
echo "Usage: $0 [<endpoint>] [<graph_base_uri>]"
echo
exit 1
fi
fi
fi
upload(){
name=$1
file=$2
echo '###'
echo "Uploading: $graph"
echo "Graph: $graph"
echo "Endpoint: $endpoint"
curl -X POST \
--digest -u admin:$PASSWORD \
-H Content-Type:text/turtle \
-T "$file" \
--data-urlencode graph=$graph_base/$name \
-G $endpoint
}
total=0
echo -n "Password: "
read -s PASSWORD
echo "Uploading synthethic"
upload "synthetic" synthetic/reviews.ttl || exit 1
for i in *.ttl; do
identifier=$(echo ${i%.ttl} | md5sum | awk '{print $1}')
echo "Uploading $i"
upload $identifier $i
total=$((total + 1))
done
echo Uploaded $total

View File

@@ -87,7 +87,7 @@
"metadata": {},
"source": [
"Scikit-learn provides algorithms for solving the following problems:\n",
"* **Classification**: Identifying to which category an object belongs to. Some of the available [classification algorithms](http://scikit-learn.org/stable/supervised_learning.html#supervised-learning) are decision trees (ID3, kNN, ...), SVM, Random forest, Perceptron, etc. \n",
"* **Classification**: Identifying to which category an object belongs to. Some of the available [classification algorithms](http://scikit-learn.org/stable/supervised_learning.html#supervised-learning) are decision trees (ID3, C4.5, ...), kNN, SVM, Random forest, Perceptron, etc. \n",
"* **Clustering**: Automatic grouping of similar objects into sets. Some of the available [clustering algorithms](http://scikit-learn.org/stable/modules/clustering.html#clustering) are k-Means, Affinity propagation, etc.\n",
"* **Regression**: Predicting a continuous-valued attribute associated with an object. Some of the available [regression algorithms](http://scikit-learn.org/stable/supervised_learning.html#supervised-learning) are linear regression, logistic regression, etc.\n",
"* ** Dimensionality reduction**: Reducing the number of random variables to consider. Some of the available [dimensionality reduction algorithms](http://scikit-learn.org/stable/modules/decomposition.html#decompositions) are SVD, PCA, etc."

View File

@@ -56,7 +56,7 @@
"metadata": {},
"source": [
"# Genetic Algorithms\n",
"In this section we are going to use the library [DEAP](#References) for implementing a genetic algorithms.\n",
"In this section we are going to use the library DEAP [References](#References) for implementing a genetic algorithms.\n",
"\n",
"We are going to implement the OneMax problem as seen in class.\n",
"\n",

View File

@@ -326,7 +326,7 @@
"def preprocess(words, type='doc'):\n",
" if (type == 'tweet'):\n",
" tknzr = TweetTokenizer(strip_handles=True, reduce_len=True)\n",
" tokens = tknzr.tokenize(tweet)\n",
" tokens = tknzr.tokenize(words)\n",
" else:\n",
" tokens = nltk.word_tokenize(words.lower())\n",
" porter = nltk.PorterStemmer()\n",

View File

@@ -35,7 +35,7 @@
"# Table of Contents\n",
"\n",
"* [Exercises](#Exercises)\n",
"\t* [Exercise 1 - Sentiment classification for Twitter](#Exercise-1---Sentiment-classification-for-Twitter)\n",
"\t* [Exercise 1 - Sentiment Analysis on Movie Reviews](#Exercise-1---Sentiment-Analysis-on-Movie-Reviews)\n",
"\t* [Exercise 2 - Spam classification](#Exercise-2---Spam-classification)\n",
"\t* [Exercise 3 - Automatic essay classification](#Exercise-3---Automatic-essay-classification)"
]
@@ -58,22 +58,16 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## Exercise 1 - Sentiment classification for Twitter"
"## Exercise 1 - Sentiment Analysis on Movie Reviews"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The purpose of this exercise is:\n",
"* Collect geolocated tweets\n",
"* Analyse their sentiment\n",
"* Represent the result in a map, so that one can understand the sentiment in a geographic region.\n",
"\n",
"The steps (and most of the code) can be found [here](http://pybonacci.org/2015/11/24/como-hacer-analisis-de-sentimiento-en-espanol-2/). \n",
"\n",
"You can select the tweets in any language."
]
"You can try the exercise Exercise 2: Sentiment Analysis on movie reviews of Scikit-Learn https://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html. \n",
"Previously you should follow the installation instructions in the section Tutorial Setup."
]
},
{
"cell_type": "markdown",

View File

@@ -47,7 +47,7 @@
"metadata": {},
"source": [
"1. Install Anaconda \n",
"* Download the suitable version for your operating system of Python 3 at https://www.continuum.io/downloads\n",
"* Download the suitable version for your operating system of Python 3 at https://www.anaconda.com/products/individual\n",
"* Follow the installation instructions. In Linux/Mac, launch a terminal and execute the installer script.\n",
"2. [Optional, anaconda already installs jupyter] Install Jupyter http://jupyter.readthedocs.org/en/latest/install.html\n",
"* Launch a terminal and execute 'conda install jupyter'"

View File

@@ -66,7 +66,7 @@
"\n",
"This means:\n",
"* ** dynamically typed**: variables do not declare a static type (as in Java int a = 2;). Variables have no type themselves, they are just names that hold a reference to some object. The type of the variable is changed dynamically when you change the type of the assigned data object. \n",
"* **strongly typed**: the interpreter tracks variable types. There is no explicit type conversion. For example, in Javascript we can "
"* **strongly typed**: the interpreter tracks variable types. There is no implicit type conversion. This means that all the type variables should be converted manually, preventing from unexpected behaviour. "
]
},
{

View File

@@ -6,11 +6,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "1fba29f718bbaa14890b305223712474",
"grade": false,
"grade_id": "cell-2bd9e19ffed99f81",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -31,11 +32,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "845cf125f1c5eb7aa3653ef461bffc67",
"grade": false,
"grade_id": "cell-51338a0933103db9",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -86,11 +88,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"checksum": "5c2cccdf6463262a0f8bc89c64f97fb2",
"cell_type": "markdown",
"checksum": "753edf07d500cc7f9cc9c5a4c0a1348e",
"grade": false,
"grade_id": "cell-d8db3c16cee92ac1",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -140,7 +143,15 @@
"\n",
"In the exercises, we will be using turtle notation, because it is very readable.\n",
"\n",
"Here's an example of document in Turtle, taken from the Turtle specification:\n",
"For instance, turtle allows us to re-use parts of a previous triple to avoid repetition.\n",
"Our previous example would look like this:\n",
"\n",
"```turtle\n",
"<http://example.org/Timmy> <http://example.org/hasDog> <http://example.org/Tobby> ;\n",
" <http://example.org/age> 7\n",
"```\n",
"\n",
"Here's another example of document in Turtle, taken from the Turtle specification:\n",
"\n",
"```turtle\n",
"@base <http://example.org/> .\n",
@@ -149,15 +160,13 @@
"@prefix foaf: <http://xmlns.com/foaf/0.1/> .\n",
"@prefix rel: <http://www.perceive.net/schemas/relationship/> .\n",
"\n",
"<#green-goblin>\n",
" rel:enemyOf <#spiderman> ;\n",
" a foaf:Person ; # in the context of the Marvel universe\n",
" foaf:name \"Green Goblin\" .\n",
"<#green-goblin> a foaf:Person ; # Green Goblin is a person\n",
" foaf:name \"Green Goblin\" ;\n",
" rel:enemyOf <#spiderman> . # Green Goblin is one of Spiderman's enemies \n",
"\n",
"<#spiderman>\n",
" rel:enemyOf <#green-goblin> ;\n",
" a foaf:Person ;\n",
" foaf:name \"Spiderman\", \"Человек-паук\"@ru .\n",
"<#spiderman> a foaf:Person ; # Spiderman is also a person\n",
" foaf:name \"Spiderman\", \"Человек-паук\"@ru . # Spiderman's name in Russian is Человек-паук\n",
" rel:enemyOf <#green-goblin> ; \n",
"```\n",
"\n",
"\n",
@@ -175,11 +184,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "d2849a6154d4807b405e6ec84601c231",
"grade": false,
"grade_id": "cell-14e2327285737802",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -222,11 +232,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "fe9a246ba580c71385e9b83d414a1216",
"grade": false,
"grade_id": "cell-a1b60daabb1a9d00",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -240,11 +251,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "63879c425ec11742c95c728a578d109e",
"grade": false,
"grade_id": "cell-d9289e96b2b0f265",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -258,11 +270,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "32f1f607adb584aaea9fb90ae4d805b5",
"grade": false,
"grade_id": "cell-bb418e9bae1fef1a",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -277,11 +290,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "892f8491591c25defdea5fdcdd289489",
"grade": false,
"grade_id": "cell-4a1b60bd9974bbb1",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -295,12 +309,13 @@
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "a855d3d63be5ea7f73fd85d645b21bfe",
"grade": true,
"grade_id": "cell-9ac392294d5708a1",
"locked": false,
"points": 0,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
@@ -320,11 +335,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "9a73f79f8f282874fb60011e6019e387",
"grade": false,
"grade_id": "cell-57f67d1e662b7f09",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -341,11 +357,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "18ad887c2f326ee59139b96860ce8893",
"grade": false,
"grade_id": "cell-16214ea73a9b689e",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -359,11 +376,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "ed2466715f57356f22ddeabfb101eb11",
"grade": false,
"grade_id": "cell-da88c2f8170436fe",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -382,11 +400,12 @@
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "69182e8fadb9c9751f76786e0fcb8803",
"grade": false,
"grade_id": "cell-808cfcbf3891f39f",
"locked": false,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
@@ -403,11 +422,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "60a9934c544eee9fc2c3745c36beb049",
"grade": false,
"grade_id": "cell-1c2ca86de107dec3",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -424,11 +444,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "12b5c7170326932ff3c7e1688a5769b2",
"grade": false,
"grade_id": "cell-0154f8481bf393e8",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -444,11 +465,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "b534d998c6d2e9f6bef8c2d88687a96b",
"grade": false,
"grade_id": "cell-adc7e6b7e96e8788",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -478,11 +500,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "67540252804835faea83d96aab87aa29",
"grade": false,
"grade_id": "cell-e73f1933742f7ab3",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -528,11 +551,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "d6f1bf2230282256e5fcb85dba0eef45",
"grade": false,
"grade_id": "cell-3241bf07ae153beb",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -563,11 +587,12 @@
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "44f8be14db3d3e42b5b85f0485206346",
"grade": false,
"grade_id": "definition",
"locked": false,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
@@ -594,12 +619,13 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "e8ba71b32e6d4f15aef9dc7fe70387fe",
"grade": true,
"grade_id": "cell-2fb6e144a6691ede",
"locked": true,
"points": 10,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -615,11 +641,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "75d90c9a83c694f61e51bd5c47a672d9",
"grade": false,
"grade_id": "cell-63a55e7b8b195d59",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -633,11 +660,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "23632182da48df109721378408e57f01",
"grade": false,
"grade_id": "cell-3843c3ce98a77c56",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -660,11 +688,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "6c4b25718f493ad5964370f412519543",
"grade": false,
"grade_id": "cell-f42c087c9065bb23",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -706,12 +735,13 @@
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "c7af0b9af5a64773785cc890f2431c78",
"grade": true,
"grade_id": "cell-c2e5b58ea74e8276",
"locked": false,
"points": 1,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
@@ -728,11 +758,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "a29112f51cc3299c7cae27841feb7410",
"grade": false,
"grade_id": "cell-9bf9c7d7516fae75",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -750,12 +781,13 @@
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "56a77e133b532997723bf2f8116389e4",
"grade": true,
"grade_id": "cell-17508ecf96884653",
"locked": false,
"points": 1,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
@@ -769,11 +801,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "9311bca044d7057c86dd753f5343e19b",
"grade": false,
"grade_id": "cell-d36826d6323c96e8",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -786,12 +819,13 @@
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "ba7b24b557d627e2665ca31c75c24c23",
"grade": true,
"grade_id": "cell-17508ecf96884655",
"locked": false,
"points": 1,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
@@ -805,11 +839,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "853651c95cbcd69cd5f495f03d29d19a",
"grade": false,
"grade_id": "cell-e25a0db3fe8a6b4b",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -822,12 +857,13 @@
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "779f0f750508eb52b2d98b92689e426b",
"grade": true,
"grade_id": "cell-30797c9ac87cc7e1",
"locked": false,
"points": 1,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
@@ -841,11 +877,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "f8fff644855ca50a5219598322aa9b32",
"grade": false,
"grade_id": "cell-33862c8e38173d9c",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -858,12 +895,13 @@
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "8ef0ebd54eefb44ff7019f17f58be3ec",
"grade": true,
"grade_id": "cell-17508ecf96884657",
"locked": false,
"points": 1,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
@@ -877,11 +915,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "33e1ec78415c85a795e86211d88316c2",
"grade": false,
"grade_id": "cell-5f922dc14ad3236a",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -894,12 +933,13 @@
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "b5f208a95a8803e97f82c5f2cdf319dd",
"grade": true,
"grade_id": "answer-missing",
"locked": false,
"points": 1,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
@@ -913,11 +953,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "26eb04e562aa6c7d29efa8318982a337",
"grade": false,
"grade_id": "cell-7a3c1553c4d6a9b7",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -961,12 +1002,13 @@
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "bf8d215c42321236b783601e7d072a05",
"grade": true,
"grade_id": "cell-ff2413f45311f086",
"locked": false,
"points": 0,
"schema_version": 1,
"schema_version": 3,
"solution": true
}
},
@@ -981,11 +1023,12 @@
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "cffc12120c51a7d994063f66d788570a",
"grade": false,
"grade_id": "cell-ec8df1a53c3d3f23",
"locked": true,
"schema_version": 1,
"schema_version": 3,
"solution": false
}
},
@@ -1027,7 +1070,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.2"
"version": "3.8.1"
}
},
"nbformat": 4,