2011-06-13 54 views
2

我为Android创建了一个SVG图像解析器类,它很好地工作,并且为了我想要的目的非常完整。我目前正在撰写的应用程序使用我预先在Inkscape中设计的建筑平面图。现在,我想要做的是能够在计划中标记特定的X,Y点,这些点不会被渲染,但只会通知软件应用程序计划中特定点的位置。这样应用程序就可以在运行时以编程方式在这些点上放置各种标记。在SVG图像中插入元数据“标记” - 这可能吗?

它的实际编码不是问题;我目前已经使用文本字符串工作,尽管我可以使用各种对象。我所做的是放置一个文本字符串,并将文本字符串的ID属性设置为特殊前缀,如“_meta”。然后,我的SVG解析器识别该前缀,并将字符串的X,Y坐标与放置在“_meta”前缀之后的ID属性中的任何其他元数据一起记录。该字符串不会呈现为屏幕;它纯粹用于告诉软件某个特定的点。

这个工作,我可以继续这样做,但我想知道的是是否有更正确或更优雅的方式来做到这一点。我研究过SVG规范,我对标准元数据标签的理解是它们只能传达关于图像的信息。据我所知,没有任何物体专门用来标记任何X,Y点。使用对象的ID字段传递由程序解析的信息,但它看起来有点错误和滥用ID属性。

我应该考虑其他方法吗?

感谢,

崔佛

+0

如果您编写解析器,是否有任何理由不能添加新的名称空间并寻找它? – Jess 2011-06-13 15:04:38

+0

谢谢安德鲁。我可以,但最好能够使用Inkscape的GUI在计划上标记点,而不是手动编辑XML文件(使用Inkscape的XML编辑器或其他方式)。其结果是,我或其他用户可以为应用程序创建新计划,而不必将特殊标记坐标输入到文件中。也许对此唯一现实的长期答案是我编写一个单独的平面图创建者应用程序,它提供了特殊的标记功能 - 并按照您的建议将它们插入到自定义名称空间下。 – Trevor 2011-06-13 15:14:13

回答

2

有没有标记,此刻在SVG感兴趣的特定点元素。但是,SVG工作组在讨论想要连接表示图中节点的元素时,添加了一个点元素。

你会使用这两种方法的罚款:

  • 自定义命名空间的元素和/或为您的数据
  • 'role'属性及其相关属性的属性,看here
  • 里面的值'id',因为你已经完成了,注意并不是所有的字符都可以在'id'属性中使用
  • data- *属性(假设这些会在HTML5中被允许,即使它尚未根据SVG规范有效)

在任何情况下,要小心的事情是使用自定义非名称空间属性和元素,因为这可能会与将来添加到SVG规范中相冲突。