OOo有无数的导入(和导出)filters。我觉得即使“native”OOo文档也是由一个导入filter来处理。换句话说,实际上不存在"native"格式。只是一个通用的机制,和一个默认的当保存时使用的导出filter。(但我没有足够深入看,不能断然肯定这个,我也可能是错的)
On loadComponentFromURL() 你可以指定一个导入filter。如果你没有指定,那么Type Detection将查看incomming文档并试图辨识使用哪个导入filter。因此当你打开一个SXW,这个Type Detection就检测出它是"native"格式,然后触发正确的导入filter。
Type Detection的机制是通过配置管理器 明确地配置了。因此当一个开发者添加一个新的导入filter,它们也可以增加一个 type detection服务,并把它配置到 type detection 配置数据中。
当没有给loadComponentFromURL()一个指定的导入filter去使用,它就触发不同的Type Detection服务从而每个服务可以检查incomming流。当一个特定的type detection服务说“hey,我认识数据的类型”,那么type detection服务就触发一个特定的导入filter服务(并传给它参数,根据在配置管理器里看到的)。因此相同的导入filter实际上可以导入多个相关的类型,但由Type Detection决定带的参数。(批注:此段意见不同意)
loadComponentFromURL更多。。。
URL可来自于不同地方。一个"file:///"rul,一个"http:///"url,Ftp,WebDav,等等。
甚至一个"private:stream"url也可以使用,如果你提供一个属性指定input流。因此你甚至可以从一个任意的输入流加载文档,例如一个database blob。
那么"private:factory/sdraw"url呢?我觉得即使这个url造成一个被加载的文档不被创建(申明我没有深入看)当你使用"private:factory/sdraw",你呢只是在加载一个来自某个地方的模板文档,而且type detection认识它,并触发正确的导入filter。
事实上你可以用你自己选择的新文档默认模板来配置OOo。我觉得all this does就是改变 被加载的默认文档的位置当你 使用且"private:factory/sdraw"。
这就解释了为什么没有一个独立API routine去创建新文档。我觉得OOo没有创建新文档的能力!它只是有从一个url加载它们的能力,例如"private:factory/sdraw",而这仅仅是 一个模板文档的url的 一个捷径。
你钻入OOo越深你知道的越多。你坚持不懈的 揭开它是如何实现的面纱。
如果有人有具体的事实能够证实或者反驳上面几个“我觉得”的陈述,我很高兴听到它们。