【问题标题】:XSD key with Namespace带有命名空间的 XSD 密钥
【发布时间】:2012-09-04 21:34:29
【问题描述】:

我有一个我自己无法解决的问题。我的 XSD 非常复杂,但这里是一个更简单的代码,但也有同样的问题。

这是 XSD:

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema id="Race"
           xmlns:xs = "http://www.w3.org/2001/XMLSchema"
           targetNamespace="myrace.org/"
           xmlns="myrace.org/"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified"
           xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

  <xs:element name="race" msdata:IsDataSet="true">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="runner" type="runnerType" maxOccurs="10">
        </xs:element>
      </xs:sequence>
    </xs:complexType>
    <xs:keyref name="predecessorKey" refer="runKey">
      <xs:selector xpath="runner/predecessor"/>
      <xs:field xpath="@foreignKey"/>
    </xs:keyref>
    <xs:unique name="runIdChecker">
      <xs:selector xpath="runner"/>
      <xs:field xpath="@primaryKey"/>
    </xs:unique>
    <xs:unique name="oneToOneChecker">
      <xs:selector xpath="runner/predecessor"/>
      <xs:field xpath="@foreignKey"/>
    </xs:unique>
    <xs:key name="runKey">
      <xs:selector xpath="runner"/>
      <xs:field xpath="@primaryKey"/>
    </xs:key>
  </xs:element>

  <xs:complexType name="runnerType">
    <xs:sequence>
      <xs:element name="firstName" type="xs:string"/>
      <xs:element name="lastName" type="xs:string"/>
      <xs:element name="predecessor" type="predecessorType" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
    <xs:attribute name="primaryKey" type="xs:long" use="required"/>
  </xs:complexType>

  <xs:complexType name="predecessorType">
    <xs:attribute name="foreignKey" type="xs:long" use="required"/>
  </xs:complexType>

</xs:schema>

XSD 工作正常,但是当我们编写 2 个相似的 primaryKey 时它应该会产生错误,而事实并非如此。

另一方面,如果我将头部更改为:

<xs:schema id="Race"
           xmlns:xs = "http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified"
           xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

它会起作用的。但出于与我的全球项目一致的原因,我无法更改头部,需要定义 XSD -> XML 之间的连接,相当于第一个代码。

有人知道我的问题是什么以及我能做什么吗?

谢谢

本杰明

【问题讨论】:

    标签: xml xsd


    【解决方案1】:

    看看this answer,特别是当你的架构以命名空间为目标时,它谈到需要为选择器和字段使用命名空间前缀的部分。

    所以,您需要做的就是添加 xmlns:my="myrace.org/" 然后将选择器更改为类似 my:runner/my:predecessor 的内容 - 它会起作用。属性是不合格的,所以你不必担心它们。

    我没有可视化您的正确性约束,但如果您遇到问题,请更新帖子。

    【讨论】:

    • 这正是我所需要的。
    • 非常感谢。本杰明,
    猜你喜欢
    • 1970-01-01
    • 2010-10-29
    • 2012-07-16
    • 2010-12-23
    • 1970-01-01
    • 2011-09-18
    • 2014-08-10
    • 2012-06-01
    • 2023-04-09
    相关资源
    最近更新 更多