xsd - круговые зависимости между сложными типами - PullRequest
0 голосов
/ 14 апреля 2020

Я смотрю на некоторые 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>

Что означает

  • CI_Citation_PropertyType содержит следующие термины типа CI_Citation_Type
  • и CI_Citation_Type содержит следующие термины типа MD_Identifier_PropertyType

С другой стороны, я вижу это в 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> 

Это означает, что

  • MD_Identifier_PropertyType содержит следующие термины типа MD_Identifier_Type
  • и MD_Identifier_Type содержит следующие термины типа CI_Citation_PropertyType

Итак

Это похоже на круговую зависимость между типами xsd CI_Citation_PropertyType и MD_Identifier_PropertyType .

Мои вопросы:

  1. Это действительный / законный xsd? Являются ли такие "циклические зависимости" проблемой в xsd / xml? (Я думаю, что циклические ссылки принимаются в схемах xsd)

  2. Я пытаюсь сгенерировать классы отображения для этих типов. Я не могу понять, как справиться с такими зависимостями (в c ++, где #include являются последовательными. Может быть, с помощью предварительных объявлений и указателей ...).

Большое спасибо

1 Ответ

1 голос
/ 15 апреля 2020

XSD, очевидно, должен разрешать рекурсивные структуры для моделей документов, например, когда таблицы вложены в таблицы. Поэтому неудивительно, что такие структуры являются законными.

Я не могу помочь вам в том, как генерировать классы отображения, но языки, подобные C ++, также допускают рекурсивные структуры данных.

...