我在IntelliJ 2015(IJ)中尝试使用具有两个属性类型" xs:ID"的元素定义XSD时出错。不幸的是,我从很久以前的人那里继承了这段代码,所以不确定他们想要实现的目标。
这是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">
属性&#39; null-id&#39;不允许出现在元素&#39; visitor-test
中
有什么作用:
null-node="f">
xs:String
,例如<xs:attribute name="null-node" type="xs:string" default="null-node"/>
由于这不是我的代码,并且我不确定这些是用于什么的,我想知道,我的前任是否在同一元素上定义了两个ID属性时出错?根据&#34; http://www.w3.org/2001/XMLSchema&#34;这是非法的吗?如果是这样的话,最安全的是什么?选择我的?好像#3 ......
此外,#1和#2一起暗示只有XSD中定义的第一个属性似乎是有效的,后续的属性是不允许的。但奇怪的是,这两个属性都是由IDE建议的。
答案 0 :(得分:1)
XSD 1.0 中的xs:ID
类型,
[定义:] ID表示[XML 1.0中的ID属性类型 (第二版)]。
派生自XML / DTD中的ID
属性类型,
Validity constraint: One ID per Element Type
元素类型不得指定多个ID属性。
您可以看到每个元素类型只允许一个ID
属性。
注意:在 XSD 1.1 中,每个元素允许多个ID
个属性:
G.1.7 ID, IDREF, and related types
元素现在可以具有多个
xs:ID
类型的属性。分子 总是能够有多个xs:ID
类型的孩子,但是 XSD 1.0禁止此类型的多个属性与之兼容 XML DTD。 (旨在可以转换为DTD形式的架构应该 仍然避免这种做法。)这种改变应该使XML更容易 词汇表支持现有ID
属性和xml:ID
。
(感谢Michael Kay提供此有用的更新。)