9.4. 字符串内置类型

字符串内置类型表示YANG中可读的字符串。 合法字符是UnicodeISO/IEC 10646 [ISO.10646]字符,包括制表符,回车符和换行符,但不包括其他C0控制字符,代理块和非字符。 字符串语法由第14节中的规则“yang-string”正式定义。

9.4.1. 词汇表示

XML编码中,字符串值在词法上表示为字符数据。

9.4.2. 规范形式

规范形式与词汇表示相同。 字符串值的Unicode规范化没有执行。

9.4.3. 限制

一个字符串可以用“length”(9.4.4节)和“pattern”(9.4.5节)语句进行限制。

9.4.4. “length”声明

length”语句是“type”语句的一个可选子语句,它将长度表达式字符串作为参数。它用于限制内置类型“string”和“binary”或从它们派生的类型。

length”语句限制字符串中的Unicode字符数。

长度范围由一个显式值或一个下界,两个连续的点“..”和一个上界组成。可以给出多个值或范围,用“|”分隔。长度限制值不能是负数。如果给出了多个值或范围,它们都必须是不相交的,并且必须按照升序排列。如果长度限制应用于已经受长度限制的类型,则新的限制必须是等同限制或更多限制的,即,提高下限,减少上限,移除显式长度值或范围或将范围拆分成具有中间间隙的多个范围。长度值是一个非负整数或特殊值“min”或“max”中的一个。 “min”和“max”分别表示被限制类型可接受的最小和最大长度。实现不需要支持大于18446744073709551615的长度值。

长度表达式语法在第14节中由规则“length-arg”正式定义。

9.4.4.1. length的子语句

+---------------+---------+-------------+
| substatement  | section | cardinality |
+---------------+---------+-------------+
| description   | 7.21.3  | 0..1        |
| error-app-tag | 7.5.4.2 | 0..1        |
| error-message | 7.5.4.1 | 0..1        |
| reference     | 7.21.4  | 0..1        |
+---------------+---------+-------------+

9.4.5. “pattern”声明

pattern”语句是“type”语句的一个可选子语句,它使用[XSD-TYPES]中定义的正则表达式字符串作为参数。 它用于将内置类型“string”或从“string”派生的类型限制为与该模式匹配的值。

如果类型具有多个“pattern”语句,则表达式将被组合在一起。即,所有这些表达式必须匹配。

如果将模式限制应用于已受模式限制的类型,则除了新模式之外,值必须与基本类型中的所有模式匹配。

9.4.5.1. pattern的子语句

+---------------+---------+-------------+
| substatement  | section | cardinality |
+---------------+---------+-------------+
| description   | 7.21.3  | 0..1        |
| error-app-tag | 7.5.4.2 | 0..1        |
| error-message | 7.5.4.1 | 0..1        |
| modifier      | 9.4.6   | 0..1        |
| reference     | 7.21.4  | 0..1        |
+---------------+---------+-------------+

9.4.6. “modifier”声明

modifier”语句是“pattern”语句的一个可选子语句,它以字符串“invert-match”作为参数。

如果一个模式存在“反向匹配(invert-match)”修饰符,则类型被限制为与模式不匹配的值。

9.4.7. 使用示例

用下面的typedef

typedef my-base-str-type {
  type string {
    length "1..255";
  }
}

以下改进是合法的:

type my-base-str-type {
  // legal length refinement
  length "11 | 42..max"; // 11 | 42..255
}

而下面的改进是非法的:

type my-base-str-type {
  // illegal length refinement
  length "1..999";
}

使用以下类型:

type string {
  length "0..4";
  pattern "[0-9a-fA-F]*";
}

以下字符串匹配:

AB          // legal
9A00        // legal

和以下字符串不匹配:

00ABAB      // illegal, too long
xx00        // illegal, bad characters

使用以下类型:

type string {
  length "1..max";
  pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*';
  pattern '[xX][mM][lL].*' {
    modifier invert-match;
  }
}

以下字符串匹配:

enabled     // legal

和以下字符串不匹配:

10-mbit     // illegal, starts with a number
xml-element // illegal, starts with illegal sequence

results matching ""

    No results matching ""