{
    "cells": [
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "<div class=\"notebook-buttons\" style=\"display:flex; padding-top: 5rem;padding-bottom: 2.5rem;line-height: 2.15;\">\n",
                "    <a href=\"https://raw.githubusercontent.com/zazuko/notebooks/master/notebooks/statistics_zurich/data_model.ipynb\" download>\n",
                "        <div id=\"download-link\" style=\"display: flex;padding-right: 3.5rem;padding-bottom: 0.625rem;border-bottom: 1px solid #ececed; height: auto;align-items: center;\">\n",
                "            <img class=\"call-to-action-img\" src=\"img/download.svg\" width=\"22\" height=\"30\" style=\"margin-right: 10px;margin-top: auto;margin-bottom: auto;\">\n",
                "            <div class=\"call-to-action-txt\">Download Notebook</div>\n",
                "        </div>\n",
                "    </a>\n",
                "    <a href=\"https://github.com/zazuko/notebooks/blob/master/notebooks/statistics_zurich/data_model.ipynb\">\n",
                "        <div id=\"github-link\" style=\"display: flex;padding-right: 3.5rem;padding-bottom: 0.625rem;border-bottom: 1px solid #ececed; height: auto;align-items: center;\">\n",
                "            <img class=\"call-to-action-img\" src=\"img/github.svg\" width=\"25\" height=\"30\" style=\"margin-right: 10px;margin-top: auto;margin-bottom: auto;\">\n",
                "            <div class=\"call-to-action-txt\">View on GitHub</div>\n",
                "        </div>\n",
                "    </a>\n",
                "</div>\n",
                "\n",
                "# Data model for Zürich datasets \n",
                "\n",
                "The Zürich Statistical Office collects data on the city and its residents. This data is published as [Linked Data](https://en.wikipedia.org/wiki/Linked_data). \n",
                "\n",
                "In this tutorial, we will **explain the linked data model** behind it. Mainly, we will guide you through the data structure. The tutorial will show you available datasets, and the shape they take. We will look into queries explaining the data structure as well as available dimensions."
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "[1. Graphs](#Graphs)    \n",
                "[2. Graph by Zürich Statistical Office](#Graph-by-Zürich-Statistical-Office)    \n",
                "[3. Data cubes](#Data-cubes)  \n",
                "[4. Observation set](#Observation-set)  \n",
                "[5. Observations](#Observations)  \n",
                "[6. Data slices](#Data-slices)  \n",
                "[7. SPEX](#SPEX)  \n"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "### SPARQL endpoint\n",
                "\n",
                "Data by the Zürich Statistical Office is published as Linked Data. It can be accessed with [SPARQL queries](https://www.w3.org/TR/rdf-sparql-query/). You can send queries using HTTP requests. The API endpoint is **[https://ld.stadt-zuerich.ch/query](https://ld.stadt-zuerich.ch/query).**  \n",
                "  \n",
                "  \n",
                "We use the `SPARQL` kernel in a jupyter notebook to communicate with the database (you may need to configure this via menu Kernel -> Change kernel -> SPARQL). First, let's configure the endpoint."
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 1,
            "metadata": {},
            "outputs": [
                {
                    "data": {
                        "text/html": [
                            "<div class=\"krn-spql\"><div class=\"magic\">Endpoint set to: https://ld.stadt-zuerich.ch/query</div><div class=\"magic\">HTTP authentication: method=basic, user=public, passwd set</div><div class=\"magic\">Display: table</div><div class=\"magic\">Result maximum size: 50</div></div>"
                        ],
                        "text/plain": [
                            "Endpoint set to: https://ld.stadt-zuerich.ch/query\n",
                            "HTTP authentication: method=basic, user=public, passwd set\n",
                            "Display: table\n",
                            "Result maximum size: 50\n"
                        ]
                    },
                    "metadata": {},
                    "output_type": "display_data"
                }
            ],
            "source": [
                "#Params\n",
                "%endpoint https://ld.stadt-zuerich.ch/query\n",
                "%auth basic public public\n",
                "%display table\n",
                "\n",
                "%show 50"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "## Graphs\n",
                "\n",
                "One endpoint can contain multiple [named graphs](https://en.wikipedia.org/wiki/Named_graph). \n",
                " \n",
                " \n",
                "You can see what graphs are available using `WHERE` and `GRAPH` statements. "
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 2,
            "metadata": {},
            "outputs": [
                {
                    "data": {
                        "text/html": [
                            "<div class=\"krn-spql\"><table><tr class=hdr><th>graphs</th></tr><tr class=odd><td class=val><a href=\"https://linked.opendata.swiss/graph/eCH-0071\" target=\"_other\">https://linked.opendata.swiss/graph/eCH-0071</a></td></tr><tr class=even><td class=val><a href=\"https://linked.opendata.swiss/graph/BK/FederalDirectory\" target=\"_other\">https://linked.opendata.swiss/graph/BK/FederalDirectory</a></td></tr><tr class=odd><td class=val><a href=\"https://linked.opendata.swiss/graph/sfa/meta\" target=\"_other\">https://linked.opendata.swiss/graph/sfa/meta</a></td></tr><tr class=even><td class=val><a href=\"https://lindas.admin.ch/nl/isil\" target=\"_other\">https://lindas.admin.ch/nl/isil</a></td></tr><tr class=odd><td class=val><a href=\"https://lindas.admin.ch/sbb/didok\" target=\"_other\">https://lindas.admin.ch/sbb/didok</a></td></tr><tr class=even><td class=val><a href=\"https://lindas.admin.ch/sbb/nova\" target=\"_other\">https://lindas.admin.ch/sbb/nova</a></td></tr><tr class=odd><td class=val><a href=\"https://lindas.admin.ch/sbb/setactual\" target=\"_other\">https://lindas.admin.ch/sbb/setactual</a></td></tr><tr class=even><td class=val><a href=\"https://lindas.admin.ch/sbb/constructionsite\" target=\"_other\">https://lindas.admin.ch/sbb/constructionsite</a></td></tr><tr class=odd><td class=val><a href=\"https://linked.opendata.swiss/fsvo/animalpest\" target=\"_other\">https://linked.opendata.swiss/fsvo/animalpest</a></td></tr><tr class=even><td class=val><a href=\"https://lindas.admin.ch/meta\" target=\"_other\">https://lindas.admin.ch/meta</a></td></tr><tr class=odd><td class=val><a href=\"https://lindas.admin.ch/sfa/opendataswiss\" target=\"_other\">https://lindas.admin.ch/sfa/opendataswiss</a></td></tr><tr class=even><td class=val><a href=\"https://lindas.admin.ch/sfa/stapfer_enquete\" target=\"_other\">https://lindas.admin.ch/sfa/stapfer_enquete</a></td></tr><tr class=odd><td class=val><a href=\"https://lindas.admin.ch/ontologies\" target=\"_other\">https://lindas.admin.ch/ontologies</a></td></tr><tr class=even><td class=val><a href=\"https://lindas.admin.ch/fsvo/themes\" target=\"_other\">https://lindas.admin.ch/fsvo/themes</a></td></tr><tr class=odd><td class=val><a href=\"https://lindas.admin.ch/elcom/electricityprice\" target=\"_other\">https://lindas.admin.ch/elcom/electricityprice</a></td></tr><tr class=even><td class=val><a href=\"https://lindas.admin.ch/fsvo/plazi\" target=\"_other\">https://lindas.admin.ch/fsvo/plazi</a></td></tr><tr class=odd><td class=val><a href=\"https://lindas.admin.ch/stadtzuerich/stat\" target=\"_other\">https://lindas.admin.ch/stadtzuerich/stat</a></td></tr><tr class=even><td class=val><a href=\"https://lindas.admin.ch/stadtzuerich/stat/views\" target=\"_other\">https://lindas.admin.ch/stadtzuerich/stat/views</a></td></tr><tr class=odd><td class=val><a href=\"https://lindas.admin.ch/cube/dimension\" target=\"_other\">https://lindas.admin.ch/cube/dimension</a></td></tr><tr class=even><td class=val><a href=\"https://lindas.admin.ch/fso/agvch\" target=\"_other\">https://lindas.admin.ch/fso/agvch</a></td></tr><tr class=odd><td class=val><a href=\"https://lindas.admin.ch/egad/ric-o\" target=\"_other\">https://lindas.admin.ch/egad/ric-o</a></td></tr><tr class=even><td class=val><a href=\"https://lindas.admin.ch/foj/zefix\" target=\"_other\">https://lindas.admin.ch/foj/zefix</a></td></tr><tr class=odd><td class=val><a href=\"https://lindas.admin.ch/territorial\" target=\"_other\">https://lindas.admin.ch/territorial</a></td></tr><tr class=even><td class=val><a href=\"https://lindas.admin.ch/fch/staatskalender\" target=\"_other\">https://lindas.admin.ch/fch/staatskalender</a></td></tr></table><div class=\"tinfo\">Total: 24, Shown: 24</div></div>"
                        ]
                    },
                    "metadata": {},
                    "output_type": "display_data"
                }
            ],
            "source": [
                "# List graphs in endpoint\n",
                "SELECT DISTINCT ?graphs \n",
                "WHERE {\n",
                "  GRAPH ?graphs {\n",
                "      ?s ?p ?o;\n",
                "  }\n",
                "}"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "These graphs have potentilly nothing in common, they are simply stored in the same database. \n",
                "\n",
                "Here, we have one endpoint storing information on subject as diverse as the train timetable, electricity prices, or animal diseases:\n",
                "\n",
                "* trains timetable (https://lindas.admin.ch/sbb/setactual)\n",
                "* electricity prices (https://lindas.admin.ch/elcom/electricityprice)\n",
                "* animal diseases (https://linked.opendata.swiss/fsvo/animalpest)\n",
                "\n",
                "All those graphs can be accessed from the same SPARQL endpoint."
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "## Graph by Zürich Statistical Office"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "Datasets from the Zürich Statistical Office are published in the following named graph: `<https://lindas.admin.ch/stadtzuerich/stat>`\n",
                "\n",
                "You can limit your queries to one named graph using `WHERE` and `FROM` statements. "
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 3,
            "metadata": {
                "scrolled": true
            },
            "outputs": [
                {
                    "data": {
                        "text/html": [
                            "<div class=\"krn-spql\"><table><tr class=hdr><th>s</th>\n",
                            "<th>p</th>\n",
                            "<th>o</th></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/HEO0663\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/HEO0663</a></td>\n",
                            "<td class=val><a href=\"http://schema.org/name\" target=\"_other\">http://schema.org/name</a></td>\n",
                            "<td class=val>Frauenkappelen</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/GEO0663\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/GEO0663</a></td>\n",
                            "<td class=val><a href=\"http://schema.org/name\" target=\"_other\">http://schema.org/name</a></td>\n",
                            "<td class=val>Frauenkappelen</td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/ORT0880\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/ORT0880</a></td>\n",
                            "<td class=val><a href=\"http://schema.org/name\" target=\"_other\">http://schema.org/name</a></td>\n",
                            "<td class=val>Rüeggisberg</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/HEO0880\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/HEO0880</a></td>\n",
                            "<td class=val><a href=\"http://schema.org/name\" target=\"_other\">http://schema.org/name</a></td>\n",
                            "<td class=val>Rüeggisberg</td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/GEO0880\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/GEO0880</a></td>\n",
                            "<td class=val><a href=\"http://schema.org/name\" target=\"_other\">http://schema.org/name</a></td>\n",
                            "<td class=val>Rüeggisberg</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/ORT1024\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/ORT1024</a></td>\n",
                            "<td class=val><a href=\"http://schema.org/name\" target=\"_other\">http://schema.org/name</a></td>\n",
                            "<td class=val>Emmen</td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/HEO1024\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/HEO1024</a></td>\n",
                            "<td class=val><a href=\"http://schema.org/name\" target=\"_other\">http://schema.org/name</a></td>\n",
                            "<td class=val>Emmen</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/GEO1024\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/GEO1024</a></td>\n",
                            "<td class=val><a href=\"http://schema.org/name\" target=\"_other\">http://schema.org/name</a></td>\n",
                            "<td class=val>Emmen</td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/ORT1701\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/ORT1701</a></td>\n",
                            "<td class=val><a href=\"http://schema.org/name\" target=\"_other\">http://schema.org/name</a></td>\n",
                            "<td class=val>Baar</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/HEO1701\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/HEO1701</a></td>\n",
                            "<td class=val><a href=\"http://schema.org/name\" target=\"_other\">http://schema.org/name</a></td>\n",
                            "<td class=val>Baar</td></tr></table><div class=\"tinfo\">Total: 10, Shown: 10</div></div>"
                        ]
                    },
                    "metadata": {},
                    "output_type": "display_data"
                }
            ],
            "source": [
                "# List random triples in the graph\n",
                "\n",
                "SELECT *\n",
                "FROM <https://lindas.admin.ch/stadtzuerich/stat>\n",
                "WHERE {?s ?p ?o}\n",
                "LIMIT 10\n",
                "OFFSET 100"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "## Data cubes\n",
                "Datasets published by Zürich Statistial Office are stored as [data cubes](https://en.wikipedia.org/wiki/OLAP_cube). Let's check the cube definition in its [documentation](https://cube.link/):\n",
                "\n",
                "**Cube**  \n",
                "*Represents the entry point for a collection of observations, conforming to some common dimensional structure.*\n",
                "\n",
                "\n",
                "We can find all data cubes by defining `<https://cube.link/Cube>` as object."
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 4,
            "metadata": {},
            "outputs": [
                {
                    "data": {
                        "text/html": [
                            "<div class=\"krn-spql\"><table><tr class=hdr><th>cubes</th></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/WHG\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/WHG</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/WHA-ZIM\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/WHA-ZIM</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/ZIM\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/ZIM</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/ZIM-WHA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/ZIM-WHA</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/WHA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/WHA</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/APZ\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/APZ</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/WHG-ZIM\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/WHG-ZIM</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW-SEX\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW-SEX</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/ANT-GGH-HEL\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/ANT-GGH-HEL</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW-HEL\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW-HEL</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW-ALT\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW-ALT</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/GES-ALT-SEX-TOU\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/GES-ALT-SEX-TOU</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/GES-SEX-TOU\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/GES-SEX-TOU</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/GES-ALT-SEX\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/GES-ALT-SEX</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/GES-SEX\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/GES-SEX</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW-ALT-HEL-SEX\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW-ALT-HEL-SEX</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW-ALT-HEL\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW-ALT-HEL</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW-ALT-SEX\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW-ALT-SEX</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/AST-BTA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/AST-BTA</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/TIA-BTA-TIG\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/TIA-BTA-TIG</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/WRT-BTA-EAP\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/WRT-BTA-EAP</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/TII-BTA-TIG\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/TII-BTA-TIG</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/TII-BTA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/TII-BTA</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/TIA-BTA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/TIA-BTA</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/AST-BEW-BTA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/AST-BEW-BTA</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/ZUS-BTA-SEX\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/ZUS-BTA-SEX</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/ZUS-BTA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/ZUS-BTA</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/ZUS-BTA-HEL\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/ZUS-BTA-HEL</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BES-BTA-SEX\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BES-BTA-SEX</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BES-BTA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BES-BTA</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/ZUS-BTA-ZSA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/ZUS-BTA-ZSA</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/QMP-EIG-HAA-OBJ-ZIM\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/QMP-EIG-HAA-OBJ-ZIM</a></td></tr></table><div class=\"tinfo\">Total: 34, Shown: 34</div></div>"
                        ]
                    },
                    "metadata": {},
                    "output_type": "display_data"
                }
            ],
            "source": [
                "# List all data cubes\n",
                "\n",
                "SELECT ?cubes\n",
                "FROM <https://lindas.admin.ch/stadtzuerich/stat>\n",
                "WHERE {\n",
                "  ?cubes a <https://cube.link/Cube> .\n",
                "}"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "All cubes have the same data structure. This means we can write very similar queries to get data from different cubes.\n",
                "\n",
                "Data cubes have the following properties:"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 5,
            "metadata": {},
            "outputs": [
                {
                    "data": {
                        "text/html": [
                            "<div class=\"krn-spql\"><table><tr class=hdr><th>properties</th></tr><tr class=odd><td class=val><a href=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#type\" target=\"_other\">http://www.w3.org/1999/02/22-rdf-syntax-ns#type</a></td></tr><tr class=even><td class=val><a href=\"http://schema.org/name\" target=\"_other\">http://schema.org/name</a></td></tr><tr class=odd><td class=val><a href=\"http://schema.org/identifier\" target=\"_other\">http://schema.org/identifier</a></td></tr><tr class=even><td class=val><a href=\"https://cube.link/observationSet\" target=\"_other\">https://cube.link/observationSet</a></td></tr><tr class=odd><td class=val><a href=\"https://cube.link/observationConstraint\" target=\"_other\">https://cube.link/observationConstraint</a></td></tr></table><div class=\"tinfo\">Total: 5, Shown: 5</div></div>"
                        ]
                    },
                    "metadata": {},
                    "output_type": "display_data"
                }
            ],
            "source": [
                "# Cube properties\n",
                "\n",
                "SELECT DISTINCT ?properties\n",
                "FROM <https://lindas.admin.ch/stadtzuerich/stat>\n",
                "WHERE {\n",
                "  ?s a <https://cube.link/Cube> ;\n",
                "    ?properties ?o.\n",
                "}"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "Let's learn more about available data cubes. We can access cube description using `<http://schema.org/name>` property. We will also get its id using `<http://schema.org/identifier>`. By defining schema and cube as `PREFIX`, we can save some typing."
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 6,
            "metadata": {},
            "outputs": [
                {
                    "data": {
                        "text/html": [
                            "<div class=\"krn-spql\"><table><tr class=hdr><th>cube</th>\n",
                            "<th>description</th>\n",
                            "<th>id</th></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/WHG\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/WHG</a></td>\n",
                            "<td class=val>Statistische Wohnungen</td>\n",
                            "<td class=val>WHG</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/WHG\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/WHG</a></td>\n",
                            "<td class=val>Statistische Wohnungen nach Zeit</td>\n",
                            "<td class=val>WHG</td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/WHA-ZIM\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/WHA-ZIM</a></td>\n",
                            "<td class=val>Wohnungen (ohne Appartements) nach Zeit, Zimmerzahl einer Wohnung</td>\n",
                            "<td class=val>WHA-ZIM</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/ZIM\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/ZIM</a></td>\n",
                            "<td class=val>Zimmer</td>\n",
                            "<td class=val>ZIM</td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/ZIM\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/ZIM</a></td>\n",
                            "<td class=val>Zimmer nach Zeit</td>\n",
                            "<td class=val>ZIM</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/ZIM-WHA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/ZIM-WHA</a></td>\n",
                            "<td class=val>Zimmer nach Zeit, Wohnungsart</td>\n",
                            "<td class=val>ZIM-WHA</td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/WHA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/WHA</a></td>\n",
                            "<td class=val>Wohnungen (ohne Appartements)</td>\n",
                            "<td class=val>WHA</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/WHA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/WHA</a></td>\n",
                            "<td class=val>Wohnungen (ohne Appartements) nach Zeit</td>\n",
                            "<td class=val>WHA</td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/APZ\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/APZ</a></td>\n",
                            "<td class=val>Appartementzimmer</td>\n",
                            "<td class=val>APZ</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/APZ\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/APZ</a></td>\n",
                            "<td class=val>Appartementzimmer nach Zeit</td>\n",
                            "<td class=val>APZ</td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/WHG-ZIM\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/WHG-ZIM</a></td>\n",
                            "<td class=val>Statistische Wohnungen nach Zeit, Zimmerzahl einer Wohnung</td>\n",
                            "<td class=val>WHG-ZIM</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW</a></td>\n",
                            "<td class=val>Wirtschaftliche Wohnbevölkerung</td>\n",
                            "<td class=val>BEW</td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW</a></td>\n",
                            "<td class=val>Wirtschaftliche Wohnbevölkerung nach Zeit</td>\n",
                            "<td class=val>BEW</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW-SEX\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW-SEX</a></td>\n",
                            "<td class=val>Wirtschaftliche Wohnbevölkerung nach Geschlecht, Zeit</td>\n",
                            "<td class=val>BEW-SEX</td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX</a></td>\n",
                            "<td class=val>Wirtschaftliche Wohnbevölkerung nach Heimatland, Geschlecht, Zeit</td>\n",
                            "<td class=val>BEW-HEL-SEX</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/ANT-GGH-HEL\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/ANT-GGH-HEL</a></td>\n",
                            "<td class=val>Anteil nach Grundgesamtheit, Heimatland, Zeit</td>\n",
                            "<td class=val>ANT-GGH-HEL</td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW-HEL\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW-HEL</a></td>\n",
                            "<td class=val>Wirtschaftliche Wohnbevölkerung nach Heimatland, Zeit</td>\n",
                            "<td class=val>BEW-HEL</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW-ALT\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW-ALT</a></td>\n",
                            "<td class=val>Wirtschaftliche Wohnbevölkerung nach Alter, Zeit</td>\n",
                            "<td class=val>BEW-ALT</td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/GES-ALT-SEX-TOU\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/GES-ALT-SEX-TOU</a></td>\n",
                            "<td class=val>Sterbefälle (wirtschaftlich) nach Alter, Geschlecht, Zeit, Todesursachen</td>\n",
                            "<td class=val>GES-ALT-SEX-TOU</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/GES-SEX-TOU\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/GES-SEX-TOU</a></td>\n",
                            "<td class=val>Sterbefälle (wirtschaftlich) nach Geschlecht, Zeit, Todesursachen</td>\n",
                            "<td class=val>GES-SEX-TOU</td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/GES-ALT-SEX\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/GES-ALT-SEX</a></td>\n",
                            "<td class=val>Sterbefälle (wirtschaftlich) nach Alter, Geschlecht, Zeit</td>\n",
                            "<td class=val>GES-ALT-SEX</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/GES-SEX\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/GES-SEX</a></td>\n",
                            "<td class=val>Sterbefälle (wirtschaftlich) nach Geschlecht, Zeit</td>\n",
                            "<td class=val>GES-SEX</td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW-ALT-HEL-SEX\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW-ALT-HEL-SEX</a></td>\n",
                            "<td class=val>Wirtschaftliche Wohnbevölkerung nach Alter, Heimatland, Geschlecht, Zeit</td>\n",
                            "<td class=val>BEW-ALT-HEL-SEX</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW-ALT-HEL\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW-ALT-HEL</a></td>\n",
                            "<td class=val>Wirtschaftliche Wohnbevölkerung nach Alter, Heimatland, Zeit</td>\n",
                            "<td class=val>BEW-ALT-HEL</td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW-ALT-SEX\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW-ALT-SEX</a></td>\n",
                            "<td class=val>Wirtschaftliche Wohnbevölkerung nach Alter, Geschlecht, Zeit</td>\n",
                            "<td class=val>BEW-ALT-SEX</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/AST-BTA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/AST-BTA</a></td>\n",
                            "<td class=val>Arbeitsstätten nach Betriebsart, Zeit</td>\n",
                            "<td class=val>AST-BTA</td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/TIA-BTA-TIG\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/TIA-BTA-TIG</a></td>\n",
                            "<td class=val>Tierarten nach Betriebsart, Tiergattung, Zeit</td>\n",
                            "<td class=val>TIA-BTA-TIG</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/WRT-BTA-EAP\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/WRT-BTA-EAP</a></td>\n",
                            "<td class=val>Wert nach Betriebsart, Erfolgsrechnung, Zeit</td>\n",
                            "<td class=val>WRT-BTA-EAP</td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/TII-BTA-TIG\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/TII-BTA-TIG</a></td>\n",
                            "<td class=val>Tierindividuen nach Betriebsart, Tiergattung, Zeit</td>\n",
                            "<td class=val>TII-BTA-TIG</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/TII-BTA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/TII-BTA</a></td>\n",
                            "<td class=val>Tierindividuen nach Betriebsart, Zeit</td>\n",
                            "<td class=val>TII-BTA</td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/TIA-BTA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/TIA-BTA</a></td>\n",
                            "<td class=val>Tierarten nach Betriebsart, Zeit</td>\n",
                            "<td class=val>TIA-BTA</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/AST-BEW-BTA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/AST-BEW-BTA</a></td>\n",
                            "<td class=val>Arbeitsstätten nach Bewilligung, Betriebsart, Zeit</td>\n",
                            "<td class=val>AST-BEW-BTA</td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/ZUS-BTA-SEX\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/ZUS-BTA-SEX</a></td>\n",
                            "<td class=val>Zuschauer/innen, Besucher/innen nach Betriebsart, Geschlecht, Zeit</td>\n",
                            "<td class=val>ZUS-BTA-SEX</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/ZUS-BTA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/ZUS-BTA</a></td>\n",
                            "<td class=val>Zuschauer/innen, Besucher/innen nach Betriebsart, Zeit</td>\n",
                            "<td class=val>ZUS-BTA</td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/ZUS-BTA-HEL\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/ZUS-BTA-HEL</a></td>\n",
                            "<td class=val>Zuschauer/innen, Besucher/innen nach Betriebsart, Heimatland, Zeit</td>\n",
                            "<td class=val>ZUS-BTA-HEL</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BES-BTA-SEX\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BES-BTA-SEX</a></td>\n",
                            "<td class=val>Beschäftigte nach Betriebsart, Geschlecht, Zeit</td>\n",
                            "<td class=val>BES-BTA-SEX</td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BES-BTA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BES-BTA</a></td>\n",
                            "<td class=val>Beschäftigte nach Betriebsart, Zeit</td>\n",
                            "<td class=val>BES-BTA</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/ZUS-BTA-ZSA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/ZUS-BTA-ZSA</a></td>\n",
                            "<td class=val>Zuschauer/innen, Besucher/innen nach Betriebsart, Zeit, Zuschauer- bzw. Besucherart</td>\n",
                            "<td class=val>ZUS-BTA-ZSA</td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/QMP-EIG-HAA-OBJ-ZIM\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/QMP-EIG-HAA-OBJ-ZIM</a></td>\n",
                            "<td class=val>Quadratmeterpreis nach Eigentümerart, Handänderungsart, Objektart, Zeit, Zimmerzahl einer Wohnung</td>\n",
                            "<td class=val>QMP-EIG-HAA-OBJ-ZIM</td></tr></table><div class=\"tinfo\">Total: 39, Shown: 39</div></div>"
                        ]
                    },
                    "metadata": {},
                    "output_type": "display_data"
                }
            ],
            "source": [
                "PREFIX schema: <http://schema.org/>\n",
                "PREFIX cube: <https://cube.link/>\n",
                "\n",
                "SELECT *\n",
                "FROM <https://lindas.admin.ch/stadtzuerich/stat>\n",
                "WHERE {\n",
                "  ?cube a cube:Cube ;\n",
                "       schema:name ?description ;\n",
                "       schema:identifier ?id .\n",
                "} "
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "You can see that some cubes have more than one description."
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "## Observation set\n",
                "\n",
                "Observations in data cubes are stored in observation set (`<https://cube.link/observationSet>`). Let's check the observationSet definition in its [documentation](https://cube.link/):\n",
                "\n",
                "**observationSet**  \n",
                "*Connects a cube with a set of observations.*\n",
                "\n",
                "\n",
                "We can find all observations in a cube using `cube:observationSet/cube:observation` as predicate. \n",
                "Let's query all observations in `<https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX>` cube."
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 7,
            "metadata": {},
            "outputs": [
                {
                    "data": {
                        "text/html": [
                            "<div class=\"krn-spql\"><table><tr class=hdr><th>obs</th></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX/observation/HEL2000-SEX0002-R00012-Z31122017\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX/observation/HEL2000-SEX0002-R00012-Z31122017</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX/observation/HEL2000-SEX0001-R00013-Z31122017\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX/observation/HEL2000-SEX0001-R00013-Z31122017</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX/observation/HEL1000-SEX0002-R00014-Z31122017\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX/observation/HEL1000-SEX0002-R00014-Z31122017</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX/observation/HEL2000-SEX0002-R00024-Z31122017\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX/observation/HEL2000-SEX0002-R00024-Z31122017</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX/observation/HEL1000-SEX0002-R00033-Z31122017\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX/observation/HEL1000-SEX0002-R00033-Z31122017</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX/observation/HEL2000-SEX0002-R00042-Z31122017\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX/observation/HEL2000-SEX0002-R00042-Z31122017</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX/observation/HEL2000-SEX0001-R00044-Z31122017\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX/observation/HEL2000-SEX0001-R00044-Z31122017</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX/observation/HEL1000-SEX0001-R00052-Z31122017\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX/observation/HEL1000-SEX0001-R00052-Z31122017</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX/observation/HEL2000-SEX0002-R00072-Z31122017\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX/observation/HEL2000-SEX0002-R00072-Z31122017</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX/observation/HEL1000-SEX0002-R00074-Z31122017\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX/observation/HEL1000-SEX0002-R00074-Z31122017</a></td></tr></table><div class=\"tinfo\">Total: 10, Shown: 10</div></div>"
                        ]
                    },
                    "metadata": {},
                    "output_type": "display_data"
                }
            ],
            "source": [
                "# List all observations in a cube\n",
                "\n",
                "PREFIX schema: <http://schema.org/>\n",
                "PREFIX cube: <https://cube.link/>\n",
                "\n",
                "SELECT ?obs\n",
                "FROM <https://lindas.admin.ch/stadtzuerich/stat>\n",
                "WHERE {\n",
                "  <https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX> a cube:Cube;\n",
                "           cube:observationSet/cube:observation ?obs.\n",
                "}\n",
                "LIMIT 10"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "We can count the number of observations using `COUNT` statement"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 8,
            "metadata": {},
            "outputs": [
                {
                    "data": {
                        "text/html": [
                            "<div class=\"krn-spql\"><table><tr class=hdr><th>count</th></tr><tr class=odd><td class=val>9512</td></tr></table><div class=\"tinfo\">Total: 1, Shown: 1</div></div>"
                        ]
                    },
                    "metadata": {},
                    "output_type": "display_data"
                }
            ],
            "source": [
                "# Count observations in a data cube\n",
                "\n",
                "PREFIX schema: <http://schema.org/>\n",
                "PREFIX cube: <https://cube.link/>\n",
                "\n",
                "SELECT (COUNT(?obs) AS ?count)\n",
                "FROM <https://lindas.admin.ch/stadtzuerich/stat>\n",
                "WHERE {\n",
                "  <https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX> a cube:Cube;\n",
                "           cube:observationSet/cube:observation ?obs.\n",
                "    # Equivalent to:\n",
                "    #       cube:observationSet ?observationSet.\n",
                "    #?observationSet cube:observation ?obs.\n",
                "}"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "So in `BEW-HEL-SEX` cube we have almost 10k observations about the population of Zürich! "
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "## Observations\n",
                "\n",
                "Let's take a closer look at the observations. We can get all observation properties using this query:"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 9,
            "metadata": {},
            "outputs": [
                {
                    "data": {
                        "text/html": [
                            "<div class=\"krn-spql\"><table><tr class=hdr><th>obsProperty</th></tr><tr class=odd><td class=val><a href=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#type\" target=\"_other\">http://www.w3.org/1999/02/22-rdf-syntax-ns#type</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/ZEIT\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/ZEIT</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/RAUM\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/RAUM</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/attribute/KORREKTUR\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/attribute/KORREKTUR</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/measure/WHG\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/measure/WHG</a></td></tr><tr class=even><td class=val><a href=\"http://schema.org/identifier\" target=\"_other\">http://schema.org/identifier</a></td></tr><tr class=odd><td class=val><a href=\"https://cube.link/observedBy\" target=\"_other\">https://cube.link/observedBy</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/TIME\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/TIME</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/ZIM\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/ZIM</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/measure/WHA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/measure/WHA</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/measure/ZIM\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/measure/ZIM</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/WHA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/WHA</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/measure/APZ\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/measure/APZ</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/measure/BEW\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/measure/BEW</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/SEX\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/SEX</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/HEL\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/HEL</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/GGH\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/GGH</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/measure/ANT\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/measure/ANT</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/ALT\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/ALT</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/measure/GES\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/measure/GES</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/TOU\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/TOU</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/BTA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/BTA</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/measure/AST\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/measure/AST</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/TIG\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/TIG</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/measure/TIA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/measure/TIA</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/measure/WRT\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/measure/WRT</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/EAP\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/EAP</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/measure/TII\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/measure/TII</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/BEW\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/BEW</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/measure/ZUS\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/measure/ZUS</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/measure/BES\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/measure/BES</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/ZSA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/ZSA</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/OBJ\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/OBJ</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/EIG\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/EIG</a></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/HAA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/HAA</a></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/measure/QMP\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/measure/QMP</a></td></tr></table><div class=\"tinfo\">Total: 36, Shown: 36</div></div>"
                        ]
                    },
                    "metadata": {},
                    "output_type": "display_data"
                }
            ],
            "source": [
                "# Observation properties\n",
                "\n",
                "PREFIX schema: <http://schema.org/>\n",
                "PREFIX cube: <https://cube.link/>\n",
                "\n",
                "SELECT DISTINCT ?obsProperty\n",
                "FROM <https://lindas.admin.ch/stadtzuerich/stat>\n",
                "WHERE {\n",
                "  ?dataset a cube:Cube;\n",
                "             cube:observationSet/cube:observation ?observation. \n",
                "    ?observation ?obsProperty ?obsVal.\n",
                "}"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "Quite a bit! Now, not every dataset will have all those properties. "
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "Let's get a list of properties for the `<https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX>` data cube. We will also get its labels using `schema:name`, and descrption using `schema:description`.\n",
                "\n",
                "Since not all properties have a description, we will use the `OPTIONAL` statement to query it."
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 10,
            "metadata": {},
            "outputs": [
                {
                    "data": {
                        "text/html": [
                            "<div class=\"krn-spql\"><table><tr class=hdr><th>obsProperty</th>\n",
                            "<th>label</th>\n",
                            "<th>description</th></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/ZEIT\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/ZEIT</a></td>\n",
                            "<td class=val>Zeit</td>\n",
                            "<td class=val>Repräsentation der Zeit als Konzept, repräsentiert die vollständige Komplexität.</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/RAUM\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/RAUM</a></td>\n",
                            "<td class=val>Raum</td>\n",
                            "<td class=val></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/measure/BEW\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/measure/BEW</a></td>\n",
                            "<td class=val>Wirtschaftliche Wohnbevölkerung</td>\n",
                            "<td class=val>Wirtschaftliche Wohnbevölkerung</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/HEL\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/HEL</a></td>\n",
                            "<td class=val>Heimatland</td>\n",
                            "<td class=val></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/SEX\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/SEX</a></td>\n",
                            "<td class=val>Geschlecht</td>\n",
                            "<td class=val></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/TIME\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/TIME</a></td>\n",
                            "<td class=val>Zeit</td>\n",
                            "<td class=val>Repräsentation der Zeit als ISO 8601 Datum (vereinfacht).</td></tr></table><div class=\"tinfo\">Total: 6, Shown: 6</div></div>"
                        ]
                    },
                    "metadata": {},
                    "output_type": "display_data"
                }
            ],
            "source": [
                "PREFIX schema: <http://schema.org/>\n",
                "PREFIX cube: <https://cube.link/>\n",
                "\n",
                "SELECT DISTINCT ?obsProperty ?label ?description \n",
                "FROM <https://lindas.admin.ch/stadtzuerich/stat>\n",
                "WHERE {\n",
                "  <https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX> a cube:Cube;\n",
                "             cube:observationSet/cube:observation ?observation. \n",
                "    ?observation ?obsProperty ?obsVal.\n",
                "    ?obsProperty schema:name ?label .\n",
                "    OPTIONAL {\n",
                "        ?obsProperty schema:description ?description .\n",
                "    }\n",
                "}"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "We can see that `BEW-HEL-SEX` data cube contains data on the population across:\n",
                "* time (german: *Zeit*)\n",
                "* place (german: *Raum*)\n",
                "* gender (german: *Geschlecht*)\n",
                "* origin (german: *Heimatland*)"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "Knowing properties, we can directlty query the measurements. Now, we are able to find the actual data: number of inhabitants across time, place, gender, and origin.\n",
                "\n",
                "We will find the measurements using `<https://ld.stadt-zuerich.ch/statistics/measure/BEW>` as the observation's property. We will also the cube's dimensions using:\n",
                "* `<https://ld.stadt-zuerich.ch/statistics/property/RAUM>` for place \n",
                "* `<https://ld.stadt-zuerich.ch/statistics/property/TIME>` for time \n",
                "* `<https://ld.stadt-zuerich.ch/statistics/property/HEL>` for origin\n",
                "* `<https://ld.stadt-zuerich.ch/statistics/property/SEX>` for gender\n",
                "\n",
                "And again, making use of `PREFIX` makes the query more readable."
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 11,
            "metadata": {},
            "outputs": [
                {
                    "data": {
                        "text/html": [
                            "<div class=\"krn-spql\"><table><tr class=hdr><th>time</th>\n",
                            "<th>place</th>\n",
                            "<th>origin</th>\n",
                            "<th>gender</th>\n",
                            "<th>count</th></tr><tr class=odd><td class=val>2017-12-31</td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/R00012\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/R00012</a></td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/HEL2000\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/HEL2000</a></td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/SEX0002\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/SEX0002</a></td>\n",
                            "<td class=val>94.0</td></tr><tr class=even><td class=val>2017-12-31</td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/R00013\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/R00013</a></td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/HEL2000\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/HEL2000</a></td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/SEX0001\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/SEX0001</a></td>\n",
                            "<td class=val>157.0</td></tr><tr class=odd><td class=val>2017-12-31</td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/R00014\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/R00014</a></td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/HEL1000\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/HEL1000</a></td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/SEX0002\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/SEX0002</a></td>\n",
                            "<td class=val>267.0</td></tr><tr class=even><td class=val>2017-12-31</td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/R00024\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/R00024</a></td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/HEL2000\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/HEL2000</a></td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/SEX0002\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/SEX0002</a></td>\n",
                            "<td class=val>1686.0</td></tr><tr class=odd><td class=val>2017-12-31</td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/R00033\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/R00033</a></td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/HEL1000\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/HEL1000</a></td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/SEX0002\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/SEX0002</a></td>\n",
                            "<td class=val>4694.0</td></tr><tr class=even><td class=val>2017-12-31</td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/R00042\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/R00042</a></td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/HEL2000\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/HEL2000</a></td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/SEX0002\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/SEX0002</a></td>\n",
                            "<td class=val>1709.0</td></tr><tr class=odd><td class=val>2017-12-31</td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/R00044\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/R00044</a></td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/HEL2000\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/HEL2000</a></td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/SEX0001\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/SEX0001</a></td>\n",
                            "<td class=val>2687.0</td></tr><tr class=even><td class=val>2017-12-31</td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/R00052\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/R00052</a></td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/HEL1000\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/HEL1000</a></td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/SEX0001\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/SEX0001</a></td>\n",
                            "<td class=val>2256.0</td></tr><tr class=odd><td class=val>2017-12-31</td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/R00072\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/R00072</a></td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/HEL2000\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/HEL2000</a></td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/SEX0002\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/SEX0002</a></td>\n",
                            "<td class=val>1613.0</td></tr><tr class=even><td class=val>2017-12-31</td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/R00074\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/R00074</a></td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/HEL1000\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/HEL1000</a></td>\n",
                            "<td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/code/SEX0002\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/code/SEX0002</a></td>\n",
                            "<td class=val>4453.0</td></tr></table><div class=\"tinfo\">Total: 10, Shown: 10</div></div>"
                        ]
                    },
                    "metadata": {},
                    "output_type": "display_data"
                }
            ],
            "source": [
                "PREFIX schema: <http://schema.org/>\n",
                "PREFIX cube: <https://cube.link/>\n",
                "PREFIX property: <https://ld.stadt-zuerich.ch/statistics/property/>\n",
                "\n",
                "SELECT ?time ?place ?origin ?gender ?count\n",
                "FROM <https://lindas.admin.ch/stadtzuerich/stat>\n",
                "WHERE {\n",
                "  <https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX> a cube:Cube;\n",
                "             cube:observationSet/cube:observation ?obs. \n",
                "    \n",
                "    ?obs <https://ld.stadt-zuerich.ch/statistics/measure/BEW> ?count ;\n",
                "                 property:RAUM ?place ;\n",
                "                 property:TIME ?time ;\n",
                "                 property:HEL ?origin ;\n",
                "                 property:SEX ?gender .\n",
                "    \n",
                "}\n",
                "LIMIT 10"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "To make the output more readable, let's replace the IRIs with the corresponding labels. This can be achieved by using `schema:name` for each property. "
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 12,
            "metadata": {},
            "outputs": [
                {
                    "data": {
                        "text/html": [
                            "<div class=\"krn-spql\"><table><tr class=hdr><th>time</th>\n",
                            "<th>place</th>\n",
                            "<th>origin</th>\n",
                            "<th>gender</th>\n",
                            "<th>count</th></tr><tr class=odd><td class=val>2017-12-31</td>\n",
                            "<td class=val>Hochschulen</td>\n",
                            "<td class=val>Ausland</td>\n",
                            "<td class=val>weiblich</td>\n",
                            "<td class=val>94.0</td></tr><tr class=even><td class=val>2017-12-31</td>\n",
                            "<td class=val>Lindenhof</td>\n",
                            "<td class=val>Ausland</td>\n",
                            "<td class=val>männlich</td>\n",
                            "<td class=val>157.0</td></tr><tr class=odd><td class=val>2017-12-31</td>\n",
                            "<td class=val>City</td>\n",
                            "<td class=val>Schweiz</td>\n",
                            "<td class=val>weiblich</td>\n",
                            "<td class=val>267.0</td></tr><tr class=even><td class=val>2017-12-31</td>\n",
                            "<td class=val>Enge</td>\n",
                            "<td class=val>Ausland</td>\n",
                            "<td class=val>weiblich</td>\n",
                            "<td class=val>1686.0</td></tr><tr class=odd><td class=val>2017-12-31</td>\n",
                            "<td class=val>Friesenberg</td>\n",
                            "<td class=val>Schweiz</td>\n",
                            "<td class=val>weiblich</td>\n",
                            "<td class=val>4694.0</td></tr><tr class=even><td class=val>2017-12-31</td>\n",
                            "<td class=val>Langstrasse</td>\n",
                            "<td class=val>Ausland</td>\n",
                            "<td class=val>weiblich</td>\n",
                            "<td class=val>1709.0</td></tr><tr class=odd><td class=val>2017-12-31</td>\n",
                            "<td class=val>Hard</td>\n",
                            "<td class=val>Ausland</td>\n",
                            "<td class=val>männlich</td>\n",
                            "<td class=val>2687.0</td></tr><tr class=even><td class=val>2017-12-31</td>\n",
                            "<td class=val>Escher Wyss</td>\n",
                            "<td class=val>Schweiz</td>\n",
                            "<td class=val>männlich</td>\n",
                            "<td class=val>2256.0</td></tr><tr class=odd><td class=val>2017-12-31</td>\n",
                            "<td class=val>Hottingen</td>\n",
                            "<td class=val>Ausland</td>\n",
                            "<td class=val>weiblich</td>\n",
                            "<td class=val>1613.0</td></tr><tr class=even><td class=val>2017-12-31</td>\n",
                            "<td class=val>Witikon</td>\n",
                            "<td class=val>Schweiz</td>\n",
                            "<td class=val>weiblich</td>\n",
                            "<td class=val>4453.0</td></tr></table><div class=\"tinfo\">Total: 10, Shown: 10</div></div>"
                        ]
                    },
                    "metadata": {},
                    "output_type": "display_data"
                }
            ],
            "source": [
                "PREFIX schema: <http://schema.org/>\n",
                "PREFIX cube: <https://cube.link/>\n",
                "PREFIX property: <https://ld.stadt-zuerich.ch/statistics/property/>\n",
                "\n",
                "SELECT ?time ?place ?origin ?gender ?count\n",
                "FROM <https://lindas.admin.ch/stadtzuerich/stat>\n",
                "WHERE {\n",
                "  <https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX> a cube:Cube;\n",
                "             cube:observationSet/cube:observation ?obs. \n",
                "    \n",
                "    ?obs <https://ld.stadt-zuerich.ch/statistics/measure/BEW> ?count ;\n",
                "                 property:RAUM/schema:name ?place ;\n",
                "                 property:TIME  ?time ;\n",
                "                 property:HEL/schema:name  ?origin ;\n",
                "                 property:SEX/schema:name  ?gender .\n",
                "    \n",
                "}\n",
                "LIMIT 10"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "Volià! We now got all measurements across all dimensions in the `BEW-ALT-SEX` data cube. The data could be further refined, for example by filtering on `gender` or `place`."
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "Let's do the same exercise for the `QMP-EIG-HAA-OBJ-ZIM` data cube. \n",
                "\n",
                "First, let's get observations' properties."
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 13,
            "metadata": {},
            "outputs": [
                {
                    "data": {
                        "text/html": [
                            "<div class=\"krn-spql\"><table><tr class=hdr><th>obsProperty</th>\n",
                            "<th>label</th>\n",
                            "<th>description</th></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/ZEIT\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/ZEIT</a></td>\n",
                            "<td class=val>Zeit</td>\n",
                            "<td class=val>Repräsentation der Zeit als Konzept, repräsentiert die vollständige Komplexität.</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/RAUM\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/RAUM</a></td>\n",
                            "<td class=val>Raum</td>\n",
                            "<td class=val></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/ZIM\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/ZIM</a></td>\n",
                            "<td class=val>Zimmerzahl einer Wohnung</td>\n",
                            "<td class=val></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/OBJ\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/OBJ</a></td>\n",
                            "<td class=val>Objektart</td>\n",
                            "<td class=val></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/EIG\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/EIG</a></td>\n",
                            "<td class=val>Eigentümerart</td>\n",
                            "<td class=val></td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/HAA\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/HAA</a></td>\n",
                            "<td class=val>Handänderungsart</td>\n",
                            "<td class=val></td></tr><tr class=odd><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/measure/QMP\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/measure/QMP</a></td>\n",
                            "<td class=val>Quadratmeterpreis</td>\n",
                            "<td class=val>Preis in Franken pro Quadratmeter</td></tr><tr class=even><td class=val><a href=\"https://ld.stadt-zuerich.ch/statistics/property/TIME\" target=\"_other\">https://ld.stadt-zuerich.ch/statistics/property/TIME</a></td>\n",
                            "<td class=val>Zeit</td>\n",
                            "<td class=val>Repräsentation der Zeit als ISO 8601 Datum (vereinfacht).</td></tr></table><div class=\"tinfo\">Total: 8, Shown: 8</div></div>"
                        ]
                    },
                    "metadata": {},
                    "output_type": "display_data"
                }
            ],
            "source": [
                "PREFIX schema: <http://schema.org/>\n",
                "PREFIX cube: <https://cube.link/>\n",
                "\n",
                "SELECT DISTINCT ?obsProperty ?label ?description \n",
                "FROM <https://lindas.admin.ch/stadtzuerich/stat>\n",
                "WHERE {\n",
                "  <https://ld.stadt-zuerich.ch/statistics/QMP-EIG-HAA-OBJ-ZIM> a cube:Cube;\n",
                "             cube:observationSet/cube:observation ?observation. \n",
                "    ?observation ?obsProperty ?obsVal.\n",
                "    ?obsProperty schema:name ?label .\n",
                "    OPTIONAL {\n",
                "        ?obsProperty schema:description ?description .\n",
                "    }\n",
                "}"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "Now, let's use these properties to query the data."
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 14,
            "metadata": {},
            "outputs": [
                {
                    "data": {
                        "text/html": [
                            "<div class=\"krn-spql\"><div class=\"krn-error\"><span class=\"title\">Error:</span> HTTP error: 504 Gateway Time-out: \r",
                            "<br/>504 Gateway Time-out\r",
                            "<br/>\r",
                            "<br/>504 Gateway Time-out\r",
                            "<br/>nginx\r",
                            "<br/>\r",
                            "<br/>\r",
                            "<br/></div></div>"
                        ],
                        "text/plain": [
                            "Error: HTTP error: 504 Gateway Time-out: \r\n",
                            "504 Gateway Time-out\r\n",
                            "\r\n",
                            "504 Gateway Time-out\r\n",
                            "nginx\r\n",
                            "\r\n",
                            "\r\n"
                        ]
                    },
                    "metadata": {},
                    "output_type": "display_data"
                }
            ],
            "source": [
                "PREFIX schema: <http://schema.org/>\n",
                "PREFIX cube: <https://cube.link/>\n",
                "PREFIX property: <https://ld.stadt-zuerich.ch/statistics/property/>\n",
                "\n",
                "SELECT ?time ?place ?rooms ?ownership ?haa ?type ?price\n",
                "FROM <https://lindas.admin.ch/stadtzuerich/stat>\n",
                "WHERE {\n",
                "  <https://ld.stadt-zuerich.ch/statistics/QMP-EIG-HAA-OBJ-ZIM> a cube:Cube;\n",
                "             cube:observationSet/cube:observation ?obs . \n",
                "    \n",
                "    ?obs <https://ld.stadt-zuerich.ch/statistics/measure/QMP> ?price ;\n",
                "                 property:TIME  ?time ;\n",
                "                 property:RAUM/schema:name ?place ;\n",
                "                 property:ZIM/schema:name  ?rooms ;\n",
                "                 property:EIG/schema:name  ?ownership ;\n",
                "                 property:HAA/schema:name  ?market ;\n",
                "                 property:OBJ/schema:name  ?type .\n",
                "    \n",
                "}\n",
                "LIMIT 10"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "You can see that some prices come back as zero. Getting an appartment for free is extremely rare in Switzerland. That's presumably a data issue. \n",
                " \n",
                "Let's remove those invalid observations using a `FILTER` statement."
            ]
        },