piątek, 19 listopada 2010

Sprawdzanie poprawności dokumentów na pinkaccordions.homelinux.org

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...

1 komentarz: