XML Schema验证

时间:2009-08-24 19:31:38

标签: validation xsd

为什么这个xml架构不会验证? Visual Studio说simpleContent标记是无效标记。如果我然后删除该属性,则表示我的限制的基本类型未在http://www.w3.org/2001/XMLSchema

中定义
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >    
    <xs:complexType name="Person">
        <xs:attribute name="isProcessed" type="xs:boolean" />
        <xs:simpleContent>
            <xs:restriction base="xs:string">
                <xs:enumeration value="Male" />
                <xs:enumeration value="Female" />        
            </xs:restriction>
        </xs:simpleContent>    
    </xs:complexType>
</xs:schema>

@marc_s - 我曾尝试过代码按钮,但它一直隐藏在预览区域中的所有xml。我将空间放在那里,以便显示出来。

xml的最终结果应如下所示

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

没什么特别的。基本上我正在尝试创建一个带有属性的simpleType。但如果我正确理解W3,属性只能应用于complexTypes。所以我尝试在里面创建一个包含简单内容的complexType。

2 个答案:

答案 0 :(得分:1)

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

<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>

我不确定如何将其表达为单一类型定义。

答案 1 :(得分:1)

嗯,根据W3 Schools XML Schema Tutorial,您尝试做的事情在XML架构的上下文中是无效的。

您只能将<xs:restriction>应用于<xs:simpleType> - 而不是<xs:simpleContent>内的<xs:complexType>

<xs:simpleContent>可以包含<xs:extension>以扩展基本类型 - 但不是限制。

所以真正的问题是:你想在这里完成什么?目标是什么,XML想要验证的是什么?

马克

更新:

好的,要实现你想要的,试试这个 - 定义一个复杂的类型(为了拥有属性),它包含一个简单的内容(所以你可以拥有字符串值)并在简单中使用xs:extension内容 - 不是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”文件,添加了一个人工的<root>...</root>(因此它是一个有效的XML文档),然后我运行了微软xsd.exe工具可以从中创建XML模式(您也可以在Visual Studio 2008中执行相同操作 - 打开XML文件并从菜单中选择“XML&gt; Create Schema”)。

希望这有帮助!