如何在 RELAX NG 中定义带有枚举字符串的类型?

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

仍在学习 RELAX NG(想知道我是否应该学习 XSD),我的元素层次结构基本正确,所以我正在研究内容:

一个元素(

Unit
)使用枚举类型(一组固定的字符串),像这样

字节|千字节 |兆字节 |技嘉|太字节

所以我想在RELAX NG中定义相应的类型,但无法应用

datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
中的规则。 到目前为止我有这个:

  <define name="DT.Unit">
    <a:documentation>Data Type Unit: A fixed set of strings</a:documentation>
    <data datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
          type="normalizedString">
      <!-- how to define the set of strings allowed? -->
    </data>
  </define>

我应该使用

pattern
,还是可以用其他方式枚举字符串?

我不知道如何将 XSD 定义应用于 RELAX NG。

string types enumeration relaxng
1个回答
0
投票

由于问题在一周内没有答案,并且被否决而没有任何评论,我尝试自己找出答案:

看起来

<data datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" type="normalizedString">
并不会阻止您通过
<param name="value">
添加单个值,这意味着XSD的
<enumeration value='--01-01'>
在RELAX NG中似乎表示为
<param value='--01-01'>

当我尝试时,它被接受了:

  <define name="DT.Size">
    <a:documentation>Data Type Size: A fixed set of strings</a:documentation>
    <data datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
          type="normalizedString">
      <param name="value">Byte</param>
      <param name="value">KiloByte</param>
      <param name="value">MegaByte</param>
      <param name="value">GigaByte</param>
      <param name="value">TeraByte</param>
    </data>
  </define>
© www.soinside.com 2019 - 2024. All rights reserved.