0

目前我正在使用 XSD for XHTML 处理 XML 模式定义。我的 XHTML 的结构如下。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<div id="AAA">// (Required, maxnumber = 1)
   <div id="BBB">//  (Required, maxnumber = 1)
      <div id="CCC">...</div>// (Optional)
      <div id="DDD">...</div>// (Optional)
      <div id="EEE">...</div>// (Required, maxnumber = 1)
      <div id="FFF" class="IIII">...</div>// (Required, maxnumber = 1)
   </div>
</div>
</body>
</html>

我需要检查 div 标签以了解我的 XHTML 的以下条件

  • 检查是否出现了所有必需的 div 标签?
  • 检查所有 div 标签是否按照示例代码中定义的顺序?
  • 检查类属性是否只有 IIII 或 22222 值

我真的很感谢你的帮助。

问候,

4

1 回答 1

1

我想你会很失望,知道 3 个要求中只有一个可以实现!我会尽量详细解释原因!

<div id="AAA"> // (Required, maxnumber = 1)
如何声明一个必需的元素:用 minOccurs = "1" 和 maxOccurs = "1"声明元素div(即使你没有明确定义 minOccurs 和 maxOccurs 默认值是 1,1。所以这是可选的)

<div id="CCC">...</div>// (Optional)
如何声明可选元素:使用 minOccurs="0" 声明元素 'div',使其外观为可选。

但是基于属性值无法验证元素的外观!不可能在同一父级下拥有与曾经需要和曾经可选的相同元素!
一种解决方法是例如使用 minOccurs = "3" 和 maxOccurs="10" 进行单一定义

<xs:element minOccurs="3" maxOccurs="10" name="div" type="div"/>

这将强制 Document 至少出现 3 个div元素并限制最多 10 个!您可以通过设置使其无限maxOccurs="unbounded"。这样您就可以验证是否存在最小数量的 div 元素!

回到你的问题:

1.检查是否所有需要的div标签都出现了?

我已经回答过了。

2.检查所有div标签是否按照示例代码中定义的顺序?

再一次,这在 XSD 中是不可能实现的!对同一元素有多个定义会使它变得模棱两可!

3.检查类属性是否有IIII或22222值

只有这样才能实现使用枚举列表定义的 simpleType..

例子:

  <xs:attribute name="class" type="ClassType" use="optional" />

这应该在元素/复杂类型之外:

  <xs:simpleType name="ClassType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="IIII"/>
      <xs:enumeration value="2222"/>
    </xs:restriction>
  </xs:simpleType>
于 2012-12-26T11:51:26.347 回答