首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XML模式验证用例

XML模式验证用例
EN

Stack Overflow用户
提问于 2011-08-05 00:02:47
回答 1查看 288关注 0票数 0

我有一个用于metas的简单XML格式

代码语言:javascript
复制
<?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进行验证。

到目前为止,我已经

代码语言:javascript
复制
<?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>

我尝试做的事情可以用模式来验证吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-11 04:14:06

因此,您希望meta元素上的type属性控制meta元素的内容。实现这一点的一种方法是:

  1. 让metaType为空类型
  2. 通过扩展从metaType创建新类型为每个类型元元素上的类型属性为xsi: possibility
  3. have
  4. 类型属性的值应标识正在使用的metaType的实际子类型

例如,您将meta_int定义为metaType的一个子类型。当您在那里定义value元素时,它将是xs:int类型。然后,您的XML中将包含:

代码语言:javascript
复制
<meta xsi:type="meta_int">
  <code>weight</code>
  <value>12</value>
</meta>

另一种方法是使用不同的元素名称,而不是类型属性(例如,meta_int元素)。然后,您可以使用选项组在各种meta_*元素之间进行选择。

另一种方法可能是使用断言,但这是XSD1.1的一个特性,它还没有正式发布(AFAIK)。

我不确定您在做什么,但我认为可以公平地说,在XSD中,元素名称通常对控制后面的内容最有用,而您正试图使用属性来实现这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6944718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档