Я смотрю на некоторые 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
.
Мои вопросы:
Это действительный / законный xsd? Являются ли такие "циклические зависимости" проблемой в xsd / xml? (Я думаю, что циклические ссылки принимаются в схемах xsd)
Я пытаюсь сгенерировать классы отображения для этих типов. Я не могу понять, как справиться с такими зависимостями (в c ++, где #include являются последовательными. Может быть, с помощью предварительных объявлений и указателей ...).
Большое спасибо