xml - 单个元素下的多个 xs:id 属性 - XSD 定义
问题描述
尝试使用具有两个“xs:ID”类型属性的元素定义 XSD 时,我在 IntelliJ 2015 (IJ) 中遇到错误。不幸的是,我从一个早已不在的人那里继承了这段代码,所以不确定他们到底想要实现什么。
这是 XSD 的精简版:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
...
<xs:element name="visitor-test">
<xs:complexType>
...
<xs:attribute name="null-node" type="xs:ID" default="null-node"/>
<xs:attribute name="null-id" type="xs:ID" default="null-id"/>
</xs:complexType>
</xs:element>
</xs:schema>
这是 XML 的开头,但有错误:
<?xml version="1.0" encoding="UTF-8"?>
<visitor-test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="visitor-test-schema.xsd" null-id="f">
IJ 用红色强调并抱怨:
属性“null-id”不允许出现在元素“visitor-test”中
有什么作用:
- 如果我将 XML 属性更改为空节点,即
null-node="f">
- 如果我颠倒 XSD 中属性 null-node 和 null-id 的顺序(但是 null-node 会出现同样的问题)
- 如果我将 XSD 中任一属性的类型更改为
xs:String
例如<xs:attribute name="null-node" type="xs:string" default="null-node"/>
由于这不是我的代码,而且我不确定这些代码的用途,我想知道,我的前任是否在同一元素上定义了两个 ID 属性时犯了错误?根据“ http://www.w3.org/2001/XMLSchema ”,这是非法的吗?如果是这样,我的“最安全”的选择是什么?看来#3...
此外,#1 和#2 一起意味着只有 XSD 中定义的第一个属性似乎是有效的,不允许后续的。奇怪的是,这两个属性都是 IDE 建议的。
解决方案
XSD 1.0中的xs:ID
类型,
[定义:] ID 表示 [XML 1.0 (第二版)] 中的 ID 属性类型。
派生自ID
XML/DTD 中的属性类型,
一种元素类型不得指定多个 ID 属性。
您可以在其中看到ID
每个元素类型只允许一个属性。
注意:在XSD 1.1ID
中,每个元素允许多个属性:
一个元素现在可能有多个 type 属性
xs:ID
。元素总是可以有多个 type 的子元素xs:ID
,但是 XSD 1.0 禁止这种类型的多个属性以与 XML DTD 兼容。(旨在可转换为 DTD 形式的模式仍应避免这种做法。)此更改应使 XML 词汇表更容易支持现有ID
属性和xml:ID
.
(感谢 Michael Kay 提供的有用更新。)
推荐阅读
- r - 调整 R 数据框中的一列
- docker - Kubernetes 中的探测能否告诉基础设施服务肯定失败了?
- java - 如何更改子活动中 startActivityForResult 的响应代码
- javascript - 如何将 JavaScript 函数转换为 jQuery 函数?
- audio - 如何使用 ffmpeg 将音频流重定向到虚拟脉冲音频麦克风?
- c - 如何检查我的程序是否确实由 systemd 运行或直接调用?
- swift - GX16u7 中 Swift 编译器版本的问题
- swift - 时间用完时如何自动重新启动计时器?
- javascript - FabricJS ClipPath 无法在 toDataUrl 上使用乘数正确缩放
- python - 使用 Python 将 JSON 数据插入 Oracle