
        {
            "cell_type": "code",
            "execution_count": null,
            "metadata": {},
            "outputs": [],
            "source": [
                "PREFIX schema: <http://schema.org/>\n",
                "PREFIX cube: <https://cube.link/>\n",
                "PREFIX property: <https://ld.stadt-zuerich.ch/statistics/property/>\n",
                "\n",
                "SELECT ?time ?place ?rooms ?ownership ?haa ?type ?price\n",
                "FROM <https://lindas.admin.ch/stadtzuerich/stat>\n",
                "WHERE {\n",
                "  <https://ld.stadt-zuerich.ch/statistics/QMP-EIG-HAA-OBJ-ZIM> a cube:Cube;\n",
                "             cube:observationSet/cube:observation ?obs . \n",
                "    \n",
                "    ?obs <https://ld.stadt-zuerich.ch/statistics/measure/QMP> ?price ;\n",
                "                 property:TIME  ?time ;\n",
                "                 property:RAUM/schema:name ?place ;\n",
                "                 property:ZIM/schema:name  ?rooms ;\n",
                "                 property:EIG/schema:name  ?ownership ;\n",
                "                 property:HAA/schema:name  ?market ;\n",
                "                 property:OBJ/schema:name  ?type .\n",
                "    FILTER (?price > 0)  \n",
                "}\n",
                "LIMIT 10"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "That's better!"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "## Data slices\n",
                "\n",
                "Thus far, we queried all observations from the data cube. Sometimes, you are interested in just some of the dimensions. You can aggregate the results using `GROUP BY` and `SUM` statements.\n",
                "\n",
                "Let's find the total number of people in Zurich accross `property:TIME`. To do this, we sum the remaining dimensions:\n",
                "* `property:RAUM`\n",
                "* `property:HEL`\n",
                "* `property:SEX`  \n",
                "\n",
                "This can be achieved by leaving them out of the `GROUP BY` statement. All unmentioned variables will be aggregated."
            ]
        },