我有一个用于metas的简单XML格式
<?xml version="1.0" encoding="utf-8"?>
<metas>
<meta type="date">
<code>storage_date</code>
<value>12-02-1989</value>
</meta>
<meta type="int">
<code>weight</code>
<value>12</value>
</meta>
<meta type="bool">
<code>foo</code>
<value>true</value>
</meta>
<meta type="text">
<code>bar</code>
<value>Hello world</value>
</meta>
</metas>我想让schema考虑到我的meta类型,并根据它是int、bool、date还是text进行验证。
到目前为止,我已经
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="metas" type="metasType" />
<xsd:complexType name="metasType">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="meta" type="metaType" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="metaType">
???
</xsd:schema>我尝试做的事情可以用模式来验证吗?
发布于 2011-08-11 04:14:06
因此,您希望meta元素上的type属性控制meta元素的内容。实现这一点的一种方法是:
例如,您将meta_int定义为metaType的一个子类型。当您在那里定义value元素时,它将是xs:int类型。然后,您的XML中将包含:
<meta xsi:type="meta_int">
<code>weight</code>
<value>12</value>
</meta>另一种方法是使用不同的元素名称,而不是类型属性(例如,meta_int元素)。然后,您可以使用选项组在各种meta_*元素之间进行选择。
另一种方法可能是使用断言,但这是XSD1.1的一个特性,它还没有正式发布(AFAIK)。
我不确定您在做什么,但我认为可以公平地说,在XSD中,元素名称通常对控制后面的内容最有用,而您正试图使用属性来实现这一点。
https://stackoverflow.com/questions/6944718
复制相似问题