5

我没有那么多地使用 XML 文件。但是我现在正在编写一个以 XML 格式保存其数据的应用程序。

到目前为止,我已经提出了以下基本结构。

<?xml version="1.0" encoding="utf-8"?>
<categories>
  <category id="cf6cb6bc-8142-4366-9b43-0ae6fce90df2">
    <subcategories>
      <subcategory id="02b95e55-a4f7-4979-b0aa-a97f2c3327b0">
        <articles>
          <article ... />
          <article ... />
        </articles>
      </subcategory>
      <subcategory id="5e9f9ef7-5190-4bcd-ab98-935d9208a4c7">
        <articles>
          <article ... />
          <article ... />
        </articles>
      </subcategory>
      <subcategory id="7077d614-d3de-42d3-851a-b8c9ce0f56df">
        <articles>
          <article ... />
          <article ... />
        </articles>
      </subcategory>
    </subcategories>
  </category>
</categories>

但是看了之后,这里好像有一些不必要的元素,同样的数据可以简写为:

<?xml version="1.0" encoding="utf-8"?>
<categories>
  <category id="cf6cb6bc-8142-4366-9b43-0ae6fce90df2">
    <subcategory id="02b95e55-a4f7-4979-b0aa-a97f2c3327b0">
      <article ... />
      <article ... />
    </subcategory>
    <subcategory id="5e9f9ef7-5190-4bcd-ab98-935d9208a4c7">
      <article ... />
      <article ... />
    </subcategory>
    <subcategory id="7077d614-d3de-42d3-851a-b8c9ce0f56df">
      <article ... />
      <article ... />
    </subcategory>
  </category>
</categories>

整个文件似乎需要一个根节点。但是,并非所有子类别和文章都需要专用的根节点。所以我的缩短版只是将所有子类别直接转储到类别标签下,所有文章直接转储在子类别标签下。

更多使用 XML 文件的人可以告诉我是否有任何理由不使用上面的缩短版本。

4

2 回答 2

2

如果每个父节点只有一个并且它们没有自己的属性或特殊数据,我认为没有理由拥有额外的层次结构。我会subcategory直接在categoryarticle直接下subcategory。我个人喜欢保持干净和简单:)

编辑:我同意@JimGarrison,如果您在该级别有其他数据,从您的示例中您似乎没有,那么将它们分组在一个节点下会有优势。

于 2013-07-01T23:06:25.823 回答
0

Sometimes accurate data modelling demands the extra level. For example if you want attributes on "articles" to indicate the range of dates to which the articles apply, then it might be inappropriate to make these attributes of the subcategory element, especially if a subcategory might contain either articles or books with different attributes in each case.

The wrapper elements for containers or collections can also make programming easier if the container has siblings of a different type: for example if a book has a title, a publisher, and several authors, then wrapping the authors in a container element can make things clearer.

But in general I'm for avoiding clutter in the data model; get rid of excess layers that serve no useful practical purpose.

于 2013-07-02T08:16:04.690 回答