Предположим, что у меня есть схема:
<xsd:schema ...>
<xsd:element name="foo">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="fooElement" type="xs:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Это определяет некоторый элемент foo
, который содержит внутри него некоторый элемент fooElement
с строкой типа. Я хотел бы расширить элемент foo
, чтобы иметь элемент barElement
и вызвать это расширение bar
.
Чтобы усложнить ситуацию, давайте предположим, что кто-то еще определил foo
, и схема не может быть изменена. Хотя пример здесь тривиален, допустим также, что содержимое foo
может быть более сложным и что определение новой схемы не так просто, как копирование элемента fooElement
.
Фактически, я бы хотел определить новую схему:
<xsd:schema xmlns:fns="otherschema" ...>
<xsd:import namespace="otherschema" />
<xsd:element name="bar">
<xsd:complexContent>
<xsd:extension base="fns:foo">
<xsd:sequence>
<xsd:element name="barElement" type="xs:string" />
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:element>
</xsd:schema>
К сожалению, атрибут <xsd:extension>
base
принимает только аргументы типа XSD, а не элементы. Как расширить элемент? (могу ли я расширить элемент?)