Настройка типа документа SVG 1.1 (общедоступный и системный идентификаторы) в Batik
Я пытаюсь получить определенную запись DOCTYPE в моем выводе SVG при использовании Apache Batik (1.14).
Простой пример выглядит так:
DOMImplementation domImpl = GenericDOMImplementation.getDOMImplementation();
String svgNS = "http://www.w3.org/2000/svg";
DocumentType docType = domImpl.createDocumentType("svg", "-//W3C//DTD SVG 1.1//EN", "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd");
Document document = domImpl.createDocument(svgNS, "svg", docType);
SVGGeneratorContext ctx = SVGGeneratorContext.createDefault(document);
SVGGraphics2D svgGenerator = new SVGGraphics2D(ctx, false);
Writer out = new OutputStreamWriter(System.out, "UTF-8");
svgGenerator.stream(out, true);
Что производит:
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN'
'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'>
Я надеялся на что-то большее, например:
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
(на основе спецификации SVG 1.1 на странице https://www.w3.org/TR/SVG11/struct.html#NewDocument ).
Как я могу получить желаемый DOCTYPE (в идеале, не искажая XML после этого)?
1 ответ
Вместо того, чтобы бороться с батиком из-за поколения, просто пропустите его. Как прокомментировал Роберт , это обычно игнорируется. Кроме того, используя
DOCTYPE
не рекомендуется с SVG:
На самом деле члены рабочей группы SVG даже советуют людям не использовать объявление DOCTYPE в документах SVG 1.0 и 1.1. Вместо этого всегда включайте
version
а такжеbaseProfile
атрибуты в корне<svg>
тег и назначьте им соответствующие значения, как в следующем примере.<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events">