【问题标题】:Best way to add meta information to the XML document将元信息添加到 XML 文档的最佳方式
【发布时间】:2023-03-30 07:15:01
【问题描述】:

我有表格数据,例如,称为Person。列标题为email、fname、lname 和ssn。我带有以下 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. email 和 ssn 是唯一的列,我必须以某种方式指出这一点。

那么,包含表格元描述的最佳方式是什么?这个可以吗?我觉得有点奇怪。

<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>

请注意,列标题可以有任何值。他们也可能不止四个。

【问题讨论】:

  • 如果该表与其他表有关系,那么简单的键/值将不起作用,除非该表完全平坦,与其他表没有任何关系;这仅适用于一张桌子,Person?
  • 完全是扁平的,不知道怎么形容它的结构。

标签: xml


【解决方案1】:

我会以这种方式呈现它:

<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 和 ssd 的 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>

【讨论】:

  • 感谢您的回复。您认为我应该在哪里添加unique 属性?
  • 'unique' 属性由 xsd 中的 'maxOccurs="1"' 处理。您可以查看 here 获取有关此的文档。
【解决方案2】:

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

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

【讨论】:

  • 请注意,列标题可以包含任何值。
猜你喜欢
  • 2010-12-27
  • 1970-01-01
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-08
相关资源
最近更新 更多