如何 xsd 验证带长度限制的格式化文本

问题描述 投票:0回答:1

我无法创建 xsd 文件来验证评论元素。

  1. 元素“comment”可以包含文本和可选子元素
    <b>, <i>, <ul>
  2. 子元素可以嵌套并出现多次
  3. 评论内容必须有长度限制(60)

我能够满足 1. 和 2.,但如何添加长度限制?

非常感谢您的帮助! 安德烈亚斯

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="Test">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="comment" type="FormattedText" minOccurs="0" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <xs:complexType name="FormattedText" mixed="true">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="b" minOccurs="0" />
      <xs:element ref="i" minOccurs="0" />
      <xs:element ref="ul" minOccurs="0" />
    </xs:choice>
  </xs:complexType>

  <xs:complexType name="ULType">
    <xs:sequence>
      <xs:element 
        name="li" 
        minOccurs="1" 
        maxOccurs="unbounded">
        
        <xs:complexType mixed="true">
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element ref="b" minOccurs="0" />
            <xs:element ref="i" minOccurs="0" />
            <xs:element ref="ul" minOccurs="0" />
          </xs:choice>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  
  <xs:element name="b" type="FormattedText" />
  <xs:element name="i" type="FormattedText" />
  <xs:element name="ul" type="ULType" />
</xs:schema>

这是 xml 的示例:

<?xml version="1.0" encoding="UTF-8"?>
<Test>
  <comment>
    Abstellorte:
    <ul>
      <li>Hinter <b>To<i>r</i></b></li>
      <li>Am <i>Fenster</i></li>
    </ul>
  </comment>
</Test>
xml xsd
1个回答
0
投票

您可以在 XSD 1.1 中使用断言来执行此操作:

test="string-length(.) le 60"
。在 XSD 1.0 中无法完成。

© www.soinside.com 2019 - 2024. All rights reserved.