在相同深度下具有相同名称的XSD元素

时间:2014-01-06 08:46:43

标签: xml xsd

我对此XSD代码段是否有效有疑问:

<xsd:element name="yolo" minOccurs="0"/>
<xsd:element name="yolo" />

示例XML:

<yolo />

感谢

2 个答案:

答案 0 :(得分:1)

快速回答,该代码段无效。

假设你把上面的片段放在下面的上下文中(为了清楚你的意思是同一个深度,因为@Janty对它感到困惑):

<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" xmlns="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:complexType name="test">
        <xsd:sequence>
            <xsd:element name="yolo" minOccurs="0"/>
            <xsd:element name="yolo" />         
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>

假设您尝试使用.NET XSD处理器,您将收到以下错误:

  

元素“http://tempuri.org/XMLSchema.xsd:yolo”的多重定义   导致内容模型变得模糊不清。内容模型必须是   形成为在验证元素信息项期间   序列,粒子直接,间接或隐含地包含   其中试图验证序列中的每个项目   可以在不检查内容的情况下唯一确定转弯   该项目的属性,没有任何有关项目的信息   在序列的其余部分。

如果您尝试使用基于Xerces的处理器......

  

cos-nonambig:“http://tempuri.org/XMLSchema.xsd”:yolo和   “http://tempuri.org/XMLSchema.xsd”:yolo(或来自他们的元素)   替代组)违反“独特粒子归因”。中   针对此模式的验证,将为这些模式创建歧义   两个粒子。

XSD规范描述了cos-nonambig here(或多或少微软的实现错误消息)。

然而,为了增加混淆,一些处理器允许你覆盖UPA行为(特定或间接),所以很可能碰巧尝试相同并且没有错误...... Microsoft使用{{3和Xerces及其EnableUpaCheck功能。

Microsoft文档适用于您的情况......这是他们的示例...匹配,不是吗?

<xs:sequence>
    <xs:element name="A" type="xs:string"/>
    <xs:element name="B" type="xs:string" minOccurs="0"/>
    <xs:element name="B" type="xs:string"/>
</xs:sequence>

答案 1 :(得分:0)

<yolo />

你应该有以下架构

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="yolo" type="xs:string"/>
</xs:schema>

请使用在线工具生成xml或xml模式到架构为XSD2XMLXML2XSD