Хороший способ разобраться с тем, что DTD занесен в черный список w3.org - PullRequest
0 голосов
/ 31 марта 2011

Мы использовали php для создания интерфейса, с помощью которого клиент мог бы загрузить графику svg, а затем нажать кнопку, чтобы выполнить преобразование XSLT.

Интерфейс и базовый XSLT ранее работали безупречно, до недавнего времени,процесс xslt всегда будет завершаться с ошибкой и возвращать ошибку, например: не смог найти www.w3.org или sth (не могу вспомнить точно).

Наш клиент использует Adobe Illustrator для создания SVG-графики, а затем использует наш инструмент длявыполните преобразование, и SVG-графика, которая напрямую выходит из Adobe Illustrator, имеет следующие три строки в верхней части каждого SVG-файла:

<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00       
  Build0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG   
 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

Мы провели некоторое исследование и пришли к выводу, что w3.orgзаносит в черный список сервер нашего клиента (Windows Server 2003).Нормальный обходной путь - сделать решатель.Так как клиент даст нам только 1 час или около того, чтобы сделать дистанционное управление своими вещами, поэтому я думаю, есть ли более простой способ решить эту проблему.

Один из предложенных способов - разместить файл.dtd на клиентском сервере, поэтому каждый входящий SVG-файл может ссылаться на него, и мы используем php для манипулирования SVG-файлом, сканируем файл, пока не найдет строку "<!DOCTYPE..", затем заменим всю строку другой "<!DOCTYPE..", в которойURL-адрес теперь указывает на локальный файл flatfile.dtd, сохраните файл и запустите процесс XSLT.Затем после перевода мы выполняем обратный процесс, который заключается в сбросе URL-адреса dtd с нашего локального dtd на стандартный w3.org.

Я попытаюсь сделать это завтра, и наша демонстрация будет в пятницу.Так что я просто ищу совета здесь, если этот способ реалистичен и есть ли риск?Или, могут ли какие-либо эксперты предложить более эффективные альтернативы для решения этой проблемы?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 31 марта 2011

Непонятно, но я думаю, что вы говорите, что вам нужно только временное исправление для демонстрации?Если так, то почему бы не добавить запись в файл хоста сервера, который отображает www.w3.org на 127.0.0.1 (localhost) или на ip сервера, которым вы управляете?Затем вы можете заполнить путь этого сервера соответствующим файлом dtd.После демонстрации не забудьте удалить запись хоста, чтобы все вернулось, как было.

Приятно то, что вам не нужно манипулировать строкой DOCTYPE в вашем коде, так как существующаяurl будет преобразован в сервер, которым вы управляете.

Это решение предполагает, что вам не нужно разыменовывать любые другие ресурсы на www.w3.org, кроме этого dtd.Вы должны иметь возможность проверить это на любом сервере, на котором запущена ваша демоверсия.

1 голос
/ 31 марта 2011

Можете ли вы предварительно обработать SVG, чтобы полностью удалить объявление DOCTYPE? (Можете ли вы рассматривать SVG как правильно сформированный, а не как действительный или вам также нужно проверить SVG?)

У меня были проблемы при создании PDF из XSL-FO с использованием SVG. Если SVG имеет объявление DOCTYPE, процессор разрешит объявление. Я не получил никаких ошибок, так как он был в состоянии разрешить DOCTYPE, но это было SLOW . Удаление DOCTYPE во время выполнения значительно улучшило скорость.

...