Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有创建XML文件的标准或指南?_Xml_Formatting_Xml Serialization_Standards - Fatal编程技术网

是否有创建XML文件的标准或指南?

是否有创建XML文件的标准或指南?,xml,formatting,xml-serialization,standards,Xml,Formatting,Xml Serialization,Standards,我很好奇,是否有标准或指南来确定xml文件中的属性和元素应该是什么类型的东西 我还对使用XMLSerializer创建xmlarray和xmlarrayitem列表感到好奇。例如,如果我有以下内容: <SomeBaseTag> <Item1 Attr11=”one” Attr12=”two” /> <Item1 Attr11=”one” Attr12=”two” /> <Item1 Attr11=”one” Attr12=”two” /

我很好奇,是否有标准或指南来确定xml文件中的属性和元素应该是什么类型的东西

我还对使用XMLSerializer创建xmlarray和xmlarrayitem列表感到好奇。例如,如果我有以下内容:

<SomeBaseTag>
   <Item1 Attr11=”one” Attr12=”two” />
   <Item1 Attr11=”one” Attr12=”two” />
   <Item1 Attr11=”one” Attr12=”two” />
   <Item2 Attr21=”one” Attr22=”two” />
   <Item2 Attr21=”one” Attr22=”two” />
   <Item2 Attr21=”one” Attr22=”two” />
</SomeBaseTag>

我是否应将其更改为:

<SomeBaseTag>
  <Item1s>
     <Item1 Attr11=”one” Attr12=”two” />
     <Item1 Attr11=”one” Attr12=”two” />
     <Item1 Attr11=”one” Attr12=”two” />
  </Item1s>
  <Item2s>
     <Item2 Attr21=”one” Attr22=”two” />
     <Item2 Attr21=”one” Attr22=”two” />
     <Item2 Attr21=”one” Attr22=”two” />
  </Item2s>
</SomeBaseTag>

这是品味的问题。通常,这类数据最好用不太详细的格式表示,比如YAML或JSON

编辑:例如

SomeBaseTag:
    Item1s:
        - {Attr11: one, Attr12: two}
        - {Attr11: one, Attr12: two}
    Item2s:
        - {Attr21: one, Attr22: two}
        - {Attr21: one, Attr22: two}

这是一种风格——属性使XML看起来比重元素的对应项更干净、更不冗长。此外,它还取决于您用于解析此类XML的工具——当它是元素vs属性时,我在过去使用的一些工具更容易编码。但这方面并不是什么大问题。最好保持xml较小,因为xml本身已经很详细了,这完全取决于您试图用xml文档表示的内容的语义

例如,如果您的
SomeBaseTag
表示市场摊位,
项目1
表示苹果,
项目2
表示橙子,则第一种格式非常合适

但是,如果这两个项目是不同的,最好单独分组,那么第二种格式更有意义。如果
SomeBaseTag
表示基本粒子,**
Item1
**s是费米子,**
Item2
**s是玻色子,则会出现这种情况


在您的示例中,两个不同的项共享相同的属性名称,这使得它们之间的关系更为密切更符合逻辑。

我同意每个人对“口味问题”的看法,但我想补充一点。毕竟,XML是一种标记语言,因此您可能会想,如果去掉所有标记及其属性,它将剩下什么。

正如前面所说,风格和品味是主要因素。还有其他的


属性受其可包含内容的限制。例如,它们不能包含元素。此外,某些字符如“听起来您想创建一些定义,通过这些定义可以衡量XML。如果是这样,我建议您学习XML模式。它是定义XML结构的绝佳工具,甚至可以用来创建完全不同的语言。在这种情况下,它与DOCTYPE类似,只是从模式生成的XML能够自我感知自己的结构定义。如果XML包含的数据是从包含它的元素的层次结构中定义的,那么这一点很重要


就属性而言,一般规则是使用元素来包含数据,而不是属性。用模式定义的元素可以指定数据类型约束以及前面描述的结构质量。使用属性的好处是简洁。属性可以很容易地取代需要嵌套元素2到4才能准确描述的内容。

我不同意这是一个“品味问题”。XML元素和属性的语义不同:

  • 元素的顺序重要,属性的顺序不重要。
  • 允许重复元素,但不允许重复属性。
  • 空格在属性中很重要,通常不在元素中。
  • 元素可以包含其他元素,属性不能包含属性或元素。
  • 忽略未识别的属性,通常传递未识别的元素。
例如,像这样编号的元素通常是不正确的,因为元素已经排序。我会将您的模式更改为:

<SomeBaseTag>
    <SomeItemTag>
        <SomeAttributeTag>one</SomeAttributeTag>
        <AnotherAttributeTag>two</AnotherAttributeTag>
    </SomeItemTag>
    <SomeItemTag>
        <SomeAttributeTag>one</SomeAttributeTag>
        <AnotherAttributeTag>two</AnotherAttributeTag>
    </SomeItemTag>
</SomeBaseTag>

一
二
一
二

标记名是有意义的词,如“person”、“address”或“primeFactor”,而不是无意义的词,如“Item”或“attribute”。

我觉得XML模式的设计有一定的品味。但是你提供的两种选择有明显的不同

例1:

<SomeBaseTag>   
    <Item1/>
    <Item1/>
    <Item2/>

例2:

<SomeBaseTag>   
    <Set1>
      <Item1/>
      <Item1/>
    </Set1>
    <Set2>
        <Item2/>
    </Set2>

第一个对我来说就像是一个大容器,其中混合了Item1和Item2实体,以随机或潜在的混合顺序。第二个是包含两个子容器的容器,每个子容器包含一组特定类型的实体

这种差异对你的目的可能并不重要。但在某些情况下,它很重要,尤其是当模式变得更加复杂时。请参见约翰桑德斯(johnsaunders)在WSDL上的示例以获取说明

WSDL是这样的:

<wsdl>
    <types/>

    <message/>
    <message/>
    <message/>

    <portTypes/>
    <bindings/>
    <service/>
</wsdl>

假设第一级容器“根据口味”被省略。那你就有了

<wsdl>
    <schema/>        
    <schema/>        
    <schema/>        
    <message/>
    <message/>
    <message/>

    <operation/>
    <operation/>
    <operation/>
    <binding/>
    <binding/>
    <binding/>
    <service/>
</wsdl>


在这一点上,由于缺少portType,将服务与一组操作关联起来并不容易

虽然XML中的“ML”代表“标记语言”,虽然它最初的意思是这样的,但XML现在很少用于标记文本。对了,John,但正如我所说的,我会将此添加到考虑正反平衡的情况中。嗯?如果将XML文档中的所有标记都去掉,就会留下垃圾。XML不是一种文本标记,不管名称对您意味着什么。XML是关于信息集的。设计一个XML模式,甚至部分基于对没有尖括号和标记的文本外观的一些想法。。。似乎……嗯。。。。非常错误。这取决于数据的性质,奇索。XML应用程序扩展到了InfoSet。您的分歧的基础似乎是无效的。这个问题并不预先假定属性和元素的语义
<wsdl>
    <schema/>        
    <schema/>        
    <schema/>        
    <message/>
    <message/>
    <message/>

    <operation/>
    <operation/>
    <operation/>
    <binding/>
    <binding/>
    <binding/>
    <service/>
</wsdl>