我为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>
我想让架构考虑我的元类型,并根据它是一个int bool日期或文本进行验证。
到目前为止我已经
了<?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>
我正在尝试用模式进行验证吗?
答案 0 :(得分:0)
因此,您希望元元素上的type属性控制元元素的内容。一种方法是:
E.g。您将meta_int定义为metaType的子类型。在那里定义value元素时,它将是xs:int类型。那么你将拥有XML:
<meta xsi:type="meta_int">
<code>weight</code>
<value>12</value>
</meta>
另一种方法是使用不同的元素名称而不是type属性(例如,meta_int元素)。然后,您可以使用选择组在各种meta_ *元素之间进行选择。
另一种方法可能是使用断言,但这是XSD 1.1的一个功能,尚未正式(AFAIK)。
我不确定你在做什么,但我认为可以公平地说,在XSD中,元素名称通常是控制后续内容最有用的,而你试图使用属性来做到这一点