Validation XML模式验证

Validation XML模式验证,validation,xsd,Validation,Xsd,为什么这个xml模式不能验证?VisualStudio说simpleContent标记是无效的标记。如果我删除了该属性,它会说我的限制的基类型在中未定义 @marc_s-我尝试了“代码”按钮,但它一直在预览区域隐藏所有xml。我把空间放在那里,这样它就会出现 xml的最终结果应该如下所示 <person isprocessed="True" >Male</person> 男性 没什么特别的。本质上,我试图创建一个带有属性的simpleType。但是如果我正确理解W

为什么这个xml模式不能验证?VisualStudio说simpleContent标记是无效的标记。如果我删除了该属性,它会说我的限制的基类型在中未定义


@marc_s-我尝试了“代码”按钮,但它一直在预览区域隐藏所有xml。我把空间放在那里,这样它就会出现

xml的最终结果应该如下所示

<person isprocessed="True" >Male</person>
男性

没什么特别的。本质上,我试图创建一个带有属性的simpleType。但是如果我正确理解W3,属性只能应用于complexTypes。因此,我尝试创建一个包含简单内容的复杂类型。

我建议将您的类型分为两种不同的类型。它更清晰,并且正确地验证了:

<xs:complexType name="Person">
    <xs:simpleContent>
        <xs:extension base="Gender">
            <xs:attribute name="isProcessed" type="xs:boolean" />
        </xs:extension>
    </xs:simpleContent>    
</xs:complexType>

<xs:simpleType name="Gender">
    <xs:restriction base="xs:string">
        <xs:enumeration value="Male" />
        <xs:enumeration value="Female" />        
    </xs:restriction>
</xs:simpleType>

我不知道如何将其表示为单个类型定义。

好吧,根据,在XML模式的上下文中,您试图做的是无效的

您只能将
应用于
,而不能应用于
内部的

可以包含扩展基类型的
,但不能包含限制

所以问题是:你想在这里实现什么??目标是什么,要验证的XML应该是什么样子

马克

更新:

好的,为了实现您想要的,请尝试以下操作-定义一个复杂类型(为了拥有该属性),它包含一个简单内容(因此您可以拥有字符串值),并在简单内容中使用xs:扩展名-而不是xs:限制。因此,基本上您定义了一个复杂类型,它扩展了一个简单的字符串内容,并添加了一个属性:

      <xs:complexType>
        <xs:simpleContent>
          <xs:extension base="xs:string">
            <xs:attribute name="isprocessed" type="xs:string" />
          </xs:extension>
        </xs:simpleContent>
      </xs:complexType>

为了做到这一点,我只是简单地创建了一个包含您想要的内容的“test.xml”文件,在is周围添加了一个人工的
(因此它是一个有效的xml文档),然后在其上运行Microsoft
xsd.exe
工具,从中创建一个xml模式(您也可以在Visual Studio 2008中执行相同的操作-打开一个xml文件并选择菜单中的“XML>创建模式”)


希望这有帮助!

查看您试图使用此架构验证的源xml会很有帮助。此外,此架构文件中可能不需要有空格。例如:应该读取标记而不是。这是问题中的复制/粘贴问题吗?修复了错误空格-@Matt:需要突出显示您的代码或XML示例,然后单击工具栏中的“代码”按钮—上面有00010101011010101101101101101的按钮—男性/女性限制发生了什么?这肯定不是可以丢弃的模式类型的一部分?是的—为此,需要有一个基于您示例中的限制的简单类型
      <xs:complexType>
        <xs:simpleContent>
          <xs:extension base="xs:string">
            <xs:attribute name="isprocessed" type="xs:string" />
          </xs:extension>
        </xs:simpleContent>
      </xs:complexType>