2017-06-13 73 views
1

我非常(非常)对于XSD和XML来说一般,所以我已经开始通过使用我提议的XML文档中的在线工具生成我的XSD模式。该XML的部分原因是:type属性不能出现在simpleType或complexType属性中

<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属性可以不存在与任何简单类型或复合

不幸似乎也是合乎逻辑的,如果该类型是在元素中定义的,为什么complexType标签会进一步定义类型?

因此,我的问题的关键;如何在XSD中正确定义具有类型化值和类型化属性的元素?

我已经看到这个问题:The type attribute cannot be present with either simpleType or complexType但它只是不同,我有我的nbsb水平的XSD知识,根本不理解答案。

建议的重复Error: The element has a type attribute as well as an anonymous child type是关于具有嵌套元素的属性...此查询是关于一个元素上的一个属性,它不是嵌套的,但在属性和元素上都有类型(如果这是同一件事,我的知识水平太低了,所以我仍然需要进一步解释)

+0

*关于现在删除了来自OP的评论,表明重复的链接没有回答他的问题...... *您不能在单个元素上同时拥有“type”属性和匿名复杂类型,如重复链接所述。重复链接还显示了如何更正问题:使用命名或匿名类型 - 只是不能同时使用。你不明白哪部分? – kjhughes

+0

@kjhughes您似乎并没有考虑到我所说的XML对于XML来说很新颖。我确实知道“匿名类型”是什么意思,也不知道它是如何提及我所问的。重复的链接显示了如何嵌套一堆类型元素以满足一个人为的例子;它没有提到属性。 – Toby

+0

@kjhughes对不起,我将评论内容移到问题 – Toby

回答

1

您提到的链接解决了您无法同时指定xs:element/@type="xs:int"属性和xs:element/xs:complexType子元素(匿名类型)的直接错误。

剩下的解释是你如何真正能实现自己的目标写一个XSD,将验证XML,

<code base="16">2A</code> 

以下XSD将这样做:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="code"> 
    <xs:complexType> 
     <xs:simpleContent> 
     <xs:extension base="xs:string"> 
      <xs:attribute name="base" type="xs:int"/> 
     </xs:extension> 
     </xs:simpleContent> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 
+0

谢谢。实际上我发现https://www.w3schools.com/xml/schema_complex_text.asp在你发布的同一时间 - 很高兴得到确认,感谢坚持我的努力! – Toby