XML - 引用其他XML文件

18 xml cross-reference

我是XML的新手,所以这可能是一个相当容易回答的问题.我想知道是否有一种从其他XML文件中引用外部XML文件的标准方法.让我举个例子.假设您有一个文件,它定义了一个包含大量数据的对象:

<person>
    <name>John</name>
    <age>18</age>
    <hair>Brown</hair>
    <eyes>Blue</eyes>
</person>
Run Code Online (Sandbox Code Playgroud)

为了这个问题,假装该人拥有大量其他信息.假装文件像10 MB.

现在,假设您有另一个定义组的XML文件:

<group>
    <person>
        <name>John</name>
        <age>18</age>
        <hair>Brown</hair>
        <eyes>Blue</eyes>
    </person>
    <person>
        <name>Kim</name>
        <age>21</age>
        <hair>Blue</hair>
        <eyes>Green</eyes>
    </person>
    <person>
        <name>Sean</name>
        <age>22</age>
        <hair>Black</hair>
        <eyes>Brown</eyes>
    </person>
</group>
Run Code Online (Sandbox Code Playgroud)

如您所见,如果Person非常大,那么Group文件将非常大.那么,如果我们有类似John.xml的东西,有没有一种标准的方法在Group.xml中引用它而不明确定义John的所有数据?我确信这是一个非常广泛的主题,所以请随时将我链接到任何相关的网页.谢谢!

lav*_*nio 12

标准

XInclude是唯一具有任何级别支持的标准.

  • 几个XML编辑器,包括Oxygenxmlspy支持它.
  • 包括Xerces在内的几个XML解析器也支持它,并且还有.net端口.
  • 一些XML工具,例如Saxon支持它,用于Java和.net.

关于XInclude维基百科文章中有一些很好的例子.

XLink是一个与切向相关的标准,不是真正用于包含文档,而是用于引用其他文档中的部分.它得不到很好的支持.

备择方案

如果您担心尺寸,可以采用以下几种方法:

  • 使用流式XML处理器,例如DataDirect XQuery(或者在较小程度上,Saxon 9.3 EE,它只在内存中保留尽可能多的信息来解决查询.
  • 使用XML数据库,例如MarkLogiceXist.
  • 使用一个XML文件列出其他XML文件的名称,然后使用XQuery或XSLT编写的某些程序使用doc()函数和进程读取.(除非你的处理器是流媒体或有办法处理文件,如DDXQSaxon那样,你仍然会遇到同样大小的问题.)


Chr*_*ott 5

有两种“标准”方式可以执行所需的操作,即XLink和XInclude(取决于您要执行的操作),尽管您必须确保拥有可以提取外部引用的处理器。大多数XML库都没有启用此功能。

然后,你可以做一些类似

<group>
  <personlink xlink:href="person.xml" xlink:show="embed" xmlns:xlink="http://www.w3.org/1999/xlink"/>
</group>
Run Code Online (Sandbox Code Playgroud)

但是,您可能实际上并不需要这个。如果您需要大文档中的一部分信息,则可以轻松地使用XSLT或XQuery修剪所需的部分。您可以将这种方法与SAX解析(基于事件,并且在内存中没有整个文档)一起使用,以扩展您的应用程序以处理相当大的文档。

即使在使用DOM时,我也没有开始看到大型文档的问题,直到它们在几十兆字节的范围内。


Mak*_*ach 0

嗯,xml 文件没有大小限制。您不必担心尺寸过大。但要记住; Xml是一种数据交换格式,而不是数据库格式。您可以使用 xml 在不同的应用程序/服务之间交换数据。