我有表格数据,例如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>
到目前为止一直很好,但我必须遵循一些规则:
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>
请注意,列标题可以包含任何值。它们可能不仅仅是四个。
答案 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,它可以通过模式自动处理。