Sprawdziłem dziś http://pinkaccordions.homelinux.org/wblog
za pomocą xmllinta
i ponieważ się okazało, że są błędy postanowiłem skończyć z partyzantką. Od dziś kilka stron będę weryfikował automatem, np. w taki sposób:
SGML_CATALOG_FILES=~/etc/xml/catalog xmllint --catalogs --noout --valid http://pinkaccordions.homelinux.org/
Jeżeli korzystamy z domyślnego /etc/xml/catalog
, to podanie SGML_CATALOG_FILES
jest zbędne. W tymże pliku ~/etc/xml/catalog
dodałem wpisy:
<uri name="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
uri="file:///home/tomek/etc/xml/dtd/xhtml/1.1/xhtml11.dtd" />
<uri name="http://www.w3.org/TR/ruby/xhtml-ruby-1.mod"
uri="file:///home/tomek/etc/xml/dtd/xhtml/1.1/xhtml-ruby-1.mod" />
<rewriteSystem systemIdStartString="http://www.w3.org/TR/xhtml-modularization/DTD/"
rewritePrefix="file:///home/tomek/etc/xml/dtd/xhtml/1.1/" />
<rewriteURI uriStartString="http://www.w3.org/TR/xhtml-modularization/DTD/"
rewritePrefix="file:///home/tomek/etc/xml/dtd/xhtml/1.1/" />
Uwaga: pierwsze dwa wiersze nie wystarczą, bo xhtml11.dtd
dołącza całą chmarę innych plików -- konkretnie 35 plików .mod
oraz 3 .ent
. Wszystkie te pliki skopiowałem do /home/tomek/etc/xml/dtd/xhtml/1.1/
Teraz wywołuję xmllint
za pomocą prostego skryptu:
#!/bin/bash
# Sprawdzanie poprawnosci wybranych stron na pinkaccordions.homelinux.org
LOGFILE=~/Logs/WWW/xhtml-errors.log
XMLCATALOG=~/etc/xml/catalog
LINT=/usr/bin/xmllint
TODAY=`date`
for url in 'http://pinkaccordions.homelinux.org/wblog' 'http://pinkaccordions.homelinux.org/' ...
do
SGML_CATALOG_FILES=$XMLCATALOG $LINT --catalogs --noout --valid $url
if [ "$?" -ne 0 ] ; then
echo "Error found in $url [$TODAY]" >> $LOGFILE
fi
done
Ewentualnie można też tak:
#!/usr/bin/perl
# Sprawdzanie poprawnosci za pomoca `W3C Markup Validation Service'
use LWP::Simple;
$LOGFILE='/home/tomek/Logs/WWW/xhtml-errors.log';
my $today = localtime;
open LOG, ">>$LOGFILE";
my @URLs = (
'http://validator.w3.org/check?uri=http%3A%2F%2Fpinkaccordions.homelinux.org%2Fwblog',
'http://validator.w3.org/check?uri=http%3A%2F%2Fpinkaccordions.homelinux.org',
... );
foreach $url (@URLs) { print STDERR "Sprawdzam: $url...\n";
$content = get("$url");
if ($content =~ /Information on validation.*Congratulations/m) { print STDERR "$url is OK\n" } else
{ print LOG "$today => errors found => $url\n" ; }
}
close (LOG);
W3C ma też API do serwisu walidacyjnego, ale skomplikowane to API jest...
Dobrze jest to wszystko wiedzieć. Rewelacyjny wpis.
OdpowiedzUsuń