Http 流式XML Mime类型?

Http 流式XML Mime类型?,http,mime-types,Http,Mime Types,我正在构建一个能够发出流式XML的web服务。因此,输出(在高级别上)将如下所示: <fragment1> <!-- ... --> </fragment1> <fragment2> <!-- ... --> </fragment2> ……等等。对于普通XML文档,可以使用以下任何一种不同的MIME类型: 应用程序/xml application/vnd.mycompany.com.descript

我正在构建一个能够发出流式XML的web服务。因此,输出(在高级别上)将如下所示:

<fragment1>
    <!-- ... -->
</fragment1>

<fragment2>
    <!-- ... -->
</fragment2>

……等等。对于普通XML文档,可以使用以下任何一种不同的MIME类型:

  • 应用程序/xml
  • application/vnd.mycompany.com.description+xml(per)
  • 文本/xml
但是,这些MIME类型都假定响应只包含一个XML文档/片段。在我的例子中,响应包含零个或多个片段。出于这个原因,使用其中一种MIME类型似乎是错误的。正确的处理程序将(正确地)将响应作为单个XML文档处理,(A)在到达第二个片段时呕吐,或者(b)默默地忽略从片段2开始的片段

如果这是错误的,那么以下MIME类型之一是正确的吗:

  • application/octet流
  • application/vnd.mycompany.com.description.streaming+xml
  • application/vnd.mycompany.com.description+流式xml
  • 还是我应该使用完全不同的?此外,一旦数据格式上线,如果相同的MIME类型“样式”可以应用于流式JSON,那将是非常棒的


    编辑:为了给这个问题增添一点味道,并提供一个我试图模拟的工作实现的示例,这个API是仿效的。

    听起来除了您的流媒体需求之外,您的内容实际上是一个包含多个
    应用程序/xml
    部分的应用程序。通过这种布局,
    application/json
    部分也可以混合在消息中


    如果您的单个XML片段是较大文档的一部分,请查看(有点陈旧和保守)。它定义了一种很好的语法,可以将片段正文与原始文档的上下文信息包装在一起。

    听起来,除了流式处理要求之外,您的内容实际上是一个包含多个
    应用程序/xml
    部分的文档。通过这种布局,
    application/json
    部分也可以混合在消息中


    如果您的单个XML片段是较大文档的一部分,请查看(有点陈旧和保守)。它定义了一种很好的语法,可以将片段正文与原始文档的上下文信息包装在一起。

    根据数据中的语义关系及其结构,有多个选项

    第一个选项:如果您有一个(连续的)文件,可以通过将其包装在
    ..
    标记中轻松转换为有效的XML文档,那么它应该是
    应用程序/XML外部解析实体
    。这可以是从简单文本到注释、处理指令或复杂元素列表的任何内容。但是,不能插入XML声明(必须通过MIME定义字符集)或任何DTD(因此,如果依赖DTD,则含义必须由随附文档提供,并且也不能包含任何其他外部解析实体,除非使用XInclude)

    我发现这适用于任何可以描述为任意XML内容/片段的内容。它主要是通过DTD中的外部解析实体来使用的,但它本身也可以很好地工作。如果片段可能没有单个根节点,请使用此选项。然而,我可以想到一个警告:如果流是无限的,客户端最终将不得不在某个地方终止它,并且因为没有指定外部边界,所以它可以终止于元素的中间,使其根据其模式无效。 您也可以使用
    application/xml
    并自己编写开始标记,但是如果将某些解析器配置为整体处理文档,则它们可能会等待文档结束。使用
    application/xml外部解析实体
    ,最好将其解析为单个xml节点流

    第二个选项:存在
    多部分类型的范围。通过这种方式,您可以包装单个XML文档(
    application/XML
    或specific)或片段(
    application/XML外部解析实体
    )。同样,内部类型的选择取决于单个消息是否可以被视为独立的XML文档(例如,“svg视频”的
    application/svg+XML

    子类型的选择取决于整个序列的预期含义。分组的单个独立文件流可以使用
    多部分/混合
    (这是最通用的类型)。如果XML数据以某种方式互连,则可以使用
    multipart/related
    并为各个片段分配标识符。最后,如果只有消息的最后一部分表示资源的最新内容(用于保存单个请求),则使用
    multipart/x-mixed-replace


    举例说明:

    • 如果响应是一个富含XHTML标记的文本流(例如,从标记流转换而来),那么它应该是单个
      应用程序/xml外部解析实体

    • 如果片段是附件,即不断从网站下载或由用户上传的文件,则应该是
      多部分/混合的

    • 如果片段是大型或不断增长的资源图(不仅仅是XML)中的节点,则应使用
      multipart/related

    • 如果结果是短期信息,如某个过程的当前状态或某个对象的连续测量,则应为
      multipart/x-mixed-replace


    根据数据中的语义关系及其结构,有多种选择

    第一个选项:如果您有一个(连续的)文件,可以通过将其包装在
    ..
    标记中轻松转换为有效的XML文档,那么它应该是
    应用程序/XML外部文件