Xsd NMTOKEN和NMTOKENS类型的用途是什么?

Xsd NMTOKEN和NMTOKENS类型的用途是什么?,xsd,Xsd,NMTOKEN的值遵循与XML名称相同的规则,但NMTOKEN允许的任何字符都可以是第一个字符。与XMLstringtype不同,NMTOKEN值不能包含任何空格。我仍然看不出它的用处 那么,我们何时以及为什么要使用NMTOKEN类型而不是string类型呢 NMTOKENS允许我们在单个字符串中指定多个NMTOKEN值(用空格分隔)。这种类型更有意义,因为它还允许值包含空格字符,这本质上意味着NMTOKENStype和stringtype可以保存完全相同的值 那么这种类型什么时候有用呢 N

NMTOKEN
的值遵循与XML名称相同的规则,但
NMTOKEN
允许的任何字符都可以是第一个字符。与XML
string
type不同,
NMTOKEN
值不能包含任何空格。我仍然看不出它的用处

那么,我们何时以及为什么要使用
NMTOKEN
类型而不是
string
类型呢

  • NMTOKENS
    允许我们在单个字符串中指定多个
    NMTOKEN
    值(用空格分隔)。这种类型更有意义,因为它还允许值包含空格字符,这本质上意味着
    NMTOKENS
    type和
    string
    type可以保存完全相同的值

    那么这种类型什么时候有用呢


  • NMTOKEN
    NMTOKEN
    存在于XML模式中,只是为了与DTD兼容,DTD是XML模式的前身,其属性类型为DTD。DTD几乎没有其他类型,因此这些类型不会显得多余

    因此,在将DTD转换为XML模式时,请使用
    NMTOKEN
    NMTOKENS

    附录:这些和其他所有CAP类型属于同一类别。它们在XML模式Rec中标记为“为了兼容性,NMTOKEN应仅用于属性”


    如果它们完全符合您的需要,那么只使用它们可能是最简单的,但是XML模式的方法是从
    xs:string
    xs:token
    派生,并根据需要使用
    模式
    方面进行约束。或者,根据我的经验,更常见的是,按原样使用
    xs:string
    xs:token
    ,并将其称为足够接近的值。

    我认为,NMTOKEN用于定义值,这些值表示与HTML5兼容的id值或HTML类名。与以前的HTML版本相反,HTML5允许ID以数字开头


    NMTOKENS对于HTML5 ID或HTML类的列表(逗号分隔)很有用。

    NMTOKENS是一种非常有用的数据类型,它们允许字母、数字和“.”、“:”和“-”特殊字符

    根据我的经验,它们可以非常方便地定义多值属性,这些属性可以具有上述特征。在XML中,定义多值属性的另一种方法涉及使用regex限制字符串类型,这比使用NMTOKENS类型更为复杂(不过更灵活)


    当然,可以对元素采用不同的数据建模方法,但NMTOKENS是声明多值属性的最短机制。

    很抱歉没有尽快回复。如果NMTOKEN和NMTOKEN的存在只是为了与DTD兼容,那么当DTD兼容性不是问题时,XML模式应该使用什么类型的NMTOKEN和NMTOKEN来代替NMTOKEN?我已经根据您的评论添加到了答案中。