Created by joelkouakou2080
Created on March 01, 2023
5.3 KB
On considère le document XML (university.xml) suivant : <university> <student matrNo="325422"> <name> <firstName>Mike</firstName> <lastName>Down</lastName> </name> <attendsLecture lectureName="Introduction to Databases"/> <attendsLecture lectureName="Introduction to Artificial Intelligence"/> </student> <researchAssistant employee No="134234"> <name> <FN>Dominik</FN> <LN>Luebbers</LN> </name> <organizingLecture lectureName="Introduction to Databases"/> <hiwis> <hiwi matrNo="325422"/> </hiwis> <email>luebbers@i5.informatik.rwth-aachen.de</email> <telephone>8021512</telephone> </researchAssistant> </university> On suppose que : - matrNr et employeeNo sont uniques. (utiliser les constructeur Unique de XML schéma) - matrNr et employeeNo sont des entiers de longueurs 6 ne dépassant pas 999999. - "Research assistants" peuvent organiser au maximum une "lecture" - "Research assistants" peuvent avoir une ou plusieurs "email" addresses. - "firstName" et "lastName" sont des chaines de caractères de longueur ne dépassant pas les trois caractères. Ecrire un schéma XML (university.xsd) décrivant la structure du document XML précédent et respectant les hypothèses définies. Réponses : ---------- <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="university"> <xs:complexType> <xs:sequence> <xs:choice maxOccurs="unbounded"> <xs:element name="student"> <xs:complexType> <xs:sequence> <xs:element name="name" type="nameType"/> <xs:element name="attendsLecture" maxOccurs="unbounded"> <xs:complexType> <xs:attribute name="lectureName" type="xs:string" use="required"/> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="matrNo" type="xs:integer" use="required"> <xs:unique name="uniqueMatrNo"> <xs:selector xpath=".//student"/> <xs:field xpath="@matrNo"/> </xs:unique> </xs:attribute> </xs:complexType> </xs:element> <xs:element name="researchAssistant"> <xs:complexType> <xs:sequence> <xs:element name="name" type="nameType"/> <xs:element name="organizingLecture" minOccurs="0"> <xs:complexType> <xs:attribute name="lectureName" type="xs:string" use="required"/> </xs:complexType> </xs:element> <xs:element name="hiwis" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element name="hiwi"> <xs:complexType> <xs:attribute name="matrNo" type="xs:integer" use="required"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="email" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="telephone" type="xs:string" minOccurs="0"/> </xs:sequence> <xs:attribute name="employeeNo" type="xs:integer" use="required"> <xs:unique name="uniqueEmployeeNo"> <xs:selector xpath=".//researchAssistant"/> <xs:field xpath="@employeeNo"/> </xs:unique> </xs:attribute> </xs:complexType> </xs:element> </xs:choice> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name="nameType"> <xs:sequence> <xs:element name="firstName" type="xs:string"/> <xs:element name="lastName" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:schema> Dans ce schéma, on utilise le type xs:integer pour les attributs matrNo et employeeNo qui sont uniques, et on définit une contrainte unique pour chaque attribut avec l'élément xs:unique. On utilise également un type personnalisé nameType pour les éléments name contenant les éléments firstName et lastName. Pour les autres éléments, on définit leur type comme xs:string, et on utilise les attributs minOccurs et maxOccurs pour préciser le nombre minimum et maximum d'occurrences. Dans le schéma XML que j'ai fourni, j'ai utilisé le type xs:integer pour les attributs matrNo et employeeNo, qui sont des entiers. Ensuite, pour définir la longueur maximale de ces entiers, j'aurais pu utiliser la restriction xs:maxLength, mais dans ce cas-ci, la longueur maximale est 6, donc cela est implicite. Cela signifie que les valeurs pour ces attributs ne peuvent pas dépasser 999999, car ce sont des entiers de six chiffres maximum.