xmllint --noout --schema un_schema.xsd un_fichier.xml
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="list">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="a" type="xsd:integer"/>
<xsd:element name="b" type="xsd:integer" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Écrivez également une DTD 1.1.dtd équivalente à ce schéma (ou, du moins, aussi équivalente que possible).
rm 1.tar.gz; wget --no-cache https://www.irif.fr/~stolze/xml/td2/1.tar.gz tar xf 1.tar.gz ./1.1.test.shRENDUS: 1.1.xml et 1.1.dtd.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="list">
<xsd:complexType>
<xsd:sequence maxOccurs="unbounded">
<xsd:element name="a" type="xsd:integer"/>
<xsd:element name="b" type="xsd:integer"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Écrivez une DTD "équivalente" à ce schéma
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="a" type="xsd:integer"/>
<xsd:element name="b" type="xsd:integer" substitutionGroup="a"/>
<xsd:element name="list">
<xsd:complexType>
<xsd:sequence maxOccurs="unbounded">
<xsd:element ref="a"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Écrivez une DTD 1.3.dtd "équivalente" au troisième schéma.
<!ELEMENT sac (objet*, portefeuille, cahier)>
<!ELEMENT objet (#PCDATA)>
<!ELEMENT portefeuille EMPTY>
<!ELEMENT cahier (#PCDATA)>
Vérifiez par vous mêmes (attention, nos tests sont stricts!). Par exemple vous pourriez créer vos propre tests 2.1.valid.xml et 2.1.invalid.xml, et les bidouiller pour vérifier que la DTD et votre schéma se comportent pareil.
<!ATTLIST sac type (main|dos|valise) #REQUIRED>
<!ATTLIST portefeuille type (cuir|plastique) #REQUIRED>
La section 5.7 du cours peut être utile.
rm 2.2.tar.gz; wget --no-cache https://www.irif.fr/~stolze/xml/td2/2.2.tar.gz tar -zxf 2.2.tar.gz ./2.2.test.shRENDU: 2.2.xsd.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:simpleType name="Color">
<xsd:restriction base="xsd:token">
<!-- Couleur, en hexadecimal RGB -->
<xsd:pattern value="[0-9A-Fa-f]{6}"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="Coordinate">
<xsd:sequence>
<xsd:element name="x" type="xsd:double"/>
<xsd:element name="y" type="xsd:double"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="polygon">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="color" minOccurs="0" maxOccurs="1" type="Color"/>
<xsd:element name="point" type="Coordinate" minOccurs="3" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
RENDU: 3.1.xml.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:simpleType name="Color">
<xsd:restriction base="xsd:token">
<!-- Couleur, en hexadecimal RGB -->
<xsd:pattern value="[0-9A-Fa-f]{6}"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="AlphaColor">
<xsd:simpleContent>
<xsd:extension base="Color">
<xsd:attribute name="transparency" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:float">
<xsd:minInclusive value="0.0"/>
<xsd:maxInclusive value="1.0"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:complexType name="Coordinate">
<xsd:sequence>
<xsd:element name="x" type="xsd:double"/>
<xsd:element name="y" type="xsd:double"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Polygon">
<xsd:sequence>
<xsd:element name="color" minOccurs="0" maxOccurs="1" type="AlphaColor"/>
<xsd:element name="point" type="Coordinate" minOccurs="3" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="NamedPolygon">
<xsd:complexContent>
<xsd:extension base="Polygon">
<xsd:sequence>
<xsd:element name="name" type="xsd:NMTOKEN"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="drawing">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="point" type="Coordinate" minOccurs="1" maxOccurs="unbounded"/>
<xsd:element name="polygon" type="NamedPolygon" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
RENDU: 3.2.xml.