Я работаю с XML-схемой, которая содержит определение абстрактных элементов, такие какНеверного значения IsAbstract в ссылочном XmlSchemaElement
<element name="AbstractX" type="some:Type" abstract="true"/>
При загрузке этой схемы в XmlSchemaSet
, я могу найти этот элемент в его GlobalElements
и что у него есть свойство IsAbstract
, установленное на true
. Все идет нормально.
Однако этот элемент также упоминается в типе, как этот
<complexType name="ReferencingX">
<complexContent>
<extension base="some:otherBaseType">
<sequence>
<element ref="some:AbstractX"/>
</sequence>
</extension>
</complexContent>
</complexType>
В анализируемом XmlSchemaSet, когда я перейти к элементу через сложное определение типа, он имеет IsAbstract
набор для false
.
Есть ли причина для этого, или это ошибка в System.Xml.Schema
?
(я упростил XSD для краткости, схема в вопросе AIXM)
Это именно то, что я сделал, но можете ли вы уточнить, почему «ссылки не могут быть отмечены абстрактными»? Это XmlSchemaElement, вся другая информация взята из ссылочного элемента, почему бы и нет? – voidengine
@voidengine, спецификация говорит так (я обновил свой ответ ссылкой). Неправильно указывать «вся другая информация берется из ссылочного элемента». Например, информация SchemaTypeName ** не доступна ** для элементарной частицы с использованием @ref, вы должны перейти к ссылочному (глобальному) элементу, как сказано в моем ответе. Действительно, вы можете получить заполненный ElementSchemaType, но не забывайте, что это свойство infoset после проверки схемы. Мое личное наблюдение заключается в том, что API был написан, чтобы как можно больше придерживаться спецификации: там, где спецификация не разрешена ... –
(продолжение), API не заполняет ее: type (не может использоваться на ref), abstract (всегда будет возвращать false) и т. д. –