轻量级富文本XML格式?

轻量级富文本XML格式?,xml,standards,Xml,Standards,我正在编写一个基本的字处理应用程序,并试图解决一个本机的“内部”格式,我的代码解析该格式以便呈现到屏幕上。我希望这是XML,以便将来我可以编写XSLT将其转换为ODF或XHTML或其他格式 在搜索要使用的现有标准时,唯一看起来有希望的是ODF。但对于我所需要的东西来说,这似乎是大刀阔斧。我所需要的就是段落标签、字体选择、字体大小和装饰……差不多就是这些。即使实现一个最小的ODF渲染器也需要很长时间,我不确定这是否值得 现在我正在考虑制作自己的XML格式,但这并不是很好的做法。最好使用一个标准,特

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

在搜索要使用的现有标准时,唯一看起来有希望的是ODF。但对于我所需要的东西来说,这似乎是大刀阔斧。我所需要的就是段落标签、字体选择、字体大小和装饰……差不多就是这些。即使实现一个最小的ODF渲染器也需要很长时间,我不确定这是否值得

现在我正在考虑制作自己的XML格式,但这并不是很好的做法。最好使用一个标准,特别是因为这样我就可以找到将来可能需要的XSLT了

还是我应该咬紧牙关实现ODF

编辑:关于答案

我以前就知道XSL-FO,但由于规范的重量,我并没有真正了解它。但你是对的,一个子集将为我提供所有需要的工作和成长空间。非常感谢你的提醒

另外,通过包含像FOP或RenderX这样的渲染库,我可以免费生成PDF。不错…

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


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

好吧,对。。。但是,既然我需要能够转换为XML,为什么要将文档树和DOM树都保存在内存中,而没有任何东西阻止我直接从DOM树上工作呢

特别是因为我的程序的一个独特特性是,所有内容都是在键入时保存的,我不希望每次键入一个键时都运行到XML的整个转换。直接将输入和输出绑定到内存中的DOM树更容易

编辑:
哦,XHTML的唯一问题是我确实希望支持基本分页。虽然我想没有什么能阻止我使用一些额外的标签…

如果它只是用于文字处理,那么可能会比ODF轻一点

但是,wiki条目声明:

DocBook是一种用于技术文档的语义标记语言。它最初用于编写与计算机硬件和软件相关的技术文档,但也可用于任何其他类型的文档

所以它可能不太适合通用字处理器


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

我喜欢DocBook,但它不太合适。它力求独立于表示,目的是使用XSLT将其呈现为表示格式

在字处理器中,用户正在编辑演示文稿和内容。例如,用户不想标记“关键字”,他们必须将一些文本加粗


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

由于您确信需要表示事物的表示方面,因此可能值得参考W3C建议。这是一种成熟的页面描述语言,也是众所周知的XSLT的另一半(非常不流行)

很明显,整件事都不是“lightwight”,但是如果你只是合并了一个 非常有限的子集-甚至可以是(与您的“段落标记、字体选择、字体大小和装饰”规范相匹配)和,例如:

<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,您还可以了解到另一件事——即使只做段落和字体,也会变得异常复杂。对我来说,试图用“正确的方式”为各种不同的语言和用例进行文本布局和换行似乎非常令人望而生畏