コード例 #1
0
 /**
  * Character content.
  *
  * @param text The content.
  * @param augs Additional information that may include infoset augmentations
  * @exception XNIException Thrown by handler to signal an error.
  */
 public void characters(XMLString text, Augmentations augs) throws XNIException {
   // when it's not within xs:appinfo or xs:documentation
   if (fInnerAnnotationDepth == -1) {
     for (int i = text.offset; i < text.offset + text.length; i++) {
       // and there is a non-whitespace character
       if (!XMLChar.isSpace(text.ch[i])) {
         // the string we saw: starting from the first non-whitespace character.
         String txt = new String(text.ch, i, text.length + text.offset - i);
         // report an error
         fErrorReporter.reportError(
             XSMessageFormatter.SCHEMA_DOMAIN,
             "s4s-elt-character",
             new Object[] {txt},
             XMLErrorReporter.SEVERITY_ERROR);
         break;
       }
     }
     // don't call super.characters() when it's not within one of the 2
     // annotation elements: the traversers ignore them anyway. We can
     // save time/memory creating the text nodes.
   }
   // when it's within either of the 2 elements, characters are allowed
   // and we need to store them.
   else {
     schemaDOM.characters(text);
   }
 }
コード例 #2
0
  /**
   * The start of an element.
   *
   * @param element The name of the element.
   * @param attributes The element attributes.
   * @param augs Additional information that may include infoset augmentations
   * @exception XNIException Thrown by handler to signal an error.
   */
  public void startElement(QName element, XMLAttributes attributes, Augmentations augs)
      throws XNIException {

    fDepth++;
    // while it is true that non-whitespace character data
    // may only occur in appInfo or documentation
    // elements, it's certainly legal for comments and PI's to
    // occur as children of annotation; we need
    // to account for these here.
    if (fAnnotationDepth == -1) {
      if (element.uri == SchemaSymbols.URI_SCHEMAFORSCHEMA
          && element.localpart == SchemaSymbols.ELT_ANNOTATION) {
        if (fGenerateSyntheticAnnotation) {
          if (fSawAnnotation.size() > 0) {
            fSawAnnotation.pop();
          }
          fSawAnnotation.push(true);
        }
        fAnnotationDepth = fDepth;
        schemaDOM.startAnnotation(element, attributes, fNamespaceContext);
        fCurrentAnnotationElement =
            schemaDOM.startElement(
                element,
                attributes,
                fLocator.getLineNumber(),
                fLocator.getColumnNumber(),
                fLocator.getCharacterOffset());
        return;
      } else if (element.uri == SchemaSymbols.URI_SCHEMAFORSCHEMA && fGenerateSyntheticAnnotation) {
        fSawAnnotation.push(false);
        fHasNonSchemaAttributes.push(hasNonSchemaAttributes(element, attributes));
      }
    } else if (fDepth == fAnnotationDepth + 1) {
      fInnerAnnotationDepth = fDepth;
      schemaDOM.startAnnotationElement(element, attributes);
    } else {
      schemaDOM.startAnnotationElement(element, attributes);
      // avoid falling through; don't call startElement in this case
      return;
    }
    schemaDOM.startElement(
        element,
        attributes,
        fLocator.getLineNumber(),
        fLocator.getColumnNumber(),
        fLocator.getCharacterOffset());
  }
コード例 #3
0
 public void startDocument(
     XMLLocator locator, String encoding, NamespaceContext namespaceContext, Augmentations augs)
     throws XNIException {
   fErrorReporter = (XMLErrorReporter) config.getProperty(ERROR_REPORTER);
   fGenerateSyntheticAnnotation = config.getFeature(GENERATE_SYNTHETIC_ANNOTATION);
   fHasNonSchemaAttributes.clear();
   fSawAnnotation.clear();
   schemaDOM = new SchemaDOM();
   fAnnotationDepth = -1;
   fInnerAnnotationDepth = -1;
   fDepth = -1;
   fLocator = locator;
   fNamespaceContext = namespaceContext;
   schemaDOM.setDocumentURI(locator.getExpandedSystemId());
 } // startDocument(XMLLocator,String,NamespaceContext, Augmentations)
