Есть ли какой-нибудь разумный способ иметь элементы со строго типизированными простыми типами, а также атрибуты?
Хорошо, у меня есть XSD-схема, в которой есть миллион (даже сто) элементов, которые могут выглядеть следующим образом:
<xsd:element name="DocumentDescription" type="xsd:string" />
<xsd:element name="DocumentDateTime" type="xsd:dateTime" />
<xsd:element name="DocumentSize" type="xsd:int" />
Это денди. Однако я действительно хочу, чтобы все эти элементы также имели некоторые общие атрибуты, такие как, скажем, «format» и «isVisible». т.е. есть схема вроде:
<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>
Я мог бы сделать это вручную и ужасно, добавив все такие атрибуты в XSD при генерации, что-то вроде этого:
<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
... но в идеальном мире я бы лучше определил его как complexType:
<xsd:complexType name="customType">
<xsd:complexContent>
<xsd:extension base="???">
<xsd:attribute name="format" type="xsd:string" />
<xsd:attribute name="isVisible" type="xsd:boolean" />
... что означает, что я мог бы просто сделать:
<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" />
Проблема с моим кодом "идеального мира" заключается в следующем:
a) У меня нет действительного <xsd:extension base-"???"
>, так как на самом деле мне все равно, что я расширяю; Я хочу расширить все типы. Похоже, "xsd: anyType" подходит, но тогда элемент становится слабо типизированным контейнером, не так ли?
b) Я больше не могу указывать простой тип в <xsd:element
>, так как теперь тип - это сложный "customType", который я определил. Отсюда мнимый атрибут "baseType", который я там поставил ...
Так можно ли добавить атрибуты к простым типам без лишних сложностей? Или мне нужно определить дюжину complexTypes, которые все идентичны, кроме простого типа, который они расширяют?
Элементы со строгой типизацией не только более разумно описывают данные, но когда я использую их для сопоставления XML в Excel (и в этом вся цель), строгая типизация означает, что Excel устанавливает правильное форматирование ячеек по типу.
Я, наверное, смотрю на все это неправильно! Любой совет приветствуется.