有一些明智的方式来使用强类型的简单类型和属性的元素?
好的,我有一个XSD模式,它有一个百万(呃,百)元素可能是这样的:
<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
…但是在一个理想的世界中,我宁愿把它定义为一个复杂的类型:
<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,除了它们扩展的简单类型?
强类型的元素不仅可以更加明了地描述数据,而且在Excel中使用它们进行XML映射(这是这些东西的全部目的)时,强类型意味着Excel会根据类型正确设置单元格格式.
我可能看着这一切都错了!任何建议赞赏.
[quote]could do it manually,and horribly,by
adding all such attributes to the XSD
when I generate it,something like
this:[/quote]我恐怕这是你唯一的“适当”,XSD模式兼容的方式来做到这一点.
XSD可以有时被卷入作者,但它有助于保持安全:-)
渣子