Supongamos que tengo algún esquema:uso de esquemas XML para extender un elemento en lugar de un 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>
Esto define un elemento foo
que tiene en su interior algún elemento fooElement
con una cuerda tipo. Me gustaría extender ahora el elemento foo
para que también tenga un elemento barElement
y llame a esta extensión bar
.
Para complicar las cosas, supongamos que alguien más ha definido foo
y no se puede cambiar el esquema. Si bien el ejemplo aquí es trivial, supongamos también que el contenido de foo
podría ser más complicado, y que definir un nuevo esquema no es tan simple como copiar el elemento fooElement
.
Efectivamente, me gustaría definir un nuevo esquema:
<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>
Desafortunadamente <xsd:extension>
's base
atributo sólo acepta argumentos de tipo XSD, no elementos. ¿Cómo extiendo un elemento? (¿Puedo extender un elemento?)
Gran pregunta, me gustaría hacer exactamente lo mismo, y me da incredulidad que parezca imposible. ¡Loca! –