xmllint
distingue
xmllint leFichier
--valid
) xmllint
--valid
leFichier
--dtdvalid
) xmllint
leFichier --dtdvalid
laDTD
leFichier
et laDTD
peuvent être des URLs
"distantes".xmllint
reproduit en sortie le fichier XML qu'il a lu.--noout
xmllint
--noout
leFichier
--dtdvalid
laDTD
ID
et IDREF
,
voir plus loin ... xmlns:le-préfixe
:<!ATTLIST le-préfixe:la-racine xmlns:le-préfixe CDATA
#FIXED "http://chezMoi/monNamespace">
[ fichier Nom_note2.xml]
<?xml version="1.0" ?>
<liste>
<eleve>
<nom> Toto</nom> <note> 12 </note>
</eleve>
<eleve>
<nom> Tata</nom> <note> 13 </note>
</eleve>
<eleve>
<nom> Tutu</nom> <note> 17 </note>
</eleve>
<eleve>
<nom> Titi</nom> <note> 11 </note>
</eleve>
</liste>
[ fichier Nom_note2.dtd]
<?xml version="1.0" encoding='ISO-8859-1'?>
<!-- Tableau Noms-Notes par enfants -->
<!ELEMENT liste (eleve*)>
<!ELEMENT eleve (nom, note)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT note (#PCDATA)>
[ fichier Nom_note1.xml]
<?xml version="1.0" ?>
<liste>
<eleve nom="Toto" note="12"/>
<eleve nom="Tata" note="13"/>
<eleve nom="Tutu" note="17"/>
<eleve nom="Tutu" note="11"/>
</liste>
[fichier Nom_note1.dtd]
:
<?xml version="1.0" encoding='ISO-8859-1'?>
<!-- Tableau Noms-Notes par attributs -->
<!ELEMENT liste (eleve*)>
<!ELEMENT eleve EMPTY>
<!ATTLIST eleve nom CDATA #REQUIRED>
<!ATTLIST eleve note CDATA #REQUIRED>
xmllint
,
cette information n'exclut nullement de contrôler le document avec une
autre DTD,Document
.Document
par la méthode getDocType()
.Document
, voir plus loin.Nom_note2.int.xml
<?xml version="1.0" ?>
<!DOCTYPE liste [
<!ELEMENT liste (eleve*)>
<!ELEMENT eleve (nom, note)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT note (#PCDATA)>
]>
<liste>
<eleve>
<nom>Pierre</nom> <note> 12
</note>
</eleve>
<eleve>
<nom>Paul</nom> <note> 13
</note>
</eleve>
<eleve>
<nomt>Jacques</nomt> <note>
17 </note>
</eleve>
</liste>
jfp% xmllint --noout --valid
Nom_note2.int.xml
Nom_note2.int.xml:16: element nomt: validity error : No declaration for
element nomt
<nomt>Jacques</nomt>
<note> 17 </note>
^
Nom_note2.int.xml:17: element eleve: validity error : Element eleve
content does not follow the DTD, expecting (nom , note), got (nomt note
)
</eleve>
^
jfp%
Déclaration
externe SYSTEM
<?xml version="1.0" ?>
<!DOCTYPE liste SYSTEM "../NomNoteDTD/Nom_note2.dtd">
<liste>
<eleve>
<nom>Pierre</nom> <nota> 12
</nota>
</eleve>
<eleve>
<nom>Paul</nom> <note> 13
</note>
</eleve>
<eleve>
<nom>Jacques</nomt> <note> 17
</note>
</eleve>
</liste>
jfp% xmllint --noout --valid
Nom_note2.loc.xml
Nom_note2.loc.xml:5: element nota: validity error : No declaration for
element nota
<nom>Pierre</nom>
<nota> 12 </nota>
^
Nom_note2.loc.xml:6: element eleve: validity error : Element
eleve content does not follow the DTD, expecting (nom , note), got (nom
nota )
</eleve>
^
Nom_note2.loc.xml:11: parser error : expected '>'
<nom>Jacques</nomt>
<note> 17 </note>
^
jfp%
PUBLIC
Document
.Document
, à partir d'un objet de type DOMImplementation
createDocument
.DocumentType
,
par createDocumentType
qualifiedName
: le nom
(avec préfixe de namespace) de la balise-racinepublicId
:
l'identificateur public (FPI) qu'on vient de voir -
et qui peut être null
systemId
: l'URI du
fichier de la DTDTransformer
parsetOutputProperty(OutputKeys.DOCTYPE_PUBLIC,
publicId);
setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,
systemId);
mapage.html
",
on écrira :
DOMImplementation
domi
DocumentType dtd = domi.createDocumentType(
"html",
"-//W3C//DTD XHTML 1.0 Strict//EN",
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
);
Document doc = domi.createDocument(
"http://www.w3.org/1999/xhtml",
"html",
dtd
);
mapage.html
",
en codage UTF-8 par défaut :DOMSource ds = new DOMSource(doc);
StreamResult res = new StreamResult(new File("mapage.html"));
Transformer trans = TransformerFactory.newInstance().newTransformer();
trans.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, "-//W3C//DTD XHTML
1.0 Strict//EN");
trans.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd");
trans.transform(ds, res);
ID
et IDREF
ID
et IDREF
: ID
est le type de la
référence attribuée à un élément "normal" IDREF
est celui de la
référence mentionnée (pour citer l'élément
référencé), IDREF
doit être déclarée comme ID
.Famille.xml
)
<?xml version="1.0" ?>
<!DOCTYPE liste SYSTEM "Famille.dtd">
<liste>
<Personne nom="Marie" sexe="F" ref="P1">
<!-- les parents de Marie ne sont pas connus de nous -->
<enfants>
<RefPersonne maref="P2"/>
<RefPersonne maref="P3" />
</enfants>
</Personne>
<Personne nom="Jean" sexe="M" ref="P2">
<mere>
<RefPersonne maref="P1"/>
</mere>
<enfants/>
</Personne>
<Personne nom="Pierrette" sexe="F" ref="P3">
<mere>
<RefPersonne maref="P1"/>
</mere>
<enfants>
<RefPersonne maref="P4"/>
</enfants>
</Personne>
<Personne nom="Julie" sexe="F" ref="P4">
<mere>
<RefPersonne maref="P3"/>
</mere>
<enfants/>
</Personne>
</liste>
Famille.dtd
)<?xml version="1.0" encoding='ISO-8859-1'?>
<!-- Famille avec re'fe'rences -->
<!ELEMENT liste (Personne*)>
<!ELEMENT Personne (pere?, mere?, enfants)>
<!ELEMENT pere (RefPersonne)>
<!ELEMENT mere (RefPersonne)>
<!ELEMENT enfants (RefPersonne*)>
<!ELEMENT RefPersonne EMPTY> <!-- pour attribut IDREF -->
<!ATTLIST Personne nom CDATA #REQUIRED>
<!ATTLIST Personne sexe CDATA #REQUIRED>
<!ATTLIST Personne ref ID #REQUIRED>
<!ATTLIST RefPersonne maref IDREF #REQUIRED>
pere?
et mere?
pour éviter la régression
généalogique à l'infini.getElementById()
getElementById()
du modèle DOM.id
" dont la valeur est unique à l'échelle du document,ID
au sens des DTDs. Cet attribut devrait donc être déclaré de manière adéquate dans une DTD...xml:id
" au lieu de "id
", qui dispense de la déclaration.&
"
et ";
" :<!ENTITY qed "Quod
erat
demonstrandum">
<texte> et voila pourquoi votre fille
est
muette ! &qed;</texte>
<texte> et voila pourquoi votre fille
est
muette !
Quod erat demonstrandum
</texte>
é
, à
,
etc sont des entités prédéfinies en HTML.& |
& |
' |
' |
" |
" |
< |
< |
> |
> |
&le-numéro-décimal;
par exemple Æ
---> Æ
(majuscule danoise) &xle-numéro-hexa;
par exemple ℅
---> ℅
(le signe care-of = aux bons soins de) <!ENTITY care-of "
℅
">
&care-of;
au lieu de ℅
.%
" dans leur
définition, qui répparaît comme préfixe dans leur utilisation. On
pourrait par exemple réécrire notre DTD familiale ainsi <!ENTITY % parents "pere?,
mere?">
....
<!ELEMENT Personne (%parents;,
enfants)>
TEIFrantext.dtd
).