将元信息添加到XML文档的最佳方法

时间:2013-08-06 12:24:10

标签: xml

我有表格数据,例如Person。列标题为emailfnamelnamessn。我带来了以下XML结构:

<object type="Person">
  <record>
    <property name="email" val="mrnt..."/>
    <property name="fname" val="Martin"/>
    <property name="lname" val="Dimitrov"/>
    <property name="ssn" val="123"/>
  </record>
  <record>
    <property name="email" val="dani..."/>
    <property name="fname" val="Dany"/>
    <property name="lname" val="Jones"/>
    <property name="ssn" val="987"/>
  </record>
</object>

到目前为止一直很好,但我必须遵循一些规则:

  1. 该表可以没有行,我仍然需要提供其结构;
  2. 列可能完全为空,但我仍然必须在表的元描述中包含其名称
  3. emailssn是唯一的列,我必须以某种方式表明。
  4. 那么包含表格元描述的最佳方法是什么?这个可以吗?对我来说似乎有点奇怪。

    <object type="Person">
      <model>
        <property name="email" unique="yes"/>
        <property name="fname"/>
        <property name="lname"/>
        <property name="ssn" unique="yes"/>
      </model>
      <record>
        <property name="email" val="mrnt..."/>
        <property name="fname" val="Martin"/>
        <property name="lname" val="Dimitrov"/>
        <property name="ssn" val="123"/>
      </record>
      <record>
        <property name="email" val="dani..."/>
        <property name="fname" val="Dany"/>
        <property name="lname" val="Jones"/>
        <property name="ssn" val="987"/>
      </record>
    </object>
    

    请注意,列标题可以包含任何值。它们可能不仅仅是四个。

2 个答案:

答案 0 :(得分:2)

我会这样表达:

<root>
  <person>
    <email/>
    <fname/>
    <lname/>
    <ssn/>
  </person>
  <person>
    <email>mrnt...</email>
    <fname>Martin</fname>
    <lname>Dimitrov</lname>
    <ssn>123</ssn>
  </person>
  <person>
    <email>dani...</email>
    <fname>Dany</fname>
    <lname>Jones</lname>
    <ssn>987</ssn>
  </person>
</root>

将定义email和maxs的maxoccurs属性的xsd架构与1

相关联
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="person">
          <xs:complexType>
            <xs:sequence>
              <xs:element type="xs:string" name="email" maxOccurs="1"/>
              <xs:element type="xs:string" name="fname"/>
              <xs:element type="xs:string" name="lname"/>
              <xs:element type="xs:string" name="ssn" maxOccurs="1"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

答案 1 :(得分:1)

使用XSD描述文档结构和元素约束;不要在文档中嵌入元数据。

使用XSD,您可以根据其架构验证文档;如果您在文档中嵌入描述约束的元数据,则必须手动验证它,创建更多工作;新约束意味着更新代码。使用XSD,它可以通过模式自动处理。