Class NmTokenAttribute

Direct Known Subclasses:
Attr_hreflang, Attr_lang, Attr_xml_lang, Element_a.Attr_name, Element_bool.Attr_default, Element_comment.Attr_name, Element_entry.Attr_lang, Element_enum.Attr_default, Element_enum.Attr_name, Element_enumeration.Attr_name, Element_enumitem.Attr_compilable, Element_enumset.Attr_name, Element_enumSetContains.Attr_number, Element_enumSetContains.Attr_option, Element_enumSetContains.Attr_value, Element_float.Attr_default, Element_int.Attr_default, Element_map.Attr_name, Element_object.Attr_name, Element_optarg.Attr_number, Element_optarg.Attr_option, Element_option.Attr_abbrev, Element_option.Attr_name, Element_text.Attr_lang, Element_text.Attr_lang, IdAttribute, IdRefAttribute

public abstract class NmTokenAttribute extends TypedAttribute<String>
Base class for all generated classes which realize an Attribute with an "NMTOKEN" type. Offers additionally static methods for checking several flavours of Token definitions from XML, which can be used explicitly by user code, and are used by this and other attribute base classes.
  • Constructor Details

  • Method Details

    • checkValue

      protected void checkValue(@Opt @Opt String value) throws TdomAttributeSyntaxException
      Description copied from class: TypedAttribute
      Check routine for the validity of the attributes' intended value. Is a call-back, implemented by the sub-classes. Is called only here, by two constructors and the TypedAttribute.setValue(V) method. The value null means "absent" for #IMPLIED attributes and passes the test.
      Specified by:
      checkValue in class TypedAttribute<String>
      Parameters:
      value - the value to test; maybe null.
      Throws:
      TdomAttributeSyntaxException - iff the value does not match the type of the XML attribute, including a forbidden Null.
    • getTypeString

      public String getTypeString()
      Description copied from class: TypedAttribute
      The definition text for the "type" of the attribute in the original DTD.
      Specified by:
      getTypeString in class TypedAttribute<String>
    • _checkToken

      protected static boolean _checkToken(@Opt @Opt String token, boolean mustBeName)
      Checks whether the argument fits the rules for Nmtoken and Name in XML1.0. For details see checkNmToken(java.lang.String).
      Parameters:
      token - the string to check.
      mustBeName - true if the stricter rules for name are checked, not onnly those for NmTokenAttribute.
      Returns:
      true on success. Null and empty string fail the test.
    • checkNmToken

      public static void checkNmToken(@Opt @Opt String token)
      Check whether the argument is a legal value for "Nmtoken". This check method throws an IllegalArgumentException, or returns silently.

      The flavours of XML names and their relations

      The rules for a correct xml Nmtoken or xml Name are crucial and complicated, see [XML 1.0], grammar rules [5] and [7].
      Grammar rule [7] defines NmToken as a non-empty string from letters, digits and few punctation characters. XML spec lists about HUNDRED of ranges which can serve as "Letter", either defined as "BaseChar" or "Ideographic". [XML 1.0:rules 84-86].
      FIXME CHECK XML 1.1 !!
      Instead of "Letter" we use Character.isJavaIdentifierStart(char) as an APPROXIMATION, and for "Letter or Digit" we use Character.isJavaIdentifierPart(char). But both after excluding the "dollar" sign.

      Names are defined by rule [5]. The difference between Nmtokens and Names is, that the very first character of a name must be a "letter" or "_" or ":".
      Names are checked by checkNameToken(String).
      The Name production must be adhered to by the value of all attributes of type Id, IdRef, IdRefs, Entity, Entities and Notation. (The value for "notation" must be defined somewhere else as a "NOTATION"; this is a further *global* consistency condition currently not checked by tdom)

      The weaker Nmtoken can be used for NmToken, NmTokens and Enumeration values.

      Further there is NCName (="No-Colon-Name") [NSinXML 1.0:rule 4], which is a Name not containing a colon ":".
      NCNames are checked by checkNCName(String).

      Further there is PiTarget, which is a Name token which does not start with "(X|x)(M|m)(L|l)" in any combination.
      PiTargets are checked by checkPITarget(String).

      Further there are the un-reserved namespace prefixes, which are NCNames and do not start with "(X|x)(M|m)(L|l)" in any combination. [NSinXML: NSC:Reserved Prefixes and Namespace Names].

      Parameters:
      token - The token to check, Null passes the test.
      Throws:
      IllegalArgumentException
    • checkNameToken

      public static void checkNameToken(@Opt @Opt String token)
      Check whether the argument is a legal value for a "Name" token, according to [XML 1.0].
      See checkNmToken(String) for details.
      Parameters:
      token - The token to check, Null passes the test.
      Throws:
      IllegalArgumentException
    • checkNCName

      public static void checkNCName(@Opt @Opt String token)
      Check whether the argument is a legal value for a "Name" token and does not contain a colon ":".
      (This is currently not used by us, but defined by [NSinXML 1.0:rule 4], and addtionally REQUIRED FOR ALL Attribute Values of type Id/IdRef/IdRefs/Entity/Entities/Notation for a "namespace-valid" document, see [NSinXML 1.0:section 7, last sentence],
      See checkNmToken(String) for further details of all check methods in this class.
      Parameters:
      token - The token to check, Null passes the test.
      Throws:
      IllegalArgumentException
    • checkPITarget

      public static void checkPITarget(@Opt @Opt String token)
      Check whether the argument is a legal value for a "Name" token and does not start with the three characters "XML" in any combination of upper/lower case. These can be used as "PI targets" and are allowed as prefices in namespace declarations. See [XML1.0:section 2.6] and [NSinXML 1.0:section 3, last sentence].
      See checkNmToken(String) for further details of all check methods in this class.
      Parameters:
      token - The token to check, Null and empty string pass the test.
      Throws:
      IllegalArgumentException - when test fails
    • encode

      public final void encode(EncodingOutputStream out, TypedExtension ext) throws IOException
      Description copied from class: TypedNode
      Abstract fall-back method which MUST be overridden and always throws an Exception.
      Specified by:
      encode in class TypedNode<TypedExtension>
      Throws:
      IOException
    • decode

      Description copied from class: TypedAttribute
      DOCUMENT ME
      Specified by:
      decode in class TypedAttribute<String>
      Throws:
      TdomAttributeSyntaxException
      IOException
    • getStringValue

      @Opt public final @Opt String getStringValue(@Opt @Opt String s)
      Description copied from class: TypedAttribute
      Returns the textual representation of a possible attribute value (not null), as it would be contained literally in a possible XML text representation. Since the textual representation of a String is the string itself, this method is relevant for enumeration types only (Later: also for "entity" types, but these are not yet supported.)
      Specified by:
      getStringValue in class TypedAttribute<String>
      Returns:
      (never null) the textual representation of this attribute value, as it would be contained literally in a possible XML text representation.