Εργαστήριο Σημασιολογικού Ιστού



Σχετικά έγγραφα
Εργαστήριο Σημασιολογικού Ιστού

Ενότητα 1: HTTP, Clients και Servers. (Web, το θεμέλιο του Σημασιολογικού Ιστού)

Εργαστήριο Σημασιολογικού Ιστού

Παράρτημα A: PHP, HTML φόρμες και το πρωτόκολλο HTTP.

Ενότητα 3: Τα δεδομένα στο Web. (και η σημασιολογία τους semantics )

Εργαστήριο Σημασιολογικού Ιστού

Εργαστήριο Σημασιολογικού Ιστού

Μεταπτυχιακή Διατριβή

Εργαστήριο Σημασιολογικού Ιστού

Εργαστήριο Σημασιολογικού Ιστού


Web and HTTP. Βασικά Συστατικά: Web Server Web Browser HTTP Protocol

Τμήμα Πληροφορικής ΑΠΘ

Εργαστήριο Σημασιολογικού Ιστού

Εργαστήριο Σημασιολογικού Ιστού

Τεχνολογίες RDF για τον Ιστό Δεδοµένων

Βάσεις Δεδομένων. Εργαστήριο ΙV. Τμήμα Πληροφορικής ΑΠΘ

Βάσεις Δεδομένων. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

Ενότητα 2: HTTP, Clients και Servers (II) (Web, το θεμέλιο του Σημασιολογικού Ιστού)

Η SQL ως γλώσσα ερωτημάτων. Υπενθυμίζουμε: Σχέση = Πίνακας Πλειάδα = Εγγραφή = Γραμμή (Πίνακα) Πεδίο = Γνώρισμα (Σχέσης) = Στήλη (Πίνακα)

Εργαστήριο Σημασιολογικού Ιστού

Εργαστήριο Σημασιολογικού Ιστού

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 5: SQL (Απλή SELECT) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

ΤΑΞΙΝΟΜΗΣΗ ΑΠΟΤΕΛΕΣΜΑΤΩΝ ΕΡΩΤΗΜΑΤΟΣ

Εργαστήριο Σημασιολογικού Ιστού

Κεφάλαιο 9 Συναθροίσεις

Διαβάστε στο Παράρτημα Α.1 πώς θα γράψετε ένα πρόγραμμα PHP για την παροχή δεδομένων σε μορφή διαφορετική από την HTML.

Σχεδιασμός Βάσεων Δεδομένων

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) Ενότητα Advanced Βάσεις Δεδομένων, Προχωρημένο Επίπεδο. Copyright 2013 ECDL Foundation Ref: SL_AM3_Syl2.

ΕΣΔ 232: ΟΡΓΑΝΩΣΗ ΔΕΔΟΜΕΝΩΝ ΣΤΗΝ ΚΟΙΝΩΝΙΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΑΣ. Ακαδημαϊκό Έτος , Εαρινό Εξάμηνο Διδάσκων Καθ.: Νίκος Τσαπατσούλης

ΣΥΓΚΡΙΤΙΚΗ ΜΕΛΕΤΗ ΤΕΧΝΟΛΟΓΙΩΝ ΔΙΑΔΙΚΤΥΑΚΩΝ ΥΠΗΡΕΣΙΩΝ ΚΑΙ ΑΞΙΟΛΟΓΗΣΗ ΤΗΣ ΤΕΧΝΟΛΟΓΙΑΣ REST ΠΛΑΣΤΑΡΑΣ ΕΥΡΙΠΙΔΗΣ

Περιγραφή του EcoTruck

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

ΗΥ-360 Αρχεία και Βάσεις Δεδομένων Διδάσκων: Δ. Πλεξουσάκης. Φροντιστήριο SQL Examples ΙΙ Ξένου Ρουμπίνη

GROUP BY, HAVING, COUNT, MIN, MAX, SUM, AVG, ROLLUP.

Γλωσσική Τεχνολογία. HTML/XML Processing HTTP Services

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ.


Εργαστήριο Σημασιολογικού Ιστού

Τμήμα Διοίκησης Επιχειρήσεων

Βάσεις εδοµένων Ευαγγελία Πιτουρά 2

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ. Ε. Χρήσιμοι Σύνδεσμοι

Τμήμα Πληροφορικής ΑΠΘ

Η SQL αποτελείται από δύο υποσύνολα, τη DDL και τη DML.

