Итак, я нашел этот пост, который очень похож на то, чего я хочу достичь, но я не могу понять, невозможно ли выполнить то, что я пытаюсь, или я просто что-то упускаю ...
Использование XML Схема для расширения элемента, а не complexType
Суть в том, что у меня есть XSD, который содержит определенный Элемент. Я бы предпочел не редактировать этот оригинальный файл xsd. Можно ли как-нибудь расширить Элемент, чтобы я также мог добавить свои собственные атрибуты "attribute C"?
Другой пост создает новый complexType для fooType, помещает элемент в него и расширяет fooType, чтобы содержать больше элементов. Тем самым они могут получить Элемент, содержащий fooElement и два других добавленных элемента. Проблема в том, что я хотел бы добавить сам элемент, а не добавить элемент на том же уровне.
XSD1
<xs:schema xmlns:bas="http://www.base.com"
xmlns="https://www.adding.com"
attributeFormDefault="qualified"
elementFormDefault="qualified"
targetNamespace="https://www.adding.com"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="XSD2.xsd" namespace="http://www.base.com" />
<xs:complexType name="FileSpecType">
<xs:sequence>
<xs:element ref="bas:FileSpec"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="FullFileSpecType">
<xs:complexContent mixed="false">
<xs:extension base="FileSpecType">
<xs:attribute name="attributeC" type="xs:string" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="FileSpec" type="FileSpecType" />
Этот код заканчивается создание нового FileSpe c
<FileSpec AttributeC="attCval" />>
<bas:FileSpec/>
</FileSpec>
Чего я хочу достичь, это больше похоже на ...
<bas:FileSpec AttributeA="attAval" AttributeB="attBval" AttributeC="attCval/>
Кто-нибудь может указать мне правильное направление для решения моих проблем?
Я думаю, что мог бы определить свой собственный dataType = FileSpe c и добавить свою собственную ссылку на внешние атрибуты, но для этого потребовалось бы вручную копировать каждый атрибут, который существует в моем исходном XSD2 FileSpe c поэтому я предпочел бы избежать этого, если это возможно. Тогда я думаю, что смогу взять созданный мной новый FileSpe c и переопределить старый FileSpe c. Возможно ли это сделать? Похоже, много работы, которая должна иметь более простое решение.