Załóżmy, że mam pewien schemat:Wykorzystanie XML Schema do rozszerzenia elementu, zamiast complexType
<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>
ta określa jakiś element foo
, który ma w środku jakiś element fooElement
z typu string. Chciałbym teraz rozszerzyć element foo
o element barElement
i wywołać to rozszerzenie bar
.
Aby to komplikować, załóżmy, że ktoś inny zdefiniował foo
, a schematu nie można zmienić. Chociaż tutaj przykład jest banalny, załóżmy również, że zawartość foo
może być bardziej skomplikowana, a definiowanie nowego schematu nie jest tak proste jak kopiowanie elementu.
Skutecznie, chciałbym zdefiniować nowy schemat:
<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>
Niestety <xsd:extension>
„s base
atrybut przyjmuje tylko argumenty typu XSD, a nie elementów. Jak mogę rozszerzyć element? (czy mogę przedłużyć element?)
Świetne pytanie, chciałbym zrobić dokładnie to samo - i nie mogę uwierzyć, że wydaje się to niemożliwe. Zwariowany! –