【问题标题】:XML schema primary keyXML 模式主键
【发布时间】:2014-10-10 20:05:05
【问题描述】:

我正在尝试为员工创建 XML 数据库,但架构有问题。

对于每个员工,我有四个元素:姓名、身份证和电子邮件。如何将 ID 设置为主键并将电子邮件设置为唯一?

我试过这个作为主键:

<xs:key msdata:PrimaryKey="true" type="xs:string" name="ID"/> 

但它不起作用。 这是我所有的 XML 代码:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="employees">
<xs:complexType>
  <xs:sequence>
    <xs:element name="employee">
      <xs:complexType>
        <xs:sequence>        
          <xs:element type="xs:string" name="Name"/>
          <xs:element type="xs:string" name="Surname"/>
          <xs:element type="xs:string" name="ID"/>
          <xs:element type="xs:string" name="e-mail"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
  </xs:sequence>
</xs:complexType>
     <xs:key name="empl-key">
        <xs:selector xpath="employee"/>
        <xs:field xpath="@ID"/>
     </xs:key>
 </xs:element>
</xs:schema>

提前致谢。

【问题讨论】:

  • 你确定这是 all 架构吗?您粘贴的 XML 格式不正确(至少您在 elementFormDefault="qualified 之后缺少引号),并且在没有 targetNamespace 的架构中包含 elementFormDefault 似乎很奇怪。
  • 我很抱歉,elementFormDefault=" 之后的引号限定了它的丢失,因为我将它粘贴在这里时出现了错误。它就在我的代码上。我是 XML 新手,所以我使用的东西我不完全理解它们的含义。
  • 另外,您当前的架构需要 恰好一个 employee 元素在 employees 中,您需要添加 minOccurs 和/或 maxOccurs 以允许更多(或更少)一。
  • 好的,我现在添加了,谢谢。

标签: xml xsd schema primary-key


【解决方案1】:

基本思想是,如果您希望 Company 中的每个 Employee 都有一个唯一的 ID,那么您可以在 Company 元素级别创建一个 xs:key 定义,其中 xs:selector 路径从中选择 Employee 节点Company 元素,xs:field 路径从 Employee 节点中选择 ID 节点。类似的东西

<xs:element name="Company">
  ....
  <xs:key name="empl-key">
    <xs:selector xpath="Employee"/>
    <xs:field xpath="@ID"/>
  </xs:key>
</xs:element>

【讨论】:

  • 我试过了,但不幸的是,它似乎不起作用。另外,我尝试这样做: 但什么也没发生。
  • 好吧,那你做错了。也许您在错误的地方定义了您的密钥,或者路径错误。也许涉及到一个命名空间。从这么少的代码sn-p中调试是不可能的。
  • 我将编辑我的问题并在其中插入我的 xml 代码。
  • 你的ID是子元素,不是属性,所以去掉字段定义中的“@”号。
猜你喜欢
  • 2012-04-23
  • 2010-12-05
  • 1970-01-01
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
  • 2010-11-23
  • 2017-12-26
  • 2018-07-23
相关资源
最近更新 更多