
        {
            "cell_type": "code",
            "execution_count": null,
            "metadata": {},
            "outputs": [],
            "source": [
                "PREFIX schema: <http://schema.org/>\n",
                "PREFIX cube: <https://cube.link/>\n",
                "PREFIX property: <https://ld.stadt-zuerich.ch/statistics/property/>\n",
                "\n",
                "SELECT ?time (SUM(?count) AS ?aggCount)\n",
                "FROM <https://lindas.admin.ch/stadtzuerich/stat>\n",
                "WHERE {\n",
                "  <https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX> a cube:Cube;\n",
                "             cube:observationSet/cube:observation ?obs. \n",
                "    \n",
                "    ?obs <https://ld.stadt-zuerich.ch/statistics/measure/BEW> ?count ;\n",
                "                 property:TIME  ?time .\n",
                "    \n",
                "}\n",
                "GROUP BY ?time\n",
                "LIMIT 10"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "You can also filter the results to include only one dimension. This can be done by setting the object to the value you are interested in.\n",
                "\n",
                "Let's get the number of female inhabitants over time. First, we will find IRIs for gender."
            ]
        },
        {
            "cell_type": "code",
            "execution_count": null,
            "metadata": {},
            "outputs": [],
            "source": [
                "PREFIX schema: <http://schema.org/>\n",
                "PREFIX cube: <https://cube.link/>\n",
                "PREFIX property: <https://ld.stadt-zuerich.ch/statistics/property/>\n",
                "\n",
                "SELECT DISTINCT ?genderIRI ?gender\n",
                "FROM <https://lindas.admin.ch/stadtzuerich/stat>\n",
                "WHERE {\n",
                "  <https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX> a cube:Cube;\n",
                "             cube:observationSet/cube:observation ?obs. \n",
                "    \n",
                "    ?obs property:SEX ?genderIRI.\n",
                "    ?obs property:SEX/schema:name ?gender .\n",
                "    \n",
                "}"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "`<https://ld.stadt-zuerich.ch/statistics/code/SEX0002>` stands for female (german *weiblich*). We will use it to filter observations for female only. \n",
                "\n",
                "In SPARQL, this can be done by setting observation predicate to `property:SEX`, and its object to `<https://ld.stadt-zuerich.ch/statistics/code/SEX0002>`."
            ]
        },