The following is a description of the elements, types, and attributes that compose the IOS-XE specific tests found in Open Vulnerability and Assessment Language (OVAL). Each test is an extension of the standard test element defined in the Core Definition Schema. Through extension, each test inherits a set of elements and attributes that are shared amongst all OVAL tests. Each test is described in detail and should provide the information necessary to understand what each element and attribute represents. This document is intended for developers and assumes some familiarity with XML. A high level description of the interaction between the different tests and their relationship to the Core Definition Schema is not outlined here. The OVAL Schema is maintained by the OVAL Community. For more information, including how to get involved in the project and how to submit change requests, please visit the OVAL website at http://oval.cisecurity.org. Thanks to Omar Santos and Panos Kampanakis of Cisco for providing this test. IOS-XE Definition 5.11.1:1.2 11/30/2016 09:00:00 AM Copyright (c) 2016, Center for Internet Security. All rights reserved. The contents of this file are subject to the terms of the OVAL License located at https://oval.cisecurity.org/terms. See the OVAL License for the specific language governing permissions and limitations for use of this schema. When distributing copies of the OVAL Schema, this license header must be included. The global test is used to check for the existence of a particular line in the IOS-XE config file under the global context. It extends the standard TestType as defined in the oval-definitions-schema and one should refer to the TestType description for more information. The required object element references a global_object and the optional state element specifies the data to check. global_test global_object global_state global_item - the object child element of a global_test must reference a global_object - the state child element of a global_test must reference a global_state The global_object element is used by a global test to define the object to be evaluated. For the most part this object checks for existence and is used without a state comparision. Each object extends the standard ObjectType as defined in the oval-definitions-schema and one should refer to the ObjectType description for more information. The common set element allows complex objects to be created using filters and set logic. Again, please refer to the description of the set element in the oval-definitions-schema. State referenced in filter for '' is of the wrong type. The global_command entity identifies a specific line in the IOS-XE config file under the global context. The global_state element defines the different information that can be found in the IOS-XE config file under the global context. Please refer to the individual elements in the schema for more details about what each represents. The global_command entity identifies a specific line in the IOS-XE config file under the global context. The line test is used to check the properties of specific output lines from a SHOW command, such as show running-config. It extends the standard TestType as defined in the oval-definitions-schema and one should refer to the TestType description for more information. The required object element references a line_object and the optional state element specifies the data to check. line_test line_object line_state line_item - the object child element of a line_test must reference a line_object - the state child element of a line_test must reference a line_state The line_object element is used by a line test to define the object to be evaluated. Each object extends the standard ObjectType as defined in the oval-definitions-schema and one should refer to the ObjectType description for more information. The common set element allows complex objects to be created using filters and set logic. Again, please refer to the description of the set element in the oval-definitions-schema. A line object consists of a show_subcommand entity that is the name of a SHOW sub-command to be tested. State referenced in filter for '' is of the wrong type. The name of a SHOW sub-command. The line_state element defines the different information that can be used to evaluate the result of a specific SHOW sub-command. This includes the name of ths sub-command and the corresponding config line. Please refer to the individual elements in the schema for more details about what each represents. The name of the SHOW sub-command. The value returned from by the specified SHOW sub-command. The version_test is used to check the version of the IOS-XE operating system. It extends the standard TestType as defined in the oval-definitions-schema and one should refer to the TestType description for more information. The required object element references a version_object and the optional state element specifies the data to check. version_test version_object version_state version_item - the object child element of a version_test must reference a version_object - the state child element of a version_test must reference a version_state The version_object element is used by a version_test to define the different version information associated with an IOS-XE system. There is actually only one object relating to version and this is the system as a whole. Therefore, there are no child entities defined. Any OVAL Test written to check version will reference the same version_object which is basically an empty object element. The version_state element defines the version information held within a Cisco IOS-XE Train. A Cisco IOS-XE train is a vehicle for delivering releases that evolve from a common code base. The platform that is running the IOS-XE software. For example if could be asr1000. 5.11.2:1.0 This entity has been deprecated because it cannot be reliably collected. Warning: DEPRECATED ENTITY: . This entity has been deprecated because it cannot be reliably collected. The routing processor running the IOS-XE software. 5.11.2:1.0 This entity has been deprecated because it cannot be reliably collected. Warning: DEPRECATED ENTITY: . This entity has been deprecated because it cannot be reliably collected. The consolidated IOS-XE packages in the image. For example it could be adventservicesk9. 5.11.2:1.0 This entity has been deprecated because it cannot be reliably collected. Warning: DEPRECATED ENTITY: . This entity has been deprecated because it cannot be reliably collected. The entire IOS-XE version string, for example, '03.13.02.S'. The major version piece of the version string. The value is an integer, and in the example 03.13.02.S the major_release is '3' The minor release piece of the version string. The value is an integer, and in the example 03.13.02.S the release is '13' The rebuild piece of the version string. The value is an integer, and in the example 03.13.02.S the rebuild is '2' The train piece of the version string. The value is a string, and in the example 03.13.02.S the train is 'S' The IOS release the IOS-XE was derived from. The value is a string and in the example ASR1000rp1-ipbasek9.03.04.02.122-33.SR.bin the ios_release version is '122-33' 5.11.2:1.0 This entity has been deprecated because it is irrelevant to the IOS-XE version. Warning: DEPRECATED ENTITY: . This entity has been deprecated because it is irrelevant to the IOS-XE version. The IOS release the IOS-XE was derived from. The value is an integer and in the example ASR1000rp1-ipbasek9.03.04.02.122-33.SR.bin the ios_release version is 'SR' 5.11.2:1.0 This entity has been deprecated because it is irrelevant to the IOS-XE version. Warning: DEPRECATED ENTITY: . This entity has been deprecated because it is irrelevant to the IOS-XE version. The interface test is used to check for the existence of a particular interface on the Cisco IOS-XE device. It extends the standard TestType as defined in the oval-definitions-schema and one should refer to the TestType description for more information. The required object element references a interface_object and the optional state element specifies the data to check. interface_test interface_object interface_state interface_item - the object child element of an interface_test must reference an interface_object - the state child element of an interface_test must reference an interface_state The interface_object element is used by an interface_test to define the object to be evaluated. Each object extends the standard ObjectType as defined in the oval-definitions-schema and one should refer to the ObjectType description for more information. The common set element allows complex objects to be created using filters and set logic. Again, please refer to the description of the set element in the oval-definitions-schema. An interface_object consists of a name entity that is the name of the IOS-XE interface to be tested. The interface name. The interface_state element defines the different information that can be used to evaluate the result of a specific IOS-XE interface. This includes the name, status, and address information about the interface. Please refer to the individual elements in the schema for more details about what each represents. The interface name. Directed broadcast command enabled on the interface. The default is false. Proxy arp enabled on the interface. The default is true. Interface is shut down. The interface hardware (MAC) address. The interface IPv4 address and mask. This element should only allow 'ipv4_address' of the oval:SimpleDatatypeEnumeration. The interface IPv6 address and mask. This element should only allow 'ipv6_address' of the oval:SimpleDatatypeEnumeration. The ingress or egress IPv4 ACL name applied on the interface. The ingress or egress IPv6 ACL name applied on the interface. The crypto map name applied to the interface. The IPv4 uRPF command under the interface. The IPv6 uRPF command under the interface. The uRPF command under the interface. 5.11.1:1.1 This entity has been deprecated because it was replaced by the ipv4_urpf_command and ipv6_urpf_command entities. Warning: DEPRECATED ENTITY: . This entity has been deprecated because it was replaced by the ipv4_urpf_command and ipv6_urpf_command entities. The switchport trunk encapsulation option configured on the interface (if applicable). The switchport mode option configured on the interface (if applicable). The trunk native vlan configured on the interface (if applicable). The access vlan configured on the interface (if applicable). The vlans that are trunked configured on the interface (if applicable). The vlans that are pruned from the trunk (if applicable). The switchport port-security commands configured on the interface (if applicable). The section test is used to check the properties of specific output lines from a configuration section. section_test section_object section_state section_item - the object child element of a section_test must reference a section_object - the state child element of a section_test must reference a section_state The section_object element is used by a section test to define the object to be evaluated. Each object extends the standard ObjectType as defined in the oval-definitions-schema and one should refer to the ObjectType description for more information. The common set element allows complex objects to be created using filters and set logic. Again, please refer to the description of the set element in the oval-definitions-schema. A section object consists of a section_command entity that is the name of a section command to be tested. State referenced in filter for '' is of the wrong type. The name of a section command. The section_state element defines the different information that can be used to evaluate the result of a specific section command. This includes the name of ths section_command and the corresponding config lines. Please refer to the individual elements in the schema for more details about what each represents. The name of the section command. The value returned with all config lines of the section. The value returned with one config line of the section at a time. The router test is used to check the properties of specific output lines from a router configurated instance in IOS-XE. router_test router_object router_state router_item - the object child element of a router_test must reference a router_object - the state child element of a router_test must reference a router_state The router_object element is used by a router test to define the object to be evaluated. Each object extends the standard ObjectType as defined in the oval-definitions-schema and one should refer to the ObjectType description for more information. The common set element allows complex objects to be created using filters and set logic. Again, please refer to the description of the set element in the oval-definitions-schema. A router object consists of a router protocol and router identifier entity. State referenced in filter for '' is of the wrong type. The routing protocol of the router instance. The IOS-XE router id. The router_state element defines the different information that can be used to evaluate the result of a specific router command. This includes the protocol of the router instance, the id, the networks, bgp neighbor, ospf authentication area commands and the corresponding config lines. Please refer to the individual elements in the schema for more details about what each represents. The routing protocol of the router instance. If there are more than one router configurations, for example ospf instances, different objects should be created for each. The IOS-XE router id The subnet in the network command of the router instance. The area can be included in the string for OSPF. The BGP neighbors, if applicable. The OSPF area that is authenticated, if applicable. The value returned with all config lines of the router instance. The bgpneighbor test is used to check the bgp neighbpr properties of bgp instances instances in IOS. bgpneighbor_test bgpneighbor_object bgpneighbor_state bgpneighbor_item - the object child element of a bgpneighbor_test must reference a bgpneighbor_object - the state child element of a bgpneighbor_test must reference a bgpneighbor_state The bgpneighbor_object element is used by a bgpneighbor test to define the object to be evaluated. Each object extends the standard ObjectType as defined in the oval-definitions-schema and one should refer to the ObjectType description for more information. The common set element allows complex objects to be created using filters and set logic. Again, please refer to the description of the set element in the oval-definitions-schema. A bgpneighbor object consists of a neighbor entity. State referenced in filter for '' is of the wrong type. The bgp neighbor. The bgpneighbor_state element defines the different information that can be used to evaluate the result of a bgp neighbor configuration. This includes the neighbor and the password option, if configured. Please refer to the individual elements in the schema for more details about what each represents. The bgp neighbor. The bgp authentication password, if configured. If Encryption type is configured it should be included in the password string. For example '0 cisco123'. The routing protocol authentication interface test is used to check the properties of routing protocol authentication configured under interfaces in IOS. routingprotocolauthintf_test routingprotocolauthintf_object routingprotocolauthintf_state routingprotocolauthintf_item - the object child element of a routingprotocolauthintf_test must reference a routingprotocolauthintf_object - the state child element of a routingprotocolauthintf_test must reference a routingprotocolauthintf_state The routingprotocolauthintf_object element is used by a routingprotocolauthintf test to define the object to be evaluated. Each object extends the standard ObjectType as defined in the oval-definitions-schema and one should refer to the ObjectType description for more information. The common set element allows complex objects to be created using filters and set logic. Again, please refer to the description of the set element in the oval-definitions-schema. A routingprotocolauthintf object consists of an interface and the routing protocol that is authenticated entity. State referenced in filter for '' is of the wrong type. The interface name. The routing protocol. The routingprotocolauthintf_state element defines the different information that can be used to evaluate the result of a specific routing protocol interface authentication configurations. This includes the interface, the protocol, the id, the authentication type, the ospf area, the key chain command and the corresponding config lines. Please refer to the individual elements in the schema for more details about what each represents. The interface name. The routing protocol. The routing protocol id, if applicable. The routing protocol authentication type. The OSPF area that is authenticated, if applicable. The name of the key chain, if applicable. The acl test is used to check the properties of specific output lines from an ACL configuration. acl_test acl_object acl_state acl_item - the object child element of a acl_test must reference a acl_object - the state child element of a acl_test must reference a acl_state The acl_object element is used by an acl test to define the object to be evaluated. Each object extends the standard ObjectType as defined in the oval-definitions-schema and one should refer to the ObjectType description for more information. The common set element allows complex objects to be created using filters and set logic. Again, please refer to the description of the set element in the oval-definitions-schema. An acl object consists of a an acl name and an IP version entity that is the name and the IP protocol version of the access-list to be tested. State referenced in filter for '' is of the wrong type. The name of the ACL. The IP version of the ACL. The acl_state element defines the different information that can be used to evaluate the result of a specific ACL configuration. This includes the name of ths ACL and the corresponding config lines. Please refer to the individual elements in the schema for more details about what each represents. The name of the ACL. The IP version of the ACL. The feature where the ACL is used. The name of where the ACL is used. For example if use is 'INTERFACE', use_in will be the name of the interface. The direction the ACL is applied on an interface. The value returned with all config lines of the ACL. The value returned with one ACL config line at a time. The snmphost test is used to check the properties of specific output lines from an SNMP configuration. snmphost_test snmphost_object snmphost_state snmphost_item - the object child element of an snmphost_test must reference an snmphost_object - the state child element of an snmphost_test must reference an snmphost_state The snmphost_object element is used by an snmphost test to define the object to be evaluated. Each object extends the standard ObjectType as defined in the oval-definitions-schema and one should refer to the ObjectType description for more information. The common set element allows complex objects to be created using filters and set logic. Again, please refer to the description of the set element in the oval-definitions-schema. A snmphost object consists of a host entity that is the host of the 'snmp host' IOS-XE command to be tested. State referenced in filter for '' is of the wrong type. The SNMP host address or hostname. The snmphost_state element defines the different information that can be used to evaluate the result of a specific 'snmp host' IOS-XE command. This includes the host and the corresponding options. Please refer to the individual elements in the schema for more details about what each represents. The SNMP host address or hostname. The community string or SNMPv3 user configured for the host. The SNMP version. The SNMPv3 security configured for the host. The SNMP traps configured. The snmpcommunity test is used to check the properties of specific output lines from an SNMP configuration. snmpcommunity_test snmpcommunity_object snmpcommunity_state snmpcommunity_item - the object child element of an snmpcommunity_test must reference an snmpcommunity_object - the state child element of an snmpcommunity_test must reference an snmpcommunity_state The snmpcommunity_object element is used by an snmpcommunity test to define the object to be evaluated. Each object extends the standard ObjectType as defined in the oval-definitions-schema and one should refer to the ObjectType description for more information. The common set element allows complex objects to be created using filters and set logic. Again, please refer to the description of the set element in the oval-definitions-schema. An snmpcommunity object consists of a community name entity to be tested. State referenced in filter for '' is of the wrong type. The SNMP community name. The snmpcommunity_state element defines the different information that can be used to evaluate the result of a specific 'snmp community' IOS-XE command. This includes the community name and the corresponding options. Please refer to the individual elements in the schema for more details about what each represents. The SNMP community name. The view that restricts the OIDs of this community. The read-write privileges of the community. The IPv4 ACL name applied to the community. The IPv6 ACL name applied to the community. The snmpuser test is used to check the properties of specific output lines from an SNMP user configuration. snmpuser_test snmpuser_object snmpuser_state snmpuser_item - the object child element of an snmpuser_test must reference an snmpuser_object - the state child element of an snmpuser_test must reference an snmpuser_state The snmpuser_object element is used by an snmpuser test to define the object to be evaluated. Each object extends the standard ObjectType as defined in the oval-definitions-schema and one should refer to the ObjectType description for more information. The common set element allows complex objects to be created using filters and set logic. Again, please refer to the description of the set element in the oval-definitions-schema. A snmpuser object consists of a name entity that is the name of the SNMP user to be tested. State referenced in filter for '' is of the wrong type. The SNMP user name. The snmpuser_state element defines the different information that can be used to evaluate the result of a specific 'show snmp user' IOS-XE command. This includes the user name and the corresponding options. Please refer to the individual elements in the schema for more details about what each represents. The SNMP user name. The SNMP group the user belongs to. The SNMP version of the user. The IPv4 ACL name applied to the user. The IPv6 ACL name applied to the user. The SNMP encryption type for the user (for SNMPv3). The SNMP authentication type for the user (for SNMPv3). The snmpgroup test is used to check the properties of specific output lines from an SNMP group configuration. snmpgroup_test snmpgroup_object snmpgroup_state snmpgroup_item - the object child element of an snmpgroup_test must reference an snmpgroup_object - the state child element of an snmpgroup_test must reference an snmpgroup_state The snmpgroup_object element is used by an snmpgroup test to define the object to be evaluated. Each object extends the standard ObjectType as defined in the oval-definitions-schema and one should refer to the ObjectType description for more information. The common set element allows complex objects to be created using filters and set logic. Again, please refer to the description of the set element in the oval-definitions-schema. A snmpgroup object consists of a name entity that is the name of the SNMP group to be tested. State referenced in filter for '' is of the wrong type. The SNMP group name. The snmpgroup_state element defines the different information that can be used to evaluate the result of a specific 'snmp-server group' IOS-XE command. This includes the user name and the corresponding options. Please refer to the individual elements in the schema for more details about what each represents. The SNMP group name. The SNMP version of the group. The SNMPv3 security configured for the group. The IPv4 ACL name applied to the group. The IPv6 ACL name applied to the group. The SNMP read view applied to the group. The SNMP write view applied to the group. The SNMP notify view applied to the group. The snmpview test is used to check the properties of specific output lines from an SNMP view configuration. snmpview_test snmpview_object snmpview_state snmpview_item - the object child element of an snmpview_test must reference an snmpview_object - the state child element of an snmpview_test must reference an snmpview_state The snmpview_object element is used by an snmpview test to define the object to be evaluated. Each object extends the standard ObjectType as defined in the oval-definitions-schema and one should refer to the ObjectType description for more information. The common set element allows complex objects to be created using filters and set logic. Again, please refer to the description of the set element in the oval-definitions-schema. A snmpview object consists of a name entity that is the name of the SNMP view to be tested. State referenced in filter for '' is of the wrong type. The SNMP view name. The snmpview_state element defines the different information that can be used to evaluate the result of a specific 'snmp-server view' IOS-XE command. This includes the view name and the corresponding options. Please refer to the individual elements in the schema for more details about what each represents. The SNMP view name. The SNMP MIB family of the view. It is true if the included option is used in the view. The EntityObjectAccessListIPVersionType complex type restricts a string value to a specific set of values: IPV4, IPV6. These values describe if an ACL is for IPv4 or IPv6 in a Cisco IOS-XE configuration. The empty string is also allowed to support empty element associated with variable references. Note that when using pattern matches and variables care must be taken to ensure that the regular expression and variable values align with the enumerated values. The empty string value is permitted here to allow for empty elements associated with variable references. The EntityObjectRoutingProtocolType complex type restricts a string value to a specific set of values: EIGRP, OSPF, BGP, RIP, RIPV2, ISIS. These values describe the routing protocol used in a Cisco IOS-XE configuration. The empty string is also allowed to support empty element associated with variable references. Note that when using pattern matches and variables care must be taken to ensure that the regular expression and variable values align with the enumerated values. The empty string value is permitted here to allow for empty elements associated with variable references. The EntityStateTrunkEncapType complex type restricts a string value to a specific set of values: DOT1Q, ISL, NEGOTIATE. These values describe the interface trunk encapsulation types on an interfaces in IOS. The empty string is also allowed to support empty element associated with variable references. Note that when using pattern matches and variables care must be taken to ensure that the regular expression and variable values align with the enumerated values. The empty string value is permitted here to allow for empty elements associated with variable references. The EntityStateSwitchportModeType complex type restricts a string value to a specific set of values: DYNAMIC, TRUNK, ACCESS. These values describe the interface switchport mode types in IOS. The empty string is also allowed to support empty element associated with variable references. Note that when using pattern matches and variables care must be taken to ensure that the regular expression and variable values align with the enumerated values. The empty string value is permitted here to allow for empty elements associated with variable references. The EntityStateRoutingProtocolType complex type restricts a string value to a specific set of values: EIGRP, OSPF, BGP, RIP, RIPV2, ISIS. These values describe the routing protocol used in a Cisco IOS-XE configuration. The empty string is also allowed to support empty element associated with variable references. Note that when using pattern matches and variables care must be taken to ensure that the regular expression and variable values align with the enumerated values. The empty string value is permitted here to allow for empty elements associated with variable references. The EntityStateRoutingAuthTypeStringType complex type restricts a string value to a specific set of values: CLEARTEXT, MESSAGE_DIGEST. These values describe the routing protocol authentication types used in a Cisco IOS-XE configuration. The empty string is also allowed to support empty element associated with variable references. Note that when using pattern matches and variables care must be taken to ensure that the regular expression and variable values align with the enumerated values. 5.11.2:1.0 The NULL authentication area type is never declared in an interface ip ospf command context. This RoutingAuthTypeStringType enumeration value has been deprecated and may be removed in a future version of the language. DEPRECATED ELEMENT VALUE IN: routingprotocolauthintf_state ELEMENT VALUE: The empty string value is permitted here to allow for empty elements associated with variable references. The EntityStateSNMPVersionStringType complex type restricts a string value to a specific set of values: 1, 2c, 3. These values describe the SNMP version in a Cisco IOS-XE configuration. The empty string is also allowed to support empty element associated with variable references. Note that when using pattern matches and variables care must be taken to ensure that the regular expression and variable values align with the enumerated values. The empty string value is permitted here to allow for empty elements associated with variable references. The EntityStateSNMPSecLevelStringType complex type restricts a string value to a specific set of values: PRIV, AUTH, NO_AUTH. These values describe the SNMP security level (encryption, Authentication, None) in a Cisco IOS-XE SNMPv3 related configurations. The empty string is also allowed to support empty element associated with variable references. Note that when using pattern matches and variables care must be taken to ensure that the regular expression and variable values align with the enumerated values. The empty string value is permitted here to allow for empty elements associated with variable references. The EntityStateSNMPModeStringType complex type restricts a string value to a specific set of values: RO, RW. These values describe the SNMP mode (read-only, read-write) in a Cisco IOS-XE SNMPv3 related configurations. The empty string is also allowed to support empty element associated with variable references. Note that when using pattern matches and variables care must be taken to ensure that the regular expression and variable values align with the enumerated values. The empty string value is permitted here to allow for empty elements associated with variable references. The EntityStateSNMPAuthStringType complex type restricts a string value to a specific set of values: MD5, SHA. These values describe the authentication algorithm in a Cisco IOS-XE SNMPv3 related configurations. The empty string is also allowed to support empty element associated with variable references. Note that when using pattern matches and variables care must be taken to ensure that the regular expression and variable values align with the enumerated values. The empty string value is permitted here to allow for empty elements associated with variable references. The EntityStateSNMPPrivStringType complex type restricts a string value to a specific set of values: DES, 3DES, AES. These values describe the encryption algorithm in a Cisco IOS-XE SNMPv3 related configurations. The empty string is also allowed to support empty element associated with variable references. Note that when using pattern matches and variables care must be taken to ensure that the regular expression and variable values align with the enumerated values. The empty string value is permitted here to allow for empty elements associated with variable references. The EntityStateAccessListIPVersionType complex type restricts a string value to a specific set of values: IPV4, IPV6. These values describe if an ACL is for IPv4 or IPv6 in a Cisco IOS-XE configuration. The empty string is also allowed to support empty element associated with variable references. Note that when using pattern matches and variables care must be taken to ensure that the regular expression and variable values align with the enumerated values. The empty string value is permitted here to allow for empty elements associated with variable references. The EntityStateAccessListUseType complex type restricts a string value to a specific set of values: INTERFACE, CRYPTO_MAP_MATCH, CLASS_MAP_MATCH, ROUTE_MAP_MATCH, IGMP_FILTER, VTY. These values describe the ACL use in a Cisco IOS-XE configuration. The empty string is also allowed to support empty element associated with variable references. Note that when using pattern matches and variables care must be taken to ensure that the regular expression and variable values align with the enumerated values. 5.11.2:1.0 The EntityStateSimpleBaseType check_existence attribute serves the same purpose as this enumeration value. This AccessListUseType enumeration value has been deprecated and may be removed in a future version of the language. DEPRECATED ELEMENT VALUE IN: acl_state ELEMENT VALUE: The empty string value is permitted here to allow for empty elements associated with variable references. The EntityStateAccessListInterfaceDirectionType complex type restricts a string value to a specific set of values: IN, OUT. These values describe the inbound or outbound ACL direction on an interface in a Cisco IOS-XE configuration. The empty string is also allowed to support empty element associated with variable references. Note that when using pattern matches and variables care must be taken to ensure that the regular expression and variable values align with the enumerated values. The empty string value is permitted here to allow for empty elements associated with variable references.