Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 单个元素下的多个xs:id属性-XSD定义_Xml_Xsd_Xsd Validation_Xml Validation - Fatal编程技术网

Xml 单个元素下的多个xs:id属性-XSD定义

Xml 单个元素下的多个xs:id属性-XSD定义,xml,xsd,xsd-validation,xml-validation,Xml,Xsd,Xsd Validation,Xml Validation,我在Intellij2015(IJ)中遇到一个错误,当时我试图用一个具有两个类型为“xs:ID”的属性的元素定义一个XSD。不幸的是,我从一个早已离开的人那里继承了这段代码,所以不确定他们到底想实现什么 以下是XSD的精简版本: <?xml version="1.0" encoding="ISO-8859-1" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> ... <xs:ele

我在Intellij2015(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">

IJ用红色下划线并抱怨:

属性“null id”不允许出现在元素“访问者测试”中

什么有效:

  • 如果我将XML属性更改为null node,即
    null node=“f”>
  • 如果在XSD中颠倒属性null node和null id的顺序(但是null node也会出现同样的问题)
  • 如果我将XSD中任一属性的类型更改为
    xs:String
    ,例如
  • 由于这不是我的代码,而且我不确定这些代码的用途,我想知道,我的前任是否在同一个元素上定义了两个ID属性时出错了?根据“”这是非法的吗?如果是这样,我的“最安全”的选择是什么?看来#3


    此外,#1和#2一起意味着只有XSD中定义的第一个属性似乎有效,后续属性是不允许的。奇怪的是,这两个属性都是IDE建议的。

    XSD1.0中键入
    xs:ID

    [Definition:]ID表示[XML 1.0]中的ID属性类型 (第二版)]

    派生自XML/DTD中的
    ID
    属性类型

    元素类型不能指定多个ID属性

    您可以看到,每个元素类型只允许一个
    ID
    属性

    可供选择的方法和方法没有此类限制


    注意:XSD 1.1中,允许每个元素具有多个
    ID
    属性:

    一个元素现在可能有多个
    xs:ID
    类型的属性。元素 始终能够有多个xs:ID类型的子项,但是 XSD 1.0禁止此类型的多个属性与兼容 XML DTD。(要翻译成DTD形式的模式应该 仍然避免这种做法。)此更改应该使XML更容易使用 支持现有
    ID
    属性和
    xml:ID
    的词汇表


    (感谢Michael Kay的帮助更新。)

    注意,XSD 1.1中不再存在此规则。参见G1.7:一个元素现在可能有多个xs:ID类型的属性。元素总是能够有多个xs:ID类型的子元素,但是为了与XML DTD兼容,XSD 1.0禁止了这种类型的多个属性。(打算翻译成DTD形式的模式仍然应该避免这种做法。)这一更改应该使XML词汇表更容易支持现有的ID属性和XML:ID。@MichaelKay:值得注意。答案已更新。谢谢,谢谢,这很有道理。兼容性问题。