[英]How would you describe this in XML/XSD?
我不确定以下内容将是一个好的XML结构...
假设一个字段类型(例如<person>)可以具有不同的“风味”,例如,person是仅由某个ID定义的本地引用,或者它是与各种地址元素关联的全局引用。 为此,一个好的XML结构将是什么,以便在模式(xsd文件)中易于描述?
我看到了两种策略-机器人都有一些主要缺点:
要么将人员类型定义为一个单独的元素,例如<type>,但随后我猜想一个架构无法区分哪些类型的特定字段是强制性的:
<person>
<type>local</type>
<id>12345</id>
</person>
<person>
<type>global</type>
<name>Some Name</name>
<address>Some Street 42</address>
<city>Some City</some>
</person>
在这种情况下,<id>应该仅对“本地”人员类型是必需的,并且对于“全局”人员类型也应为必填字段。
另一种策略是为每个person子类型定义一个新的节点类型,但是我们不能说每个sub-type实际上只是<person>的一种形式:
<personLocal>
<id>12345</id>
</personLocal>
<personGlobal>
<name>Some Name</name>
<address>Some Street 42</address>
<city>Some City</some>
</personGlobal>
对这样的结构建模的好策略是什么?
您可以使用以下(部分)架构:
<xs:element name="person">
<xs:complexType>
<xs:choice>
<xs:element name="id" type ="xs:int"/>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="address" type="xs:string" />
<xs:element name="city" type="xs:string" />
</xs:sequence>
</xs:choice>
</xs:complexType>
</xs:element>
重要: xs:choice
标签。
这将导致以下结果:
person
标签内的第person
标签是id
标签时,则不允许其他标签。 person
标签内的第person
标签为name
标签时, address
和city
标签为必填项,则不允许使用id
标签。 对我来说,我是这样的:
<parent>
<local>
<person>
<name />
<adress />
<city />
</person>
</local>
<global>
<person>
<name />
<adress />
<city />
</person>
</global>
<parent>
或者像这样:
<person type='local'>
<name />
<adress />
<city />
</person>
<person type='global'>
<name />
<adress />
<city />
</person>
:)
一种工作环境(我可能最终会遇到的一种工作环境)是按以下方式定义架构,因为不同的人员类型(除了我所解释的两个示例以外)可能包含一些相同的字段:
<xs:element name="person">
<xs:complexType>
<xs:choice>
<xs:element name="local">
<xs:complexType>
<xs:sequence>
<xs:element name="id" type ="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="global">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="address" type="xs:string" />
<xs:element name="city" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.