NMTOKEN
的值遵循与XML名称相同的规则,但NMTOKEN
除外,任何允许的字符都可以是第一个字符。与XML string
类型不同,NMTOKEN
值不能包含任何空格。我仍然没有看到它的用处。
那么我们何时以及为何使用NMTOKEN
类型而不是string
类型?
NMTOKENS
使我们能够在单个字符串中指定多个NMTOKEN
值(由空格分隔)。这种类型更有意义,因为它还允许值包含空格字符,这实际上意味着NMTOKENS
类型和string
类型可以保持完全相同的值。
那么这种类型何时有用?
答案 0 :(得分:21)
NMTOKEN
和NMTOKENS
与DTD的兼容性,DTD是XML Schema的前身,它具有作为属性类型的DTD。 DTD几乎没有其他类型,因此那些在那里并不突出。
在将DTD转换为XML架构时,请使用NMTOKEN
和NMTOKENS
。
附录:这些和其他所有上限类型属于同一类别。它们在XML Schema Rec中标记为“为兼容性,NMTOKEN应仅用于属性”。
如果它们完全符合您的需求,那么最简单的方法就是使用它们,但XML Schema的方式是从xs:string
或xs:token
派生,并根据需要约束pattern
面。或者,根据我的经验,更常见的是,按原样使用xs:string
或xs:token
并将其调得足够近。
答案 1 :(得分:0)
我认为,NMTOKEN对定义值非常有用,它们可以解析HTML5兼容的id值或HTML类名。与以前的HTML版本相反,HTML5允许以数字开头的ID。
NMTOKENS对HTML5 ID或HTML类的(逗号分隔)列表非常有用。
答案 2 :(得分:0)
NMTOKENS是非常有用的数据类型,它们允许使用字母,数字和'。',':'和'-'特殊字符Refer。
根据我的经验,它们非常容易定义可以具有上述字符的多值属性。在XML中,定义多值属性的另一种方法将涉及使用regex限制字符串类型,这比使用NMTOKENS类型涉及更多(但是灵活)。
当然,可以对元素采用不同的数据建模方法,但是NMTOKENS是声明多值属性的最短机制。