我试图直接了解XML Schema的唯一和关键元素, 特别是关于选择器和字段元素。
我不清楚选择器和领域,我需要直截了当。
假设我有一个XML文件,其中列出了功能组中列出的公司。 我在每个组中都有一个具有唯一字段的元素(以供参考 每个特定的小组)。
我想在每个公司列表中创建一个唯一字段 每个组仅在该特定组中是唯一的。
这是正确的吗?:
<xs:unique id="company_group_refs" name="company_group_refs">
<xs:selector xpath="root/all_companies/company_group"/>
<xs:field xpath="company_group_ref"/>
</xs:unique>
<xs:unique id="company_refs" name="company_refs">
<xs:selector xpath="root/all_companies/company_group"/>
<xs:field xpath="company/company_ref"/>
</xs:unique>
如果是这样,我可以将上述内容浓缩到这个吗?:
<xs:unique id="company_refs" name="company_refs">
<xs:selector xpath="root/all_companies/company_group"/>
<xs:field xpath="company_group_ref"/>
<xs:field xpath="company/company_ref"/>
</xs:unique>
特别要引用任何公司名称,我希望能够 给出一个像这样的XPath表达式:
根/ all_companies / company_group [company_group_ref = X1] /公司[company_ref = X2] /名称
其中:x1 =公司集团的唯一参考 和:x2 =该组内公司的唯一参考。
以下是一个XML文件摘录,举例说明了这种情况:
<all_companies>
<company_group>
<company_group_name>Cleaning</company_group_name>
<company_group_ref>1</company_group_ref>
<company>
<name>Ajax</name>
<company_ref>1</company_ref>
</company>
<company>
<name>Bloomburg</name>
<company_ref>2</company_ref>
</company>
<company>
<name>Morris</name>
<company_ref>3</company_ref>
</company>
</company_group>
<company_group>
<company_group_name>Electrical</company_group_name>
<company_group_ref>2</company_group_ref>
<company>
<name>Armstrong</name>
<company_ref>1</company_ref>
</company>
<company>
<name>Bloomburg</name>
<company_ref>2</company_ref>
</company>
<company>
<name>Zap Electrical</name>
<company_ref>3</company_ref>
</company>
<company>
<name>Morris</name>
<company_ref>4</company_ref>
</company>
</company_group>
</all_companies>
感谢!!!
答案 0 :(得分:1)
要求group_refs唯一性的约束是正确的。使group_refs在组内唯一的约束应该如下所示
<xs:element name="company_group">
<xs:unique name="company_unique_within_group">
<xs:selector xpath="company">
<xs:field xpath="company_ref">
</xs:unique>
...
</xs:element>
将其视为“在company_group中”“选择所有公司”并要求“company_ref在其中是唯一的”。
您的company_ref约束说:“全局”“对于所有company_groups”要求“company / company_ref是唯一的”。
您的精简约束表达完全不同的东西:“全局”“对于所有company_groups”要求“company_group_ref和company / company_ref的组合”是唯一的。。鉴于每组实际上有多个company_refs,后两者是荒谬的