schema_xml_avec_conditions_a_respecter.py

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.

During your visit to our site, NumWorks needs to install "cookies" or use other technologies to collect data about you in order to:

With the exception of Cookies essential to the operation of the site, NumWorks leaves you the choice: you can accept Cookies for audience measurement by clicking on the "Accept and continue" button, or refuse these Cookies by clicking on the "Continue without accepting" button or by continuing your browsing. You can update your choice at any time by clicking on the link "Manage my cookies" at the bottom of the page. For more information, please consult our cookies policy.