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