You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XML Schema创建PK和FK时PkReportsTo无法解析错误如何解决?

错误产生原因
  • 命名空间匹配问题:你的XSD声明了默认命名空间http://www.ricardoterra.com.br且开启了elementFormDefault="qualified",所有业务元素都属于该命名空间,但标识约束中的XPath选择器没有绑定该命名空间,导致PkReportsTo约束实际未匹配到任何节点,解析器无法识别该约束组件。
  • 外键逻辑颠倒:业务逻辑上应为employee的reportsTo字段(存储上级员工编号)引用employee的number主键,你当前的定义反过来要求员工编号引用reportsTo的值,完全不符合外键设计逻辑。同时reportsTo设置了minOccurs="0"为可选字段,不符合xs:key要求所有选中节点值非空的规则,本身就不能作为主键使用。
  • 约束引用未加命名空间前缀:所有自定义的标识约束都属于你声明的默认命名空间,refer属性直接写PkReportsTo会被识别为无命名空间的约束,自然无法匹配到你定义的约束。
修复步骤
  1. 给自定义命名空间添加别名,方便XPath中引用,修改xs:schema标签如下:
<xs:schema 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:tns="http://www.ricardoterra.com.br"
xmlns="http://www.ricardoterra.com.br" 
elementFormDefault="qualified">
  1. 删除错误的PkReportsTo主键定义,该字段为可选字段不能作为主键使用。
  2. 修正所有标识约束的XPath选择器,添加命名空间前缀tns:,同时修正keyref的关联逻辑,让reportsTo引用员工主键PkEmploye:
<!-- 原有唯一约束修正 -->
<xs:unique name="number"> 
    <xs:selector xpath="tns:employee"></xs:selector>
    <xs:field xpath="@number"></xs:field>
</xs:unique>
<!-- 原有员工主键修正 -->
<xs:key name="PkEmploye">
    <xs:selector xpath="tns:employee"/>
    <xs:field xpath="@number"></xs:field>
</xs:key>
<!-- 修正后的外键约束 -->
<xs:keyref name="FKtoReportsToEmployee" refer="tns:PkEmploye">
    <xs:selector xpath="tns:employee"></xs:selector>
    <xs:field xpath="tns:reportsTo"></xs:field>
</xs:keyref>

修复后即可正常通过XSD校验,外键会自动验证所有非空的reportsTo值都存在于已有的员工number属性中。

内容的提问来源于stack exchange,提问作者Paulo Alcantara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:36:04