コード例 #4
0
 /**
  * The end of a CDATA section.
  *
  * @param augs Additional information that may include infoset augmentations
  * @exception XNIException Thrown by handler to signal an error.
  */
 public void endCDATA(Augmentations augs) throws XNIException {
   // only deal with CDATA boundaries within an annotation.
   if (fAnnotationDepth != -1) {
     schemaDOM.endAnnotationCDATA();
   }
 }
コード例 #5
0
 /**
  * Ignorable whitespace. For this method to be called, the document source must have some way of
  * determining that the text containing only whitespace characters should be considered ignorable.
  * For example, the validator can determine if a length of whitespace characters in the document
  * are ignorable based on the element content model.
  *
  * @param text The ignorable whitespace.
  * @param augs Additional information that may include infoset augmentations
  * @exception XNIException Thrown by handler to signal an error.
  */
 public void ignorableWhitespace(XMLString text, Augmentations augs) throws XNIException {
   // unlikely to be called, but you never know...
   if (fAnnotationDepth != -1) {
     schemaDOM.characters(text);
   }
 }
コード例 #6
0
  /**
   * The end of an element.
   *
   * @param element The name of the element.
   * @param augs Additional information that may include infoset augmentations
   * @exception XNIException Thrown by handler to signal an error.
   */
  public void endElement(QName element, Augmentations augs) throws XNIException {

    // when we reach the endElement of xs:appinfo or xs:documentation,
    // change fInnerAnnotationDepth to -1
    if (fAnnotationDepth > -1) {
      if (fInnerAnnotationDepth == fDepth) {
        fInnerAnnotationDepth = -1;
        schemaDOM.endAnnotationElement(element);
        schemaDOM.endElement();
      } else if (fAnnotationDepth == fDepth) {
        fAnnotationDepth = -1;
        schemaDOM.endAnnotation(element, fCurrentAnnotationElement);
        schemaDOM.endElement();
      } else { // inside a child of annotation
        schemaDOM.endAnnotationElement(element);
      }
    } else { // not in an annotation at all
      if (element.uri == SchemaSymbols.URI_SCHEMAFORSCHEMA && fGenerateSyntheticAnnotation) {
        boolean value = fHasNonSchemaAttributes.pop();
        boolean sawann = fSawAnnotation.pop();
        if (value && !sawann) {
          String schemaPrefix = fNamespaceContext.getPrefix(SchemaSymbols.URI_SCHEMAFORSCHEMA);
          QName annQName =
              new QName(
                  schemaPrefix,
                  SchemaSymbols.ELT_ANNOTATION,
                  schemaPrefix
                      + (schemaPrefix.length() == 0 ? "" : ":")
                      + SchemaSymbols.ELT_ANNOTATION,
                  SchemaSymbols.URI_SCHEMAFORSCHEMA);
          schemaDOM.startAnnotation(annQName, fEmptyAttr, fNamespaceContext);
          QName elemQName =
              new QName(
                  schemaPrefix,
                  SchemaSymbols.ELT_DOCUMENTATION,
                  schemaPrefix
                      + (schemaPrefix.length() == 0 ? "" : ":")
                      + SchemaSymbols.ELT_DOCUMENTATION,
                  SchemaSymbols.URI_SCHEMAFORSCHEMA);
          schemaDOM.startAnnotationElement(elemQName, fEmptyAttr);
          schemaDOM.characters(new XMLString("SYNTHETIC_ANNOTATION".toCharArray(), 0, 20));
          schemaDOM.endSyntheticAnnotationElement(elemQName, false);
          schemaDOM.endSyntheticAnnotationElement(annQName, true);
        }
      }
      schemaDOM.endElement();
    }
    fDepth--;
  }
