2012-02-15 140 views
2

道歉,如果这是一个愚蠢的问题,我到现在还没有真正用xml做过任何事情。xsd type =“anySimpleType”属性

我想能够将一些xml反序列化成类型为object的属性的类。此物业可能是int,​​或string。在xml中,我希望将此属性定义为属性。我本来期望我的XSD看起来是这样的:

<xsd:complexType name="MyClass"> 
    <xsd:attribute name="MyProperty" type="xsd:anySimpleType" /> 
</xsd:complexType> 

但是,Visual Studio的智能感知未列出选项,“XSD:anySimpleType”。这是intellisense的问题,还是我在做一些固有的错误?

+0

http://publib.boulder.ibm.com/infocenter/dmndhelp/v6r2mx/index.jsp?topic=/com.ibm.websphere.wps.620.doc/doc/cbo_usinganysimpl.html – 2012-02-15 05:25:40

回答

4

尽管拥有xs:anySimpleType类型的属性是合法的,但我会避免它,并使用xs:string来代替。这是因为该规范留下了许多关于这种属性应该如何表现的问题。使用枚举或正则表达式来限制它是不可能的,定义非常差,如果你在身份约束中使用它,等等。验证和xs:string完全一样,但其他方面的行为是相当奇怪,可能会因实现而有所不同。

有人可能会争辩说,如果您希望稍后定义诸如string,int和URI等子类型,则xs:anySimpleType有意义。但这是我能想到的唯一情况。

3

xsd:anySimpleType(和xsd:anyType)是特殊的所谓的ur-type定义(前者是简单的ur类型);顺便说一句,当涉及到XSD数据类型时,我总是指出this diagram

只是这个特殊的,我相信是这些类型不显示在Intellisense中的原因的一部分。我想另一个原因是它是默认分配的类型;换句话说,对于你的属性,如果你没有设置类型,它将是anySimpleType无论如何。但是,我也承认这种解释不适用于其他编辑器 - Eclipse就是其中之一;你可以在Intellisense中获得所有这些类型,不会有任何问题...

+0

它仍然是有效的XSD? – ajbeaven 2012-02-15 19:27:12

+0

是的,这是完全有效的。 – 2012-02-15 19:50:57