轻量级的富文本XML格式?

时间:2020-03-05 18:44:07  来源:igfitidea点击:

我正在编写一个基本的文字处理应用程序,并尝试采用一种本机的"内部"格式,我的代码将其解析为呈现到屏幕上。我希望它是XML,以便将来可以编写XSLT转换为ODF或者XHTML或者其他格式。

在寻找要使用的现有标准时,唯一有希望的标准就是ODF。但是,对于我所需要的来说,这看起来像是过大的杀伤力。我所需要的只是段落标签,字体选择,字体大小和装饰...仅此而已。即使是最小的ODF渲染器,我也要花费很长时间,而且我不确定是否值得这样做。

现在,我正在考虑制作自己的XML格式,但这并不是很好的做法。最好使用标准,尤其是从那时起,我也许可以找到以后可能已经需要的XSLT。

还是我应该硬着头皮实施ODF?

编辑:关于答案

我以前知道XSL-FO,但是由于规格过重,所以并没有真正考虑它。但是我们是对的,一个子集将为我提供与我合作所需要的一切,并为其提供成长的空间。非常感谢提醒。

另外,通过包含FOP或者RenderX之类的渲染库,我可以免费生成PDF。不错...

解决方案

回答

XML是一种外部格式,而不是内部格式。

XHTML怎么了?它很简单而且无处不在(至少HTML是这样)。实现将很容易调试,并且用户将永远是伟大的。

回答

好吧,对了...但是既然我仍然需要能够转换为XML,那么当没有什么阻止我直接从DOM树上工作时,为什么要将我的文档树和DOM树都保留在内存中?

特别是由于我程序的一个独特功能是键入时始终保存所有内容,并且我不想每次敲击键都进行XML的完整转换。只需将输入和输出直接绑定到内存中的DOM树即可。

编辑:
哦,XHTML的唯一问题是我确实希望支持基本分页。虽然我想没有什么可以阻止我为此使用一些其他标签的...

回答

如果仅用于文字处理,那么Doc​​Book可能会比ODF轻一些?

但是,Wiki条目指出:

DocBook is a semantic markup language for technical documentation. It was originally intended for writing technical documents related to computer hardware and software but it can be used for any other sort of documentation.

因此,它可能不适用于通用字处理器吗?

使用DocBook的优点是,可以使用许多DocBook->其他格式转换器?希望这可以帮助。

回答

我喜欢DocBook,但它确实不合适。它努力做到与表示无关,旨在使我们可以使用XSLT将其呈现为表示格式。

在文字处理器中,用户正在与内容一起编辑演示文稿。例如,用户不想标记"关键字",他们必然希望将某些文本设为粗体。

DocBook编辑器将是一件非常不错的事情(我不确定是否存在一个不错的编辑器),但这并不是我真正在做的事情。

回答

当我们确定需要代表事物的表示性方面时,可能值得阅读XSL-FO W3C建议书。这是一种完善的页面描述语言,是(几乎不流行的)另一半知名的XSLT。

显然,整个事情都不是"轻量级",但如果我们将
非常有限的子集,甚至可以是(与"段落标签,字体选择,字体大小和装饰"规范匹配)fo:block和常见字体属性,例如:

<yourcontainer xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:block font-family="Arial, sans-serif" font-weight="bold"
        font-size="16pt">Example Heading</fo:block>
    <fo:block font-family="Times, serif"
        font-size="12pt">Paragraph text here etc etc...</fo:block>
</yourcontainer>

与仅滚动自己的相比,这可能会有一些优势。有一个开放的规范可以工作,并且所有这些都暗示着。它将CSS属性作为XML属性重用(类似于SVG),因此许多格式设置细节看起来有些熟悉。如果我们后来决定,智能分页是一项必不可少的功能,那么它将具有升级路径,因为随着它们与应用程序相关,它包括规范的更多部分。

通过研究XSL-FO,我们可能会发现另一件事,那就是,即使只是修改段落和字体,也可能会变得极其复杂。尝试为各种不同的语言和用例进行文本布局和换行"正确的方式"对我来说似乎很艰巨。