コード例 #7
0
  /**
   * An empty element.
   *
   * @param element The name of the element.
   * @param attributes The element attributes.
   * @param augs Additional information that may include infoset augmentations
   * @exception XNIException Thrown by handler to signal an error.
   */
  public void emptyElement(QName element, XMLAttributes attributes, Augmentations augs)
      throws XNIException {

    if (fGenerateSyntheticAnnotation
        && fAnnotationDepth == -1
        && element.uri == SchemaSymbols.URI_SCHEMAFORSCHEMA
        && element.localpart != SchemaSymbols.ELT_ANNOTATION
        && hasNonSchemaAttributes(element, attributes)) {

      schemaDOM.startElement(
          element,
          attributes,
          fLocator.getLineNumber(),
          fLocator.getColumnNumber(),
          fLocator.getCharacterOffset());

      attributes.removeAllAttributes();
      String schemaPrefix = fNamespaceContext.getPrefix(SchemaSymbols.URI_SCHEMAFORSCHEMA);
      QName annQName =
          new QName(
              schemaPrefix,
              SchemaSymbols.ELT_ANNOTATION,
              schemaPrefix + (schemaPrefix.length() == 0 ? "" : ":") + SchemaSymbols.ELT_ANNOTATION,
              SchemaSymbols.URI_SCHEMAFORSCHEMA);
      schemaDOM.startAnnotation(annQName, attributes, fNamespaceContext);
      QName elemQName =
          new QName(
              schemaPrefix,
              SchemaSymbols.ELT_DOCUMENTATION,
              schemaPrefix
                  + (schemaPrefix.length() == 0 ? "" : ":")
                  + SchemaSymbols.ELT_DOCUMENTATION,
              SchemaSymbols.URI_SCHEMAFORSCHEMA);
      schemaDOM.startAnnotationElement(elemQName, attributes);
      schemaDOM.characters(new XMLString("SYNTHETIC_ANNOTATION".toCharArray(), 0, 20));
      schemaDOM.endSyntheticAnnotationElement(elemQName, false);
      schemaDOM.endSyntheticAnnotationElement(annQName, true);

      schemaDOM.endElement();

      return;
    }
    // the order of events that occurs here is:
    //   schemaDOM.startAnnotation/startAnnotationElement (if applicable)
    //   schemaDOM.emptyElement  (basically the same as startElement then endElement)
    //   schemaDOM.endAnnotationElement (if applicable)
    // the order of events that would occur if this was <element></element>:
    //   schemaDOM.startAnnotation/startAnnotationElement (if applicable)
    //   schemaDOM.startElement
    //   schemaDOM.endAnnotationElement (if applicable)
    //   schemaDOM.endElementElement
    // Thus, we can see that the order of events isn't the same.  However, it doesn't
    // seem to matter.  -- PJM
    if (fAnnotationDepth == -1) {
      // this is messed up, but a case to consider:
      if (element.uri == SchemaSymbols.URI_SCHEMAFORSCHEMA
          && element.localpart == SchemaSymbols.ELT_ANNOTATION) {
        schemaDOM.startAnnotation(element, attributes, fNamespaceContext);
      }
    } else {
      schemaDOM.startAnnotationElement(element, attributes);
    }

    ElementImpl newElem =
        schemaDOM.emptyElement(
            element,
            attributes,
            fLocator.getLineNumber(),
            fLocator.getColumnNumber(),
            fLocator.getCharacterOffset());

    if (fAnnotationDepth == -1) {
      // this is messed up, but a case to consider:
      if (element.uri == SchemaSymbols.URI_SCHEMAFORSCHEMA
          && element.localpart == SchemaSymbols.ELT_ANNOTATION) {
        schemaDOM.endAnnotation(element, newElem);
      }
    } else {
      schemaDOM.endAnnotationElement(element);
    }
  }
コード例 #8
0
 /**
  * A processing instruction. Processing instructions consist of a target name and, optionally,
  * text data. The data is only meaningful to the application.
  *
  * <p>Typically, a processing instruction's data will contain a series of pseudo-attributes. These
  * pseudo-attributes follow the form of element attributes but are <strong>not</strong> parsed or
  * presented to the application as anything other than text. The application is responsible for
  * parsing the data.
  *
  * @param target The target.
  * @param data The data or null if none specified.
  * @param augs Additional information that may include infoset augmentations
  * @exception XNIException Thrown by handler to signal an error.
  */
 public void processingInstruction(String target, XMLString data, Augmentations augs)
     throws XNIException {
   if (fAnnotationDepth > -1) {
     schemaDOM.processingInstruction(target, data);
   }
 }
コード例 #9
0
 /**
  * A comment.
  *
  * @param text The text in the comment.
  * @param augs Additional information that may include infoset augmentations
  * @exception XNIException Thrown by application to signal an error.
  */
 public void comment(XMLString text, Augmentations augs) throws XNIException {
   if (fAnnotationDepth > -1) {
     schemaDOM.comment(text);
   }
 }