本地独特?

时间:2011-01-18 23:35:47

标签: xsd

我试图直接了解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>

感谢!!!

1 个答案:

答案 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,后两者是荒谬的