¿Hay alguna manera sensata de tener elementos con tipos simples fuertemente tipados y también atributos?XSD: Agregar atributos a elementos "simples" fuertemente tipados
Está bien, tienen un esquema XSD que tiene una serie de elementos millones (er, cien) que podría tener este aspecto:
<xsd:element name="DocumentDescription" type="xsd:string" />
<xsd:element name="DocumentDateTime" type="xsd:dateTime" />
<xsd:element name="DocumentSize" type="xsd:int" />
Eso es Dandy. Sin embargo, realmente quiero que todos estos elementos también tengan algunos atributos comunes en ellos como, digamos, "formato" y "isVisible". es decir, tiene un esquema como:
<DocumentDescription isVisible="true">doc description</DocumentDescription>
<DocumentDateTime format="dd/mm/yyyy" isVisible="true">1/1/2008</DocumentDescription>
<DocumentSize format="0.00 KB" isVisible="false">5403</DocumentSize>
que podría hacerlo de forma manual, y horriblemente, sumando todos estos atributos al XSD cuando generarlo, algo como esto:
<xsd:element name="DocumentDescription" />
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="format" type="xsd:string" />
<xsd:attribute name="isVisible" type="xsd:boolean" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:element name="DocumentDateTime" />
... etc
... pero en un mundo ideal prefiero defino como un complexType:
<xsd:complexType name="customType">
<xsd:complexContent>
<xsd:extension base="???">
<xsd:attribute name="format" type="xsd:string" />
<xsd:attribute name="isVisible" type="xsd:boolean" />
... lo que significa que sólo podía hacer:
<xsd:element name="DocumentDescription" type="customType" baseType="xsd:string" />
<xsd:element name="DocumentDateTime" type="customType" baseType="xsd:dateTime" />
<xsd:element name="DocumentSize" type="customType" baseType="xsd:int" />
El problema con mi código "mundo ideal" es que:
a) no tengo válida <xsd:extension base-"???"
>, ya que realmente no me importa lo que yo estoy extendiendo; Quiero extender todos los tipos. Parece que el "xsd: anyType" es apropiado, pero luego el elemento se convierte en un contenedor débilmente tipado, ¿no es así?
b) Ya no puedo especificar el tipo simple en el <xsd:element
>, ya que ahora el tipo es el complejo "customType" que definí. De ahí el atributo "baseType" imaginario que puse allí ...
¿Puedo agregar atributos a los tipos simples de una manera no grotesca? ¿O necesito definir una docena de ComplexTypes que sean todos idénticos, excepto por el tipo simple que extienden?
Los elementos fuertemente tipados no solo describen los datos de forma más sensata, sino que cuando los utilizo para mapeo XML en Excel (y este es el propósito de todo esto), el tipado fuerte significa que Excel establece el formato de celda correctamente basado en el tipo.
¡Probablemente estoy viendo todo de la manera incorrecta! Cualquier consejo apreciado.
he cancelado una edición que consistía en cambiar el nombre de todas las apariciones de _strongly-Type_ con _built en types_ sencilla ([redacción W3C] (http: //www.w3 .org/TR/2004/REC-xmlschema-0-20041028/primer.html # simpleTypesTable)). Tal redacción me hubiera ayudado a encontrar tu pregunta. Ahora no estoy seguro de que la edición sea válida, y estoy contento con mi comentario, incluyendo esta redacción, por lo que puedo encontrar su pregunta nuevamente en el futuro. – Alberto