Настройка типа документа 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">
Другие вопросы по тегам