---
# System prepended metadata

title: 'Partie 1: DTD et XML Schema'

---

Enes DAGDELEN

# Partie 1: DTD et XML Schema

**Question 1**
```dtd
<!ELEMENT musées        (musée*, objet-art*)>
<!ELEMENT musée         (nom,ville,visites)>
<!ATTLIST musée         idmusée #REQUIRED>
<!ELEMENT visites       (visiteur*)>
<!ELEMENT objet-art     (intitulé,auteur,description)>
<!ATTLIST objet-art     musée #REQUIRED type #REQUIRED>
<!ELEMENT nom           (#PCDATA)>
<!ELEMENT visiteur      (#PCDATA)>
<!ATTLIST visiteur      date #REQUIRED payé #REQUIRED
<!ELEMENT intitulé      (#PCDATA)>
<!ELEMENT auteur        (#PCDATA)>
<!ELEMENT description   (#PCDATA)>
```

**Question 2**

```xml
<xs:element name="musée" maxOccurs="unbounded" minOccurs="0">
  <xs:complexType>
    <xs:sequence>
      <xs:element type="xs:string" name="nom"/>
      <xs:element type="xs:string" name="ville"/>
      <xs:element name="visites">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="visiteur">
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:string">
                    <xs:attribute type="xs:date" name="date" use="required"/>
                    <xs:attribute type="xs:float" name="payé" use="required"/>
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
    <xs:attribute type="xs:string" name="idmusée" use="required"/>
  </xs:complexType>
</xs:element>
```

La clée de musée doit être placée dans la sequence de l'élément `musées`.

# Partie 2: XPath

**Question 1**

```xpath
/musées/objet-art[intitulé="La Joconde"]/auteur/text()
```

**Question 2**

```xpath
/musées/musée[count(visites/visiteur[@date="2019-12-03"]) > 1000]/nom/text()
```

**Question 3**

```xpath
/musées/musée[ville="Nice"]/sum(visites/visiteur[@date="2019-12-04"]/@payé)
```

**Question 4**

```xpath
/musées
    /objet-art[@musée=/musées/musée[nom="Louvre"]/@idmusée and @type="sculpture"]
    /intitulé/text()
```

# Partie 4: XQuery

**Question 1**

```xquery
for $v in /musées/objet-art[@type="peinture" and auteur="Léonard de Vinci"]
let $c := /musées/musée[@idmusée = $v/@musée]

return <peinture titre="{data($v/intitulé)}">
            <musée>{data($c/nom)}</musée>
            <ville>{data($c/ville)}</ville>
        </visiteur>
```

**Question 2**

```xquery
for $v in distinct-values(/musées/musée/visites/visiteur)


return <visiteur nom="{data($v)}">
	{ for $e in /musées/musée[visites/visiteur = $v]
    	let $count := count($e/visites)
    		return <musée nb-visites="{data( count($e/visites) )}">
            	{data($e/nom)}
            </musée>}
</visiteur>
```