为什么这个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。
答案 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”)。
希望这有帮助!