Как проверить XHTML с помощью Xerces в командной строке, когда w3.org перестал обслуживать некоторые файлы? - PullRequest
0 голосов
/ 22 октября 2018

Я скопировал файл примера XHTML из рекомендации W3C :

$ cat > sample.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html version="-//W3C//DTD XHTML 1.1//EN"
  xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.w3.org/1999/xhtml
              http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd"
>
  <head>
<title>Virtual Library</title>
  </head>
  <body>
<p>Moved to <a href="http://example.org/">example.org</a>.</p>
  </body>
</html>

Инструмент командной строки sax.Counter не работает для образца:

$ java -classpath /usr/share/java/xercesImpl-2.11.0.jar:/usr/share/java/xercesSamples.jar sax.Counter -v -n -np -s -f sample.xml 
error: Parse error occurred - http://www.w3.org/TR/xhtml11/DTD/xhtml-datatypes-1.mod
java.io.FileNotFoundException: http://www.w3.org/TR/xhtml11/DTD/xhtml-datatypes-1.mod

потому что отсутствует один из включенных файлов:

$ wget http://www.w3.org/TR/xhtml11/DTD/xhtml-datatypes-1.mod
--2018-10-22 23:08:30--  http://www.w3.org/TR/xhtml11/DTD/xhtml-datatypes-1.mod
404 Not Found
2018-10-22 23:08:45 ERROR 404: Not Found.

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Удалите следующие две строки в образце

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

, и Xerces будет работать.Использование Java 11 и libxerces 2.11.0:

$ export CLASSPATH=/usr/share/java/xercesImpl.jar:/usr/share/java/xercesSamples.jar
$ java sax.Counter -v -n -np -s -f sample.xml
sample.xml: 25176 ms (6 elems, 10 attrs, 0 spaces, 59 chars)

Я не совсем понимаю, почему основной файл dtd доступен, а файлы компонента mod - нет.Но, по крайней мере, w3 сохранил компоненты файла xsd в сети - пока, возможно, однажды они не откажутся от него для более нового метода проверки XML.

0 голосов
/ 22 октября 2018

Я выхожу на Xerces и вместо этого использую xmllint.

xmllint работает для указанного файла sample.xml.Во-первых, вам необходимо вручную загрузить все схемы файлы и сохранить их в том же месте, где вы храните sample.xml.

Затем используйтеОсновной xsd-файл для проверки:

$ xmllint --schema xhtml11.xsd sample.xml --noout
sample.xml validates

xmllint потребовалось 32 секунды для проверки sample.xml

Протестировано с xmllint, поставляемым с libxml 2.9.4 на Ubuntu, а также на xmllint по умолчаниюна OS X Capitan.

...