ΕΣΔ 232: ΟΡΓΑΝΩΣΗ ΔΕΔΟΜΕΝΩΝ ΣΤΗ ΚΟΙΝΩΝΙΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΑΣ. Ακαδημαϊκό Έτος , Εαρινό Εξάμηνο. Εργαστηριακή Άσκηση 5 21/02/2012


Μέρος 3 ο : Βασικές Έννοιες για δυναμικές ιστοσελίδες

ΘΕΜΑΤΑ. Θέμα 1 ο Σύμφωνα με τους παραπάνω πίνακες και τη θέση που έχουν τα ξένα κλειδιά βρείτε τους

Εργαστήριο Σημασιολογικού Ιστού

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 6: SQL (Συζεύξεις, Εμφώλευση, Ομαδοποίηση) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

ΠΡΟΣΟΧΗ: Οι απαντήσεις πολλαπλής επιλογής µόνο πάνω στο ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ

Εργαστήριο 6 ο 7 ο / Ερωτήματα Ι

Σημασιολογικός Ιστός (Semantic Web) - XML

Τεχνολογίες Διαδικτύου. Server Side Scripting I PHP

Τμήμα Πληροφορικής ΑΠΘ

10 η Διάλεξη Python Βάσεις δεδομένων στη python

Ηλεκτρονικοί Υπολογιστές II

Ασφάλεια Υπολογιστών Και Δικτύων. Προσομοίωση επίθεσης σε ευπαθές σε SQL Injection σύστημα και απόκτηση κονσόλας διαχειριστή

Εξατοµίκευση Ερωτήσεων σε Βάσεις εδοµένων

PayByBank RESTful API GUIDE

Βασικές Έννοιες Web Εφαρμογών

Υπηρεσίες Ιστού (Web Services) Τεχνολογία Διοίκησης Επιχειρησιακών Διαδικασιών

PROJECT ΕΡΓΑΣΤΗΡΙΩΝ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ Ι. Τμήμα Μηχανικών Πληροφορικής Τ.Ε.

2 ο Σύνολο Ασκήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Σχεδίαση Βάσεων Δεδομένων

ΕΡΓΑΣΤΗΡΙΟ FRONT PAGE 3

Ηλεκτρονικοί Υπολογιστές II

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΤΕΧΝΙΚΕΣ ΠΡΟΔΙΑΓΡΑΦΕΣ WEB SERVICES ΓΙΑ ΔΙΑΣΥΝΔΕΣΗ ΜΕ ΤΟ ΥΦΙΣΤΑΜΕΝΟ ΠΛΗΡΟΦΟΡΙΑΚΟ ΣΥΣΤΗΜΑ

Εργαστήριο Βάσεων Δεδομένων

Προγραμματισμός Ιστοσελίδων (Web Design)

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 7α: SQL (NULL, Διαίρεση) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

DELETE, UPDATE, INSERT.

Hellenic European Law Concordance

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. 3ο Μάθημα: Εισαγωγή στην SQL. Δρ. Κωνσταντίνος Χ.

Paybybank RESTful API GUIDE

Βάσεις Δεδομένων Προχωρημένα Ερωτήματα SQL

Βασικά Στοιχεία Python 3

«Μηχανή Αναζήτησης Αρχείων» Ημερομηνία Παράδοσης: 30/04/2015, 09:00 π.μ.

DELETE, UPDATE, INSERT

Βάσεις Δεδομένων (Databases)

(Πρωτόγνωρα) Δεδομένα για την Οικονομία

Διασύνδεση και Άνοιγμα Δεδομένων του Α.Π.Θ. Καραογλάνογλου Κωνσταντίνος Μονάδα Σημασιολογικού Ιστού Α.Π.Θ 18/3/2014

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 8: SQL (Πρακτική Εξάσκηση 2) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

Σύνολα Ασκήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Χειμερινό εξάμηνο Διδάσκοντες: Ν. Παπασπύρου, Β. Βεσκούκης, Κ. Σαΐδης

PHP 1. Διδάσκοντες: Π. Αγγελάτος, Δ. Ζήνδρος Επιμέλεια διαφανειών: Δ. Ζήνδρος Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 10η Διάλεξη: Web Services

Οδηγίες Ακολουθήστε τα παρακάτω βήματα. Βεβαιωθείτε ότι το πρόγραμμά σας δουλεύει σωστά σε κάθε βήμα, πριν προχωρήσετε στο επόμενο.

databases linux - terminal (linux / windows terminal)

ΟΝΟΜΑΤΕΠΩΝΥΜΟ : Αντικείμενα: Βάσεις δεδομένων, σχέσεις μεταξύ πινάκων, ερωτήματα, φόρμες και αναφορές.

