【问题标题】:How can I verify a SVG doc is correct? (version 1.2)如何验证 SVG 文档是否正确? (1.2版)
【发布时间】:2012-09-17 17:44:53
【问题描述】:

我使用了一个名为Fritzing 的程序来绘制一些基本的 Arduino 原理图,然后将输出导出为 SVG。这按预期工作,但后来我注意到 SVG 输出仅在某些浏览器中看起来不错,而在某些版本的 Firefox 中也不错。

由于 Fritzing 是一个开源应用程序,我认为我可以查看代码(也许可以提供一点帮助)。

但是现在回到问题上来,正确的 SVG 应该是什么样子?我可以使用 W3C 的哪个验证器来检查文件?

我尝试使用此页面上的验证器:http://validator.w3.org/dev/tests/

但他们都抱怨很多,尤其是 SVG 版本。验证者似乎喜欢 1.0 和 1.1 版本,但是当我查看此文件的顶部时,似乎正在使用 version 1.2?

这是有问题的文件的前三行(为了可读性而重新格式化):

<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<!-- Created with Fritzing (http://www.fritzing.org/) -->
<svg width="3.50927in"
     x="0in"
     version="1.2"
     y="0in"
     xmlns="http://www.w3.org/2000/svg"
     height="2.81713in"
     viewBox="0 0 252.667 202.833"
     baseProfile="tiny"
     xmlns:svg="http://www.w3.org/2000/svg">

我可以使用特定的 SVG 1.2 验证程序吗?

或者我应该尝试验证 SVG,就好像它是一个经典的 XML 文件一样?

(附带说明,Fritzing 似乎使用 Qt,所以如果有一些 QTest 我可以使用它可能会有用。)

【问题讨论】:

  • 我问了一个similar question here 应该很感兴趣。
  • 所以我必须研究一下名为 RelaxNG 的东西?
  • 嗯,不完全是-从该答案中链接的答案中,它说 Tiny 1.2 有一个 RelaxNG 模式,1.1 有一个 DTD。对于完整的 1.2,受访者表示没有官方架构。也许您可以采用上述任一模式并将其修改为涵盖 1.2 - 不过,这不是一项简单的任务,我会认为!
  • 但是文件告诉我 version="1.2" 和 baseProfile="tiny",所以应该是 svg 1.2 tini?并且 tini 使用了 RelaxNG 模式。所以现在我很困惑......
  • 啊,我在你的问题中错过了那个细节(你在标题中说你使用的是 1.2 版,这对我来说意味着完整版)。我想baseProfile 属性表明您正在使用 Tiny 1.2。这是个好消息,因为另一个问题的受访者表示可以使用 RelaxNG 模式进行验证。

标签: qt svg


【解决方案1】:

您可以使用例如http://validator.nu。由于您的文件是独立的,请选择 xml 解析,将 RNG url 粘贴到架构文本字段中(您正在查找的架构 url 可以在相关的 specification 中找到,在本例中为 SVG 1.2 Tiny:http://www.w3.org/TR/SVGTiny12/relaxng/Tiny-1.2.rng)。

即使您的三行 sn-p 也不是有效的 SVG 1.2 Tiny 内容(Tiny 中的 元素上不允许有 x 和 y 属性)。你应该在某个地方添加一个指向你的文件的链接,否则很难说它应该是什么样子。

【讨论】:

  • 该文件在 Chromium、Firefox nightly 和 Opera 中渲染得很好(在 ubuntu 12.04 上测试)。我不会太担心 SVG Tiny 1.2 验证,因为所有主流浏览器大多都使用 SVG 1.1,所以请改为针对 SVG 1.1 进行验证,你应该没问题。有一些重复的 id 属性,一些具有无效属性的 g 元素。如果将 CSS 样式规则用于公共属性,文件大小会更小,标记也会更清晰。
【解决方案2】:

终端 svgcheck 中有一个 python 实用程序,它声称目标版本为 1.2,如 draft-7996-bis 中所定义。一个很有前途的实用程序,恕我直言。

SVG 检查程序。

pip install svgcheck
svgcheck ~/path/to/mysvgfile.svg

具有适当标准的 svg 文件将给出如下内容:

$ svgcheck alert-circle.svg
Parsing file alert-circle.svg
INFO: File conforms to SVG requirements.
  • 确保您已安装 pip 并正确配置了 python

【讨论】:

  • 我在移动设备上渲染一些 svg 时遇到了问题,这些 svg 在网络浏览器(chrome)上运行“正常”。我所要做的就是检查 remote-svgs 之后的规范,瞧,我发现他们没有遵循一些规范。 svgcheck 拯救了这一天。 ?
  • 谢谢。尽管specs&lt;style&gt; 标签中写了什么,但对我来说还是造成了所有问题。 svgcheck 是唯一注意到这一点的工具。
  • 我只是尝试在Inkscape 输出 svg 上运行它,svgcheck 说 svg 完全错误。大量错误。试图用 svgcheck 来“修复”它会导致一个文字 B&W 文件删除了大多数元素。让我们标记 inkscape 人和 svgcheck 人,而不是告诉他们谁是谁
  • Inkscape 默认会生成 Inkscape SVG 文件,它们有很多自己的属性。在“另存为”对话框中,有一个下拉菜单可以生成纯 svg 文件。
【解决方案3】:

对于SVG Tiny 1.2 Portable/Secure (SVG P/S) 的子集,例如在Brand Indicators for Message Identification (BIMI) 中使用,请参阅Using the RNC Schema to Validate BIMI SVG Images。它展示了如何在命令行上执行Relax NG Compact (RNC) XML 模式验证。

pip3 install jingtrang
wget 'https://bimigroup.org/resources/SVG_PS-latest.rnc.txt'
pyjing -c SVG_PS-latest.rnc.txt my-image.svg

对于我的用例,使用 png2svg 将 PNG 标识转换为 SVG Tiny 1.2,这是输出。

my-image.svg:1:159: error: value of attribute "baseProfile" is invalid; must be equal to "tiny-ps"
my-image.svg:1:174: error: element "g" not allowed yet; missing required element "title"

通过编辑baseProfile 值并添加&lt;title&gt;A very nice image title&lt;/title&gt;,可以轻松修复错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 2013-06-11
    • 2016-10-21
    相关资源
    最近更新 更多