9.4. 字符串内置类型
字符串内置类型表示YANG中可读的字符串。 合法字符是Unicode和ISO/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