Есть ли разумный способ иметь элементы с строго типизированными простыми типами, а также атрибутами?
Хорошо, у меня есть схема XSD, у которой есть миллион (er, сотни) элементов, которые могут выглядеть так:
<xsd:element name="DocumentDescription" type="xsd:string" />
<xsd:element name="DocumentDateTime" type="xsd:dateTime" />
<xsd:element name="DocumentSize" type="xsd:int" />
Это денди. Тем не менее, я действительно хочу, чтобы все эти элементы также имели некоторые общие атрибуты на них, например, "формат" и "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", который я там помещал...
Могу ли я добавлять атрибуты к простым типам в не-clunky? Или мне нужно определить дюжину complexTypes, которые все идентичны, за исключением простого типа, который они распространяют?
Сильно типизированные элементы не только описывают данные более разумно, но когда я использую их для XML-сопоставления в Excel (и это целая цель для этих вещей), сильная типизация означает, что Excel правильно устанавливает форматирование ячейки по типу.
Я, наверное, смотрю на это не так! Любые советы приветствуются.