summaryrefslogtreecommitdiff
path: root/Year_2/Databases
diff options
context:
space:
mode:
authorSanto Cariotti <santo@dcariotti.me>2021-02-09 21:35:03 +0100
committerSanto Cariotti <santo@dcariotti.me>2021-02-09 21:35:03 +0100
commit5ec97dc1ea4a8eec206a908cbb2b8552301a7f35 (patch)
tree4c5c38ca29b713d1c6553a45e9afa1c6a0191655 /Year_2/Databases
parentc670e0583e5468646ab42903c95a80662d96cc89 (diff)
databases: xml exercise
Diffstat (limited to 'Year_2/Databases')
-rw-r--r--Year_2/Databases/libri.dtd10
-rw-r--r--Year_2/Databases/libri.xml63
-rw-r--r--Year_2/Databases/libri_ex1.xquery2
-rw-r--r--Year_2/Databases/libri_ex2.xquery9
4 files changed, 84 insertions, 0 deletions
diff --git a/Year_2/Databases/libri.dtd b/Year_2/Databases/libri.dtd
new file mode 100644
index 0000000..fb0a018
--- /dev/null
+++ b/Year_2/Databases/libri.dtd
@@ -0,0 +1,10 @@
+<!ELEMENT libri (libro)>
+<!ELEMENT libro (autore+, titolo, isbn, introduzione, capitoli)>
+<!ELEMENT autore (#PCDATA)>
+<!ELEMENT titolo (#PCDATA)>
+<!ELEMENT isbn (#PCDATA)>
+<!ELEMENT introduzione (#PCDATA)>
+<!ELEMENT capitoli (capitolo+)>
+<!ELEMENT capitolo (numero, titolo, testo)>
+<!ELEMENT numero (#PCDATA)>
+<!ELEMENT testo (#PCDATA)>
diff --git a/Year_2/Databases/libri.xml b/Year_2/Databases/libri.xml
new file mode 100644
index 0000000..0535ba4
--- /dev/null
+++ b/Year_2/Databases/libri.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0"?>
+<!DOCTYPE libri SYSTEM "libri.dtd">
+<libri>
+ <libro>
+ <autore>Pirandello</autore>
+ <titolo>Novelle per un anno</titolo>
+ <isbn>1234656</isbn>
+ <introduzione>aaaa</introduzione>
+ <capitoli>
+ <capitolo>
+ <numero>1</numero>
+ <titolo>Capitolo 1</titolo>
+ <testo>...</testo>
+ </capitolo>
+ <capitolo>
+ <numero>2</numero>
+ <titolo>Capitolo 2</titolo>
+ <testo>...</testo>
+ </capitolo>
+ </capitoli>
+ </libro>
+ <libro>
+ <autore>Pirandello</autore>
+ <titolo>Il fu mattia pascal</titolo>
+ <isbn>1234656</isbn>
+ <introduzione>aaaa</introduzione>
+ <capitoli>
+ <capitolo>
+ <numero>1</numero>
+ <titolo>Capitolo 1</titolo>
+ <testo>...</testo>
+ </capitolo>
+ <capitolo>
+ <numero>2</numero>
+ <titolo>Capitolo 2</titolo>
+ <testo>...</testo>
+ </capitolo>
+ </capitoli>
+ </libro>
+ <libro>
+ <autore>Aligheri</autore>
+ <titolo>Divina commedia</titolo>
+ <isbn>1234656</isbn>
+ <introduzione>Nel mezzo del cammin...</introduzione>
+ <capitoli>
+ <capitolo>
+ <numero>1</numero>
+ <titolo>Capitolo 1</titolo>
+ <testo>...</testo>
+ </capitolo>
+ <capitolo>
+ <numero>2</numero>
+ <titolo>Capitolo 2</titolo>
+ <testo>...</testo>
+ </capitolo>
+ <capitolo>
+ <numero>3</numero>
+ <titolo>Capitolo 3</titolo>
+ <testo>...</testo>
+ </capitolo>
+ </capitoli>
+ </libro>
+</libri>
diff --git a/Year_2/Databases/libri_ex1.xquery b/Year_2/Databases/libri_ex1.xquery
new file mode 100644
index 0000000..694c65a
--- /dev/null
+++ b/Year_2/Databases/libri_ex1.xquery
@@ -0,0 +1,2 @@
+for $libri in doc("libri.xml")//libro
+return count($libri//capitolo)
diff --git a/Year_2/Databases/libri_ex2.xquery b/Year_2/Databases/libri_ex2.xquery
new file mode 100644
index 0000000..e20b41f
--- /dev/null
+++ b/Year_2/Databases/libri_ex2.xquery
@@ -0,0 +1,9 @@
+let $f := doc("libri.xml")
+let $authors := $f//autore
+
+for $author in distinct-values($authors)
+let $books := $f//libro[autore=$author]
+return <author>
+ <name>{ $author }</name>
+ <num>{ count($books) }</num>
+ </author>