private void appendRootElementStart(DigitalObject obj, PrintWriter writer)
      throws ObjectIntegrityException {
    writer.print("<");
    writer.print(METS.METS.qName);
    if (m_format.equals(METS_EXT1_1)) {
      writer.print(" ");
      writer.print(METS_EXT.EXT_VERSION.localName);
      writer.print("=\"1.1\"");
    }
    writer.print(" ");
    writer.print(METS.OBJID.localName);
    writer.print("=\"");
    writer.print(obj.getPid());
    writer.print("\"");

    if (m_format.equals(METS_EXT1_0) && DOTranslationUtility.getTypeAttribute(obj) != null) {
      writer.print(" ");
      writer.print(METS.TYPE.localName);
      writer.print("=\"");
      writer.print(DOTranslationUtility.getTypeAttribute(obj).localName);
      writer.print("\"");
    }

    writer.print("\n");
    String label = obj.getLabel();
    if (label != null && label.length() > 0) {
      writer.print(METS.LABEL.localName);
      writer.print("=\"");
      writer.print(StreamUtility.enc(label));
      writer.print("\"\n");
    }
    writer.print("xmlns:");
    writer.print(METS.prefix);
    writer.print("=\"");
    writer.print(METS.uri);
    writer.print("\"\n");
    if (m_format.equals(METS_EXT1_0)) {
      writer.print("xmlns:");
      writer.print(XLINK.prefix);
      writer.print("=\"");
      writer.print(OLD_XLINK.uri);
      writer.print("\"\n");
    } else {
      writer.print("xmlns:");
      writer.print(XLINK.prefix);
      writer.print("=\"");
      writer.print(XLINK.uri);
      writer.print("\"\n");
    }
    writer.print("xmlns:");
    writer.print(XSI.prefix);
    writer.print("=\"");
    writer.print(XSI.uri);
    writer.print("\"\n");
    writer.print(XSI.SCHEMA_LOCATION.qName);
    writer.print("=\"");
    writer.print(METS.uri);
    writer.print(" ");
    writer.print(m_format.xsdLocation);
    writer.print("\">\n");
  }