Class DTDElement


  • public final class DTDElement
    extends java.lang.Object
    Class that contains element definitions from DTD.

    Notes about thread-safety: this class is not thread-safe, since it does not have to be, in general case. That is, the only instances that can be shared are external subset instances, and those are used in read-only manner (with the exception of temporary arrays constructed on-demand).

    • Field Detail

      • mLocation

        final javax.xml.stream.Location mLocation
        Location of the (real) definition of the element; may be null for placeholder elements created to hold ATTLIST definitions
      • mValidator

        StructValidator mValidator
        Base validator object for validating content model of this element; may be null for some simple content models (ANY, EMPTY).
      • mAllowedContent

        int mAllowedContent
      • mNsAware

        final boolean mNsAware
        True if the DTD was parsed (and is to be used) in namespace-aware mode. Affects (name) validation amongst other things.
      • mXml11

        final boolean mXml11
        True if the DTD was parsed in xml1.1 compliant mode (referenced to from an xml 1.1 document). Affects (name) validation amongst other things.
      • mSpecAttrList

        java.util.ArrayList<DTDAttribute> mSpecAttrList
        Ordered list of attributes that have 'special' properties (attribute is required, has a default value [regular or fixed]); these attributes have to be specifically checked after actual values have been resolved.
      • mAnyFixed

        boolean mAnyFixed
      • mAnyDefaults

        boolean mAnyDefaults
        Flag set to true if there are any attributes that have either basic default value, or #FIXED default value.
      • mValidateAttrs

        boolean mValidateAttrs
        Flag that is set to true if there is at least one attribute that has type that requires normalization and/or validation; that is, is of some other type than CDATA.
      • mIdAttr

        DTDAttribute mIdAttr
        Id attribute instance, if one already declared for this element; can only have up to one such attribute per element.
      • mNotationAttr

        DTDAttribute mNotationAttr
        Notation attribute instance, if one already declared for this element; can only have up to one such attribute per element.
      • mNsDefaults

        java.util.HashMap<java.lang.String,​DTDAttribute> mNsDefaults
        Set of namespace declarations with default values, if any (regular ns pseudo-attr declarations are just ignored)
    • Constructor Detail

      • DTDElement

        private DTDElement​(javax.xml.stream.Location loc,
                           PrefixedName name,
                           StructValidator val,
                           int allowedContent,
                           boolean nsAware,
                           boolean xml11)
    • Method Detail

      • createDefined

        public static DTDElement createDefined​(ReaderConfig cfg,
                                               javax.xml.stream.Location loc,
                                               PrefixedName name,
                                               StructValidator val,
                                               int allowedContent)
        Method called to create an actual element definition, matching an ELEMENT directive in a DTD subset.
      • createPlaceholder

        public static DTDElement createPlaceholder​(ReaderConfig cfg,
                                                   javax.xml.stream.Location loc,
                                                   PrefixedName name)
        Method called to create a "placeholder" element definition, needed to contain attribute definitions.
      • define

        public DTDElement define​(javax.xml.stream.Location loc,
                                 StructValidator val,
                                 int allowedContent)
        Method called on placeholder element, to create a real instance that has all attribute definitions placeholder had (it'll always have at least one -- otherwise no placeholder was needed).
      • defineFrom

        public void defineFrom​(InputProblemReporter rep,
                               DTDElement definedElem,
                               boolean fullyValidate)
                        throws javax.xml.stream.XMLStreamException
        Method called to "upgrade" a placeholder using a defined element, including adding attributes.
        Throws:
        javax.xml.stream.XMLStreamException
      • verifyUndefined

        private void verifyUndefined()
      • addAttribute

        public DTDAttribute addAttribute​(InputProblemReporter rep,
                                         PrefixedName attrName,
                                         int valueType,
                                         DefaultAttrValue defValue,
                                         WordResolver enumValues,
                                         boolean fullyValidate)
                                  throws javax.xml.stream.XMLStreamException
        Method called by DTD parser when it has read information about an attribute that belong to this element
        Returns:
        Newly created attribute Object if the attribute definition was added (hadn't been declared yet); null if it's a duplicate, in which case original definition sticks.
        Throws:
        javax.xml.stream.XMLStreamException
      • addNsDefault

        public DTDAttribute addNsDefault​(InputProblemReporter rep,
                                         PrefixedName attrName,
                                         int valueType,
                                         DefaultAttrValue defValue,
                                         boolean fullyValidate)
                                  throws javax.xml.stream.XMLStreamException
        Method called to add a definition of a namespace-declaration pseudo-attribute with a default value.
        Parameters:
        rep - Reporter to use to report non-fatal problems
        fullyValidate - Whether this is being invoked for actual DTD validation, or just the "typing non-validator"
        Returns:
        Attribute that acts as the placeholder, if the declaration was added; null to indicate it was a dup (there was an earlier declaration)
        Throws:
        javax.xml.stream.XMLStreamException
      • mergeMissingAttributesFrom

        public void mergeMissingAttributesFrom​(InputProblemReporter rep,
                                               DTDElement other,
                                               boolean fullyValidate)
                                        throws javax.xml.stream.XMLStreamException
        Throws:
        javax.xml.stream.XMLStreamException
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • getDisplayName

        public java.lang.String getDisplayName()
      • getLocation

        public javax.xml.stream.Location getLocation()
      • isDefined

        public boolean isDefined()
      • getAllowedContent

        public int getAllowedContent()
        Returns:
        Constant that identifies what kind of nodes are in general allowed inside this element.
      • getAllowedContentIfSpace

        public int getAllowedContentIfSpace()
        Specialized accessor used by non-validating but typing 'validator': essentially, used to figure out whether #PCDATA is allowed or not; and based on that, return one of 2 allowable text values (only space, or anything). This is the relevant subset in non-validating modes, needed to properly type resulting character events.
      • getSpecialCount

        public int getSpecialCount()
      • getSpecialAttrs

        public java.util.List<DTDAttribute> getSpecialAttrs()
      • attrsNeedValidation

        public boolean attrsNeedValidation()
        Returns:
        True if at least one of the attributes has type other than CDATA; false if not
      • hasFixedAttrs

        public boolean hasFixedAttrs()
      • hasAttrDefaultValues

        public boolean hasAttrDefaultValues()
      • getNotationAttribute

        public DTDAttribute getNotationAttribute()
      • hasNsDefaults

        public boolean hasNsDefaults()
      • getNsDefaults

        protected java.util.HashMap<java.lang.String,​DTDAttribute> getNsDefaults()
      • getSpecialList

        private java.util.List<DTDAttribute> getSpecialList()