Estoy buscando una variante para elegir un atributo para un elemento, que se puede establecer directamente o hacer referencia.Elección de los atributos en la instancia XML para los atributos o referencias directamente definidos
esto es lo que tenemos en mente:
<root>
<element>
<attribute ref="shortname" />
</element>
<element>
<attribute name="shortname" isEditable="true" anotherattrib="0815" />
</element>
</root>
Dado que esto no sería un problema sin un esquema XML, la definición de este atributo es bastante difícil si se requiere atributo "nombre" del atributo del elemento.
el esquema podría tener este aspecto
<xs:element name="attribute">
<xs:complexType>
<xs:attribute name="ref" use="required" />
<xs:attribute name="name" use="required" />
</xs:complexType>
</xs:element>
¿Hay alguna posibilidad de hacer una elección (similar a un xs: opción para los elementos) entre los atributos? Al igual que si hay un atributo del atributo del elemento denominado ref, no se permiten otros atributos. si no, se debe establecer el atributo "nombre" ...
Este problema parece puramente virtual y académico, pero me alegraría si pudiera haber una solución o si estoy completamente equivocado con lo que tengo en mente:)
¡Gracias de antemano por cualquier ayuda!
de Dave
Creo que la única manera de expresar esto sería: declarar un tipo complejo con contenido completo, declarar dos tipos derivados con restricción, cuando se declara que el contenido principal usa una opción. –
@Alejandro: En la forma en que puede declarar dos tipos. No es un problema, pero ¿cómo se puede definir una opción con dos elementos con ** el mismo nombre ** "" y otro tipo? No estoy seguro de que sea posible. Me parece que recibirá el error de que la definición del elemento "" es ambigua. –
Oleg
@Oleg: la elección es entre dos elementos (cada uno con un tipo derivado distinto) pero con el mismo nombre, ** en la declaración principal **, como ejemplo: complexType named 'Base'; complexType llamado 'BaseA' derivado de' Base' con restricciones; lo mismo para complexType llamado 'BaseB'; nombre del elemento 'Parent' con una opción entre un elemento llamado' Child' con el tipo 'BaseA' o un elemento llamado' Child' con el tipo 'BaseB'. –