【问题标题】:Why use XML as a storage format? [duplicate]为什么使用 XML 作为存储格式? [复制]
【发布时间】:2010-07-21 05:54:28
【问题描述】:

可能重复:
When is it OK to use an XML file to save information?

所有使用 XML 作为配置文件的存储格式的东西是怎么回事?我问是因为 [name retraced] 框架有一个 XML 配置文件来存储数据库凭据,并且基于该框架构建的特定应用程序有一些菜单作为 XML 片段存储在数据库中......这不像我们会分享数据库凭据或菜单结构与其他人,甚至是多个服务将使用的数据。这都是这个应用程序的内部/特定的。一位同事说 XML 对于人类来说是一种易于阅读的格式……但我认为这不是真的。 INI 文件中的密码 foobar123 比 foobar123 更易于人类阅读。然后他谈到了解析,但是 INI 文件已经存在了很长时间,所以我确信有一两个库可以解析它们。我可以看到将其用作数据导出方法背后的逻辑,因为无论应用程序生成什么,其他服务都可以直接使用它,但对于内部的东西,我就是不明白。有人请赐教。

【问题讨论】:

  • 当你只有一把锤子时,一切看起来都像钉子。现在,将“hammer”替换为“parser for $FORMAT”,将“nail”替换为“a file in $FORMAT”...

标签: php xml frameworks


【解决方案1】:

我不会解决你的一般问题(我自己不是 XML 的忠实粉丝),但我会评论你对 INI 和 XML 文件的比较。

XML 擅长描述任意结构化的数据(树等)。 INI 文件最能描述分类的字典类型数据(键、值对)。对于您给出的菜单系统的具体示例,XML 是一个更好的选择,因为它可以直接反映菜单树。

【讨论】:

    【解决方案2】:

    其他人提出了很好的观点,所以我只想补充一点,“人类可读”是主观的。但是当你考虑到每个优秀的编辑器都有完整的 XML 工具(突出显示、代码折叠等)并且大多数开发人员都习惯于使用 XML 多亏了 HTML,我认为 XML 是非常易于阅读的。

    【讨论】:

      【解决方案3】:

      原因应该是:

      • 互操作性(几乎任何东西都可以与 XML 通信,但在封闭的系统中它没有实际意义,直到有一天另一个应用程序必须能够读取它)
      • 验证(XSD 等)
      • 分层

      实际原因:

      • 经理喜欢这个流行词并声称“它适用于 XML”
      • 有这么多快乐的人声称“它适用于 XML”,以至于实际的开发人员开始认为这是一件好事

      再说一遍,JSON、YAML、csv 或标准 .ini 等格式都有其适用性。

      【讨论】:

        【解决方案4】:

        一般来说,XML 格式很容易手动检查,以防您需要调试或更新项目。

        此外,XML 文档的结构非常适合嵌套菜单,可以很容易地解析成 TreeView 类型的结构或简单的表结构,因此您可以快速制作“便携式数据库”来解析/操作/保存为您的应用程序。

        那里有很多 XML 解析库,还有很多可以轻松读取 XML 的应用程序,所以如果您想向第三方、API 等开放您的应用程序,这是一个不错的方法它。

        最后,通过将 XML 与 XSLT 结合使用,您可以快速将数据转换为各种格式,这是使用相同数据并将其呈现在网页、RSS 阅读器、移动设备等上的理想方式。

        XML 肯定有一些缺点,体积臃肿,复杂性问题超出了简单的结构,并且密码是明文,但对于许多快速和简单的应用程序/配置,XML 工作得很好。

        【讨论】:

          【解决方案5】:

          我发现这是因为不同的技术(如不同的格式)补充了他们的编码“风格”。例如,java 倾向于使用 XML,因为它能够使用名称空间和版本控制来分解数据。 javascript 倾向于使用 JSON 来存储数据,因为它简单/快速/易于理解。

          PHP 没有一种用于存储数据的标准编码。

          关于速度要求,最好将它们存储为有效的 PHP,使用var_export 编写它们并使用require 读取它们。有许多框架在这些方面做一些事情来使配置读取速度更快。只要文件非常小,操作码缓存就会非常快速地保持对这些文件的任何读取。如果速度不是您的第一要务,那么您没有理由不能(也不应该)使用 XML、YAML、JSON。

          config.php

          <?
          return array( "db_name" => ..., "db_user" => ... );
          ?>
          

          read-config.php

          <?
          $db_configure = require( "config.php" );
          //do stuff with $db_configure
          ?>
          

          【讨论】:

            【解决方案6】:

            清晰是原因之一。看看这个 .ini 文件的 Eclipse。

            -showsplash
            org.eclipse.platform
            --launcher.XXMaxPermSize
            256m
            -vmargs
            -Xms40m
            -Xmx256m
            

            在那里,我们有一些不同的约定。如果将其设置为以下内容会更明显:

            <showsplash>org.eclipse.platform</showsplash>
            <launcher-param>
                <param-name>XXMaxPermSize</param-name>
                <param-value>256m</param-value>
            </launcher-param>
            <vmargs>
                <arg>-Xms40m</arg>
                <arg>-Xmx256m</arg>
            </vmargs>
            

            它更加冗长,并且还使用了一些不同的约定,但它们比 ini 版本更清晰。起初,我并不确定 org.eclipse.platform 是否与 showsplash 有关。

            我倾向于同意,尽管 XML 使用有点过度。

            【讨论】:

            • 我不认为它有损您的观点,但该 Eclipse 文件不是经典 Windows 意义上的 .ini 文件。不过,我在这两点上完全同意你的看法。
            • 是的,主要是提出来的,因为我只需要更改一个设置。我对它的混乱感到有点惊讶。它确实说明了当您打开一个 .ini 文件时,您并不确切知道您会得到什么。
            【解决方案7】:

            我使用 XML 是因为我不想编写文件解析器 du-jour。当内容是 XML 时,我已经有一个众所周知的文件解析器。

            而且我不想要二进制格式,因为我希望能够在需要修复某些内容时在记事本中查看和编辑文件。

            【讨论】:

              【解决方案8】:

              您在每一点上都是绝对正确的。
              XML 不适合人类阅读,尤其是写作。
              它比其他任何东西都更流行。
              只有数据交换才有意义。

              唯一的 XML 优势来自于它的流行 - 许多解析/验证工具。比如说,在 PHP 中无法解析来自数据库的 ini.style 数据(参数 = 值):只有读取文件的函数。虽然您总能找到一些用于 XML 的工具。所以,原因是:XML 是一种标准。它就像 PHP:尽管有很多设计缺陷,但有很多人在使用它,但因为它有很多优势和强大的社区。

              【讨论】:

                猜你喜欢
                • 2019-05-07
                • 2012-03-04
                • 1970-01-01
                • 2011-12-31
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多