5

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

在搜索要使用的现有标准时,唯一看起来很有希望的是 ODF。但这对于我需要的东西来说似乎是巨大的矫枉过正。我需要的只是段落标签、字体选择、字体大小和装饰……差不多就是这样。即使是最小的 ODF 渲染器也需要很长时间才能实现,而且我不确定这是否值得。

现在我正在考虑制作自己的 XML 格式,但这并不是一个很好的做法。最好使用标准,特别是从那时起,我可能会找到我将来可能需要的 XSLT 已经编写好了。

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

编辑:关于答案

我以前知道 XSL-FO,但由于规范的重要性并没有真正考虑它。但你是对的,一个子集会给我工作所需的一切和​​成长的空间。非常感谢提醒。

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

4

5 回答 5

5

由于您确定需要表示事物的表现方面,因此可能值得查看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 中您可能会得到另一件事 - 看到即使只是做段落和字体也可能非常复杂。尝试为各种不同的语言和用例进行文本布局和换行“正确的方式”对我来说似乎非常艰巨。

于 2008-08-30T00:36:55.490 回答
1

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

但是,wiki 条目指出:

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

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

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

于 2008-08-27T20:53:51.657 回答
1

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

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

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

于 2008-08-27T20:57:30.790 回答
0

好吧,对...但是既然我无论如何都需要能够转换为 XML,那么当没有什么阻止我直接从 DOM 树开始工作时,为什么还要将我的文档树和 DOM 树都保存在内存中呢?

特别是因为我的程序的一个独特功能是在您键入时始终保存所有内容,并且我不想每次按下键时都运行到 XML 的整个转换。更容易将输入和输出直接绑定到我的内存中 DOM 树。

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

于 2008-08-27T20:48:52.247 回答
-1

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

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

于 2008-08-27T20:44:57.230 回答