Xmllint
ma użyteczną opcję, która pozwala
sprawdzić poprawność pliku .xml
względem zewnętrznego pliku DTD,
tj. plik nie musi zawierać deklaracji DOCTYPE
. Wygląda
jednak, że implementacja tegoż zawiera poważne błędy.
O tyle
sprawa jest dziwna, że w google na ten temat nic nie ma a błąd jest
tak oczywisty, że
powinno być. Przykładowe DTD (A.dtd
):
<!ELEMENT a (#PCDATA) > <!ATTLIST a b CDATA "Wartosc domyslna" > <!ENTITY e "Tresc encji" >
Przykładowy plik (A.xml
):
<?xml version="1.0" encoding='ISO-8859-2'?> <!-- <!DOCTYPE a SYSTEM "A.dtd"> --> <a>Przykład encji: &e;</a>
teraz uruchomienie
xmllint
z opcją dtdvalid
:
$ xmllint --dtdvalid A.dtd A.xml A.xml:3: parser error : Entity 'e' not defined
kończy się błędem...
Przytargałem dziś 2,6 kg. A pięć razy tyle zostało na drzewie... Do tej pory rok grzybowo słabiutki ale przecież się jeszcze nie skończył...