Xsd XML架构:没有支持元素的AttributeGroup?重复属性?

Xsd XML架构:没有支持元素的AttributeGroup?重复属性?,xsd,Xsd,我的任务是为xml文档编写一个具有支持模式的解析器,该模式是由据称比我更聪明、更有经验的人创建的。然而,我不是xml专家,从我所能说的来看,我相信他们的模式中缺少了一些考虑因素 下面是我所给出的模式的简化版本: <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault=

我的任务是为xml文档编写一个具有支持模式的解析器,该模式是由据称比我更聪明、更有经验的人创建的。然而,我不是xml专家,从我所能说的来看,我相信他们的模式中缺少了一些考虑因素

下面是我所给出的模式的简化版本:

<?xml version="1.0"?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
        <xsd:attributeGroup name="Group1">
            <xsd:attribute name="attrib1" type="xsd:NMTOKENS"/>
            <xsd:attribute name="attrib2" type="xsd:NMTOKENS"/>
        </xsd:attributeGroup>
</xsd:schema>

在我回到我的客户那里批评他们的模式设计之前,我非常感谢集体智慧为我确认或否认以下几点:

  • 架构中的某种元素应该使用attributeGroup。在模式中单独使用attributeGroup是没有意义的。(除非此架构打算导入到另一个架构中)
  • attributeGroup中的属性只能在有效xml文档的单个元素中出现一次。例如:

    <?xml version="1.0"?>
    <element1 attrib1="first second third" attrib1="first second third"/>
    
    
    
    无效,因为存在重复的“attrib1”,对吗

    • 我被告知,我可能会收到具有重复属性的文档。我想告诉我的客户,模式需要反映这种可能性(如果可能的话…)。有没有办法定义一个可以出现多次的属性?我知道“maxOccurs”属性,但我不认为这对属性定义有效
  • 提前感谢您的投入

    属性组应由 模式中的某种元素。 仅仅拥有一个 属性组独立于 模式

    嗯,这取决于它是否有意义。在XML中,属性类似于“附加到元素的额外信息”。因此,在实例文档中,如果没有“承载”属性的元素,属性就不可能存在。要在实例文档中具有属性,需要1)存在具有此属性的元素2)在架构中以某种方式定义或引用此属性。如果架构中没有定义(允许)使用某个属性的元素,则该属性不能出现在实例文档中

    同样,定义不使用的属性是允许的,这不是一个错误。在某些情况下,这可能是合理的,例如,为了方便将来计划采用的特性,或者允许将模式导入或包括到另一个模式中,该模式将使用这些属性

    <element ns1:attrib="value" ns2:attrib="value"/>
    
    属性组中的属性 在有效时间内只能发生一次 xml文档。例如:

    <?xml version="1.0"?>
    <element1 attrib1="first second third" attrib1="first second third"/>
    

    无效,因为存在 重复“attrib1”,对吗

    您的代码示例很清楚:这在XML中是不允许的。As:“属性名不能在同一开始标记或空元素标记中出现多次。”同样,您在代码示例上面编写的声明也不完全正确。同一属性可能会在有效的XML文档中多次出现。它只需要出现在不同的元素上。不允许在一个元素上复制属性。但是,可以复制元素,使它们都具有相同的属性

    <element ns1:attrib="value" ns2:attrib="value"/>
    
    不允许:

    <element1 attrib1="first second third" attrib1="first second third"/>
    
    
    
    允许的:

    <element1 attrib1="first second third"/>
    <element1 attrib1="first second third"/>
    
    
    
    作为一种特殊情况,重复的属性名称应用于属性的扩展名称

    <element ns1:attrib="value" ns2:attrib="value"/>
    
    
    

    如果两个前缀
    ns1
    ns2
    解析为相同的命名空间URI,则不允许使用此选项。

    感谢您的回复。我同意你的观点,我在代码示例之前的陈述是不正确的。我打算解释代码示例中的显式内容。我会解决的。我想我理解您关于“host”元素的观点,以及他们的模式定义在技术上不是一个错误。我的问题是,无论出于何种目的,该模式都是“父”模式,因此,在该模式中缺少“主机”元素,不会从本质上限制在有效实例文档中使用attributeGroup中的这些属性吗?再次感谢您的投入@你的假设是正确的。如果此架构没有:1)具有属性
    foobar
    的任何元素,2)具有
    的任何元素(因此它可以包含任何属性),以及3)任何
    定义,那么,作为该模式文件实例的文档不能包含属性
    foobar
    ,即使该模式具有该属性的全局属性定义。