SQL Data Manipulation Language

SQL. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Προγραμματισμός ΙI (Θ)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Βάσεις Δεδομένων. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

Query-by-Example (QBE)

Transcript:

Εργαστήριο Σημασιολογικού Ιστού Ενότητα 9: Ερωτήματα σε SPARQL endpoints Μ.Στεφανιδάκης 23-5-2015.

Ερωτήματα σε SPARQL endpoints Η πραγματική αξία της SPARQL φαίνεται όταν απευθύνουμε ερωτήματα σε endpoints Μέχρι τώρα η επεξεργασία του ερωτήματος γινόταν στον υπολογιστή μας Σε σετ δεδομένων αποθηκευμένο τοπικά Ένα SPARQL endpoint είναι μια υπηρεσία web Ένας server που δέχεται το ερώτημα SPARQL από την εφαρμογή μας (client) εκτελεί την κατάλληλη λειτουργία σε ένα σετ δεδομένων RDF (και όχι μόνο RDF) και επιστρέφει την απάντηση μέσω του πρωτοκόλλου HTTP Ένα καλό site για αναζήτηση SPARQL endpoints είναι το Datahub

Μην ξεχνάτε όμως Παρά τη συναρπαστική ιδέα να χρησιμοποιείτε σημασιολογικά δεδομένα από διάφορες πηγές Με εφαρμογές που δεν φτιάχτηκαν ειδικά για τα δεδομένα αυτά Αλλά μπορούν να προσαρμόσουν τη συμπεριφορά τους δυναμικά Σήμερα (2015) υπάρχουν αρκετά εμπόδια: Η διαθεσιμότητα των endpoints δεν είναι δεδομένη ανά πάρα στιγμή Τα περισσότερα endpoints συντηρούνται εθελοντικά-μη κερδοσκοπικά! Η απόδοση δεν είναι εγγυημένη ούτε σταθερή Μη θεωρείτε δεδομένο ότι το endpoint θα απαντήσει σε πολύπλοκα ερωτήματα (timeout) Το σχήμα των παρεχόμενων δεδομένων μπορεί να αλλάξει με τον χρόνο Να αλλάξει το χρησιμοποιούμενο λεξιλόγιο RDF

SPARQL και HTTP To πρότυπο της SPARQL ορίζει τον τρόπο αποστολής της ερώτησης και τη μορφή των αποκρίσεων Χρησιμοποιώντας τη μέθοδο GET ή POST Για την αποστολή παραμέτρων, η σπουδαιότερη εκ των οποίων είναι η query που ισούται με το κείμενο της ερώτησης SPARQL Ακριβώς όπως ο browser στέλνει δεδομένα από φόρμες Το κείμενο της ερώτησης SPARQL πρέπει να κωδικοποιηθεί με % (url-encoded) Στα παραδείγματά μας θα χρησιμοποιήσουμε το εργαλείο curl (αποστολή μέσω POST) ή προγράμματα σε Python (αποστολή μέσω GET)

Παράδειγμα ερωτήματος Ετοιμάστε αρχείο test.rq με την εξής ερώτηση SPARQL: ταινίες με τον Τζακ Νίκολσον ως ηθοποιό και η διάρκειά τους PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX movie: <http://data.linkedmdb.org/resource/movie/> SELECT?fname?ftime WHERE{?film movie:actor <http://data.linkedmdb.org/resource/actor/29704>.?film movie:runtime?ftime.?film rdfs:label?fname. Στείλτε στο http://data.linkedmdb.org/sparql: curl --data-urlencode query@test.rq http://data.linkedmdb.org/sparql

Απάντηση σε SELECT (XML) <?xml version="1.0"?> <sparql xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xs="http://www.w3.org/2001/xmlschema#" xmlns="http://www.w3.org/2005/sparql-results#" > <head> <variable name="fname"/> <variable name="ftime"/> </head> <results> <result> <binding name="fname"> <literal>batman</literal> </binding> <binding name="ftime"> <literal>126</literal> </binding> </result> </results> </sparql>

Ζητώντας εναλλακτικό περιεχόμενο Η απάντηση σε μορφή XML είναι αρκετά περίπλοκη... Κληρονομιά από την εποχή της SPARQL 1.0 Σημαντική όμως γιατί πολλά endpoints τη χρησιμοποιούν ακόμα και σήμερα! Υπάρχουν και πιο μοντέρνες μορφές απάντησης σε ερωτήματα SELECT JSON (και πιο σπάνια, CSV και TSV) Πώς θα τα ζητήσετε; Μέσω του μηχανισμού διαπραγμάτευσης επιστρεφόμενου περιεχομένου (content negotiation) του HTTP

