【发布时间】:2017-06-13 15:41:15
【问题描述】:
总的来说,我对 XSD 和 XML 非常(非常)新手,所以我开始使用我提议的 XML 文档中的在线工具生成我的 XSD 模式。 XML 的一部分是:
<code base="16">2A</code>
工具为此生成的XSD是:
<xs:element name="code" type="xs:int">
<xs:complexType>
<xs:attribute name="base" type="xs:int"></xs:attribute>
</xs:complexType>
</xs:element>
这对我来说似乎很合乎逻辑;有一个名为code 的元素具有int 类型的值,该元素可以具有名称为base 的属性,其值也属于int 类型。
然而,当我在 Visual Studio 中打开它时,它抱怨 xs:element 标签,因为:
type 属性不能与 simpleType 或 complexType 一起出现
不幸的是,这似乎也是合乎逻辑的,如果在元素中定义了类型,为什么还要使用complexType 标签进一步定义类型?
这就是我问题的症结所在;如何在 XSD 中正确定义具有类型值和类型属性的元素?
我已经看到了这个问题:The type attribute cannot be present with either simpleType or complexType,但它的不同之处在于,以我对 XSD 的 n00b 级知识,我根本无法理解答案。
建议的重复Error: The element has a type attribute as well as an anonymous child type 是关于带有嵌套元素的属性...这个问题是关于一个元素上的属性,它不是嵌套的,但在属性和元素上都有类型(如果这是同一件事,我的水平知识太少,无法掌握,还需要进一步解释)
【问题讨论】:
-
关于现在从 OP 删除的评论,即重复链接不能回答他的问题... 您不能同时拥有
type属性和匿名复杂类型单个元素,如重复链接所述。重复的链接还显示了如何更正该问题:使用命名类型或匿名类型——只是不能同时使用两者。你不明白哪一部分? -
@kjhughes 您似乎没有考虑到我对 XML 很陌生,如前所述。我确实知道您所说的“匿名类型”是什么意思,也不知道它是如何指代我所问的。重复的链接显示了如何嵌套一堆类型化的元素来满足一个人为的例子;它没有提到属性。
-
@kjhughes 抱歉,我将评论内容移到问题中
-
您不能同时使用
xs:element/@type="xs:int"属性和xs:element/xs:complexType子元素(匿名类型);这些方法是相互排斥的。重复链接显示如何使用type属性或complexType子元素,这也正是您必须做的。 -
@kjhughes 好的,我看到
complexType与元素的type冲突,但对不起,我看不到如何为这两个属性值设置类型 和元素值。那里的答案似乎表明我应该嵌套另一个元素来保存具有属性的元素中的值......但这不是预期的,我不正确吗?
标签: xml types xsd attributes