
        {
            "cell_type": "code",
            "execution_count": null,
            "metadata": {},
            "outputs": [],
            "source": [
                "PREFIX schema: <http://schema.org/>\n",
                "PREFIX cube: <https://cube.link/>\n",
                "PREFIX property: <https://ld.stadt-zuerich.ch/statistics/property/>\n",
                "\n",
                "SELECT ?time ?place ?origin ?count\n",
                "FROM <https://lindas.admin.ch/stadtzuerich/stat>\n",
                "WHERE {\n",
                "  <https://ld.stadt-zuerich.ch/statistics/BEW-HEL-SEX> a cube:Cube;\n",
                "             cube:observationSet/cube:observation ?obs. \n",
                "    \n",
                "    ?obs <https://ld.stadt-zuerich.ch/statistics/measure/BEW> ?count ;\n",
                "                 property:RAUM/schema:name ?place ;\n",
                "                 property:TIME  ?time ;\n",
                "                 property:HEL/schema:name  ?origin ;\n",
                "                 property:SEX  <https://ld.stadt-zuerich.ch/statistics/code/SEX0002> .\n",
                "    \n",
                "} \n",
                "LIMIT 10"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "Volià, the number of female inhabitants across time, origin, and city district."
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "## SPEX\n",
                "\n",
                "There are many ways to learn about the structure of linked data. SPARQL queries may seem dense at first and may take some time to get you to the right place. However, as you get better with SPARQL, they are a great tool to slice data.\n",
                "\n",
                "Another way to discover linked data is [SPEX](https://spex.zazuko.com/#/?url=https%3A%2F%2Fld.stadt-zuerich.ch%2Fquery&graph=https%3A%2F%2Flindas.admin.ch%2Fstadtzuerich%2Fstat%2Fviews&prefixes=wdt%3Ahttp%3A%2F%2Fwww.wikidata.org%2Fprop%2Fdirect%2F&forceIntrospection=false), a web based tool that visualizes the structure of a linked data source.\n",
                "\n",
                "<div align=\"center\"><h3>SPEX</h3></div>\n",
                "<img src=\"img/spex.png\" width=\"600\"/>"
            ]
        }
    ],
    "metadata": {
        "kernelspec": {
            "display_name": "SPARQL",
            "language": "sparql",
            "name": "sparql"
        },
        "language_info": {
            "codemirror_mode": {
                "name": "sparql"
            },
            "mimetype": "application/sparql-query",
            "name": "sparql",
            "pygments_lexer": "sparql-nb"
        },
        "title": "Data Model"
    },
    "nbformat": 4,
    "nbformat_minor": 4
}