Διαπραγμάτευση Επιστρεφόμενου Περιεχομένου Το πρωτόκολλο HTTP ορίζει ότι ένας client μπορεί να ζητήσει τα επιστρεφόμενα δεδομένα σε διαφορετική μορφή από την εξ'ορισμού (default) Δίνοντας την κατάλληλη επικεφαλίδα Accept: της αίτησης Θυμηθείτε όμως ότι ο server έχει δικαίωμα να στείλει την εξ'ορισμού μορφή Όταν δεν μπορεί να ικανοποιήσει το αίτημά σας Θεωρητικά ο server υποδεικνύει αν ένα έγγραφο είναι διαθέσιμο σε πολλές μορφές (επικεφαλίδα Vary: της απόκρισης) Πρακτικά, δεν τηρείται με συνέπεια Παράδειγμα: curl --data-urlencode query@test.rq http://data.linkedmdb.org/sparql -H 'Accept: application/sparql-results+json'

{ Απάντηση σε SELECT (JSON) "head": { "vars": [ "fname", "ftime" ], "results": { "bindings": [ { "fname": { "type": "literal", "value": "Batman", "ftime": { "type": "literal", "value": "126", { "fname": { "type": "literal", "value": "Chinatown", "ftime": { "type": "literal", "value": "131", { "fname": { "type": "literal", "value": "Easy Rider" "ftime": { "type": "literal", "value": "94" ]

Επεξεργασία απάντησης SELECT με Python Στα παραδείγματα που ακολουθούν Χρησιμοποιούνται μόνο modules από τη standard library Βολικό για γρήγορες δοκιμές και όταν δεν μπορείτε να έχετε 3rd-party modules! Σε πιο σοβαρή εφαρμογή θα μπορούσατε Να χρησιμοποιήσετε το module Requests αντί της urllib Να ψάξετε για SPARQL Clients στο pypi.python.org Συμβουλή: δεν χρειάζονται 3rd-party modules για τις πολύ απλές περιπτώσεις!

Παράδειγμα Python με XML: 1.Λήψη from urllib.request import urlopen from urllib.parse import urlencode import xml.etree.elementtree as ET # to analyze xml results re endpoint = "http://data.linkedmdb.org/sparql?" sparqlq = """... κείμενο ερωτήματος SPARQL... """ # params sent to server params = { 'query': sparqlq # create appropriate param string paramstr = urlencode(params) # send GET http request object with params appended page = urlopen(endpoint+paramstr) # get results and close text = page.read().decode('utf-8') page.close()

Παράδειγμα Python με XML: 2.Χειρισμός # the default sparql results namespace - used by ET NS = '{http://www.w3.org/2005/sparql-results#' # note the {! # create a tree element from response tree = ET.fromstring(text) # this is root element, 'sparql' # iterate over result sets for result in tree.findall(ns+'results/'+ns+'result'): # iterate over all bindings of each result for binding in result.findall(ns+'binding'): bname = binding.get("name") # what column? bcontent = binding[0] # 1st child of <binding> print(bname,bcontent.text) (κατεβάστε τον κώδικα του παραδείγματος)

Παράδειγμα Python με JSON: 1.Λήψη from urllib.request import urlopen,request from urllib.parse import urlencode import json endpoint = "http://data.linkedmdb.org/sparql?" sparqlq = """... κείμενο ερωτήματος SPARQL... """ # params sent to server params = { 'query': sparqlq # create appropriate param string paramstr = urlencode(params) # create GET http request object with params appended req = Request(endpoint+paramstr) # request specific content type req.add_header('accept','application/sparql-results+json') # dispatch request page = urlopen(req) # get results and close text = page.read().decode('utf-8') page.close()

Παράδειγμα Python με JSON: 2.Χειρισμός # convert to json object jso = json.loads(text) # iterate over results for binding in jso['results']['bindings']: # for every column in binding for bname,bcontent in binding.items(): print(bname,bcontent['value']) (κατεβάστε τον κώδικα του παραδείγματος)

Η σειρά σας! Επισκεφτείτε το site Linked Movie Database και δείτε το παράδειγμα αναπαράστασης της πληροφορίας ενός φίλμ σε τριάδες RDF Στη συνέχεια, τροποποιήστε το προηγούμενο ερώτημα έτσι ώστε να λαμβάνετε τις ταινίες του Τζακ Νίκολσον και την ημερομηνία κυκλοφορίας τους, ταξινομημένες με φθίνουσα ημερομηνία Το URI του ηθοποιού είναι <http://data.linkedmdb.org/resource/actor/29704> Δοκιμάστε πρώτα με το curl και μετά μέσω Python!

Προαιρετικά ταιριάσματα (OPTIONAL) Δοκιμάστε το εξής ερώτημα : PREFIX lmdbm: <http://data.linkedmdb.org/resource/movie/> PREFIX lmdba: <http://data.linkedmdb.org/resource/actor/> PREFIX lmdbf: <http://data.linkedmdb.org/resource/film/> PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT?film?place WHERE{?film lmdbm:actor lmdba:29704.?film foaf:based_near?place. Γιατί δεν επιστρέφονται όλα τα φιλμ όπως πριν; Πολλά δεν συνδέονται με foaf:based_near, άρα το ταίριασμα αποτυγχάνει Κι αν θέλαμε το?film ακόμα κι όταν δεν υπάρχει?place;

Η χρήση του OPTIONAL Δοκιμάστε τώρα το ερώτημα: PREFIX lmdbm: <http://data.linkedmdb.org/resource/movie/> PREFIX lmdba: <http://data.linkedmdb.org/resource/actor/> PREFIX lmdbf: <http://data.linkedmdb.org/resource/film/> PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT?film?place WHERE{?film lmdbm:actor lmdba:29704. OPTIONAL {?film foaf:based_near?place. Σχετικά με το OPTIONAL: Μπορείτε να έχετε πολλαπλά OPTIONAL, εξετάζονται με τη σειρά που τα δίνετε Σε περίπτωση μη ταιριάσματος, κάποιες μεταβλητές μένουν χωρίς τιμή (unbound)

Η άρνηση (negation) στη SPARQL 1.0 Ψάξτε για ό,τι δεν ταιριάζει: PREFIX lmdbm: <http://data.linkedmdb.org/resource/movie/> PREFIX lmdba: <http://data.linkedmdb.org/resource/actor/> PREFIX lmdbf: <http://data.linkedmdb.org/resource/film/> PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT?film WHERE{?film lmdbm:actor lmdba:29704. OPTIONAL {?film foaf:based_near?place. FILTER (!bound(?place)) Συνδυασμός OPTIONAL και FILTER(!bound()): Φίλμ χωρίς σύνδεση με τοποθεσία

Αναζήτηση με κανονικές εκφράσεις Θα έχετε ήδη καταλάβει ένα σημαντικό πρόβλημα: Πώς θα μάθετε τα URIs που αντιστοιχούν σε συγκεκριμένα ονόματα; Αν ξέρατε ακριβώς πώς αναφέρεται ένα string σε μια τριάδα θα μπορούσατε να γράψετε: SELECT?uri WHERE{?uri rdfs:label "Agent Smith". Πώς θα ψάξετε όμως επιμέρους λέξεις; Οπουδήποτε μέσα σε ένα string; Μπορείτε να χρησιμοποιήσετε κανονικές εκφράσεις σε συνδυασμό με το FILTER Η αναζήτηση όμως μπορεί να είναι αργή σε μεγάλα σετ δεδομένων... Με εξαίρεση τις αναζητήσεις προθέματος (prefix) που μπορούν να εκμεταλλευτούν συνήθως κάποιο ευρετήριο

FILTER και regex() PREFIX movie: <http://data.linkedmdb.org/resource/movie/> PREFIX lmdba: <http://data.linkedmdb.org/resource/actor/> PREFIX lmdbf: <http://data.linkedmdb.org/resource/film/> PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT?actor?aname WHERE{?actor a movie:actor.?actor movie:actor_name?aname. FILTER (regex(?aname,"^kevin","i")) Το πρώτο όρισμα της regex() πρέπει να είναι string Το δεύτερο όρισμα είναι η κανονική έκφραση με τη συνήθη σύνταξη Το τρίτο όρισμα είναι προαιρετικά flags, όπως το "i" (case insensitive)

Επιλογή γλώσσας Δοκιμάστε το εξής ερώτημα στο endpoint http://fr.dbpedia.org/sparql: PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX dbpedia-fr: <http://fr.dbpedia.org/resource/> SELECT?label WHERE{ dbpedia-fr:corfou rdfs:label?label. Πώς θα επιλέξετε τη γλώσσα ενός literal: PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX dbpedia-fr: <http://fr.dbpedia.org/resource/> SELECT?label WHERE{ dbpedia-fr:corfou rdfs:label?label. FILTER (langmatches(lang(?label),"ja"))

Επιλογή γλώσσας: σημείωση Πιθανόν να δείτε παραδείγματα με FILTER(lang(?label)="en"), τα οποία όμως πρέπει να αποφύγετε! Η langmatches() ξέρει να ταιριάζει καλύτερα τις πιθανές παραλλαγές της γλώσσας, όπως π.χ. τα "en-us","el-gr" κλπ

Η σειρά σας! Αρχικά, επισκεφτείτε το http://fr.dbpedia.org/resource/catégorie:île_de_grèce και παρατηρήστε πώς περιγράφονται τα νησιά της Ελλάδας Στη συνέχεια χρησιμοποιήστε το endpoint http://fr.dbpedia.org/sparql Ρωτήστε για όλες τις οντότητες (νησιά) που ανήκουν (prop-fr:catégorie) στην κατηγορία αυτή PREFIX propfr: <http://fr.dbpedia.org/property/> Προσθέστε στα αποτελέσματα τον πληθυσμό κάθε νησιού (ιδιότητα prop-fr:population) Ταξινομήστε τα αποτελέσματα κατά φθίνουσα σειρά πληθυσμού

Εύρεση μεγίστου (SPARQL 1.1) Τροποποιήστε το προηγούμενο ερώτημά σας ως εξής: SELECT (max(?pop) AS?maxpop) WHERE{ # το προηγούμενο WHERE σας, # έστω?pop η μεταβλητή πληθυσμού Το ίδιο μπορείτε να κάνετε, στη SPARQL 1.1 πάντα, με τα MIN(), SUM(), AVG(), COUNT() Στη SPARQL 1.0 μπορούσατε μόνο να βρείτε μέγιστα και ελάχιστα με συνδυασμό των ORDER BY και LIMIT 1

Και ποιο νησί έχει τον μέγιστο πληθυσμό; Εδώ χρειάζεται ένα υποερώτημα (subquery)! SELECT?maxisl?maxpop WHERE{ {# υποερώτημα SELECT (max(?pop) AS?maxpop) WHERE{ # το αρχικό WHERE σας, # έστω?pop η μεταβλητή πληθυσμού {# υπόλοιπο κύριου ερωτήματος # το αρχικό WHERE σας, # με?maxisl μεταβλητή νησιού # και?maxpop μεταβλητή πληθυσμού Η υποερώτηση θα εκτελεστεί πρώτα και στη συνέχεια το δεύτερο μέρος της κύριας ερώτησης

Λύσεις Προηγουμένων... Για το αρχικό ερώτημα: PREFIX prop-fr: <http://fr.dbpedia.org/property/> SELECT?isl?pop WHERE{?isl prop-fr:catégorie <http://fr.dbpedia.org/resource/catégorie:île_de_grèce>.?isl prop-fr:population?pop order by desc(?pop) Ο μέγιστος πληθυσμός: PREFIX prop-fr: <http://fr.dbpedia.org/property/> SELECT (max(?pop) AS?maxpop) WHERE{?isl prop-fr:catégorie <http://fr.dbpedia.org/resource/catégorie:île_de_grèce>.?isl prop-fr:population?pop Ο μέγιστος πληθυσμός και ποιο νησί: PREFIX prop-fr: <http://fr.dbpedia.org/property/> SELECT?maxisl?maxpop WHERE{ { SELECT (max(?pop) AS?maxpop) WHERE{?isl prop-fr:catégorie <http://fr.dbpedia.org/resource/catégorie:île_de_grèce>.?isl prop-fr:population?pop. {?maxisl prop-fr:catégorie <http://fr.dbpedia.org/resource/catégorie:île_de_grèce>.?maxisl prop-fr:population?maxpop.

Bonus Υλικό: GROUP BY και HAVING Όπως ακριβώς στην SQL (aggregation) PREFIX prop-fr: <http://fr.dbpedia.org/property/> SELECT?arc (sum(?pop) AS?sumpop) WHERE{?isl prop-fr:catégorie <http://fr.dbpedia.org/resource/catégorie:île_de_grèce>.?isl prop-fr:population?pop.?isl <http://dbpedia.org/ontology/archipelago>?arc. GROUP BY?arc HAVING (sum(?pop)>0) ORDER BY desc(?sumpop) Σειρά σύνταξης: GROUP BY HAVING ORDER BY LIMIT/OFFSET