xsd - 复杂类型之间的循环依赖

xsd - circular dependencies between complex types

我正在查看此处提供的一些 xsd 文件:https://www.isotc211.org/2005/gmd/

我在 https://www.isotc211.org/2005/gmd/citation.xsd

中看到了这个
<xs:complexType name="CI_Citation_Type">
    <xs:complexContent>
        <xs:extension base="gco:AbstractObject_Type">
            <xs:sequence>
                ...
                <xs:element name="identifier" type="gmd:MD_Identifier_PropertyType" minOccurs="0" maxOccurs="unbounded"/>
                ...
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

<xs:element name="CI_Citation" type="gmd:CI_Citation_Type"/>

<xs:complexType name="CI_Citation_PropertyType">
    <xs:sequence minOccurs="0">
        <xs:element ref="gmd:CI_Citation"/>
    </xs:sequence>
    ...
</xs:complexType>

这意味着

另一方面,我在 https://www.isotc211.org/2005/gmd/referenceSystem.xsd

中看到了这个
<xs:complexType name="MD_Identifier_Type">
    <xs:complexContent>
        <xs:extension base="gco:AbstractObject_Type">
            <xs:sequence>
                <xs:element name="authority" type="gmd:CI_Citation_PropertyType" minOccurs="0"/>
                ...
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

<xs:element name="MD_Identifier" type="gmd:MD_Identifier_Type"/>

<xs:complexType name="MD_Identifier_PropertyType">
    <xs:sequence minOccurs="0">
        <xs:element ref="gmd:MD_Identifier"/>
    </xs:sequence>
    <xs:attributeGroup ref="gco:ObjectReference"/>
    <xs:attribute ref="gco:nilReason"/>
</xs:complexType> 

这意味着

所以

这看起来像是 xsd 类型 CI_Citation_PropertyTypeMD_Identifier_PropertyType 之间的循环依赖。

我的问题:

  1. 这是valid/legalxsd吗?这样的 "circular dependencies" 是 xsd/xml 的问题吗? (我认为 xsd 模式接受循环引用)

  2. 我尝试为这些类型生成映射 类。我无法弄清楚如何处理这种依赖关系(在 C++ 中,#includes 是顺序的。可能通过前向声明和指针...)。

非常感谢

XSD 显然必须允许文档模型的递归结构,例如其中表格嵌套在表格中。因此,这样的结构是合法的也就不足为奇了。

我无法帮助你如何生成映射类,但像 C++ 这样的语言也允许递归数据结构。