class XmpSchema extends Properties {

    private static final long serialVersionUID = -176374295948945272L;

    /**
     * the namesspace
     */
    protected String xmlns;

    /**
     * Constructs an XMP schema.
     *
     * @param xmlns xml namespace name
     */
    public XmpSchema(String xmlns) {
        super();
        this.xmlns = xmlns;
    }

    /**
     * @param content content
     * @return an escaped string
     */
    public static String escape(String content) {<FILL_FUNCTION_BODY>}

    /**
     * The String representation of the contents.
     *
     * @return a String representation.
     */
    @Override
    public synchronized String toString() {
        StringBuffer buf = new StringBuffer();
        for (Enumeration e = this.propertyNames(); e.hasMoreElements(); ) {
            process(buf, e.nextElement());
        }
        return buf.toString();
    }

    /**
     * Processes a property
     *
     * @param buf buffer
     * @param p   object
     */
    protected void process(StringBuffer buf, Object p) {
        buf.append('<');
        buf.append(p);
        buf.append('>');
        buf.append(this.get(p));
        buf.append("</");
        buf.append(p);
        buf.append('>');
    }

    /**
     * @return Returns the xmlns.
     */
    public String getXmlns() {
        return xmlns;
    }

    /**
     * @param key   property key
     * @param value value
     * @return the previous property (null if there wasn't one)
     */
    public Object addProperty(String key, String value) {
        return this.setProperty(key, value);
    }

    /**
     * @see java.util.Properties#setProperty(java.lang.String, java.lang.String)
     */
    @Override
    public synchronized Object setProperty(String key, String value) {
        return super.setProperty(key, escape(value));
    }

    /**
     * @param key   used as key
     * @param value toString called on this value
     * @return the previous property (null if there wasn't one)
     * @see java.util.Properties#setProperty(java.lang.String, java.lang.String)
     */
    public Object setProperty(String key, XmpArray value) {
        return super.setProperty(key, value.toString());
    }

    /**
     * @param key   used as key
     * @param value toString called on this value
     * @return the previous property (null if there wasn't one)
     * @see java.util.Properties#setProperty(java.lang.String, java.lang.String)
     */
    public Object setProperty(String key, LangAlt value) {
        return super.setProperty(key, value.toString());
    }
}

        StringBuilder buf = new StringBuilder();
        for (int i = 0; i < content.length(); i++) {
            switch (content.charAt(i)) {
                case '<':
                    buf.append("&lt;");
                    break;
                case '>':
                    buf.append("&gt;");
                    break;
                case '\'':
                    buf.append("&apos;");
                    break;
                case '\"':
                    buf.append("&quot;");
                    break;
                case '&':
                    buf.append("&amp;");
                    break;
                default:
                    buf.append(content.charAt(i));
            }
        }
        return buf.toString();
    
<methods>public void <init>() ,public void <init>(int) ,public void <init>(java.util.Properties) ,public synchronized void clear() ,public synchronized java.lang.Object clone() ,public synchronized java.lang.Object compute(java.lang.Object, BiFunction<? super java.lang.Object,? super java.lang.Object,?>) ,public synchronized java.lang.Object computeIfAbsent(java.lang.Object, Function<? super java.lang.Object,?>) ,public synchronized java.lang.Object computeIfPresent(java.lang.Object, BiFunction<? super java.lang.Object,? super java.lang.Object,?>) ,public boolean contains(java.lang.Object) ,public boolean containsKey(java.lang.Object) ,public boolean containsValue(java.lang.Object) ,public Enumeration<java.lang.Object> elements() ,public Set<Entry<java.lang.Object,java.lang.Object>> entrySet() ,public synchronized boolean equals(java.lang.Object) ,public synchronized void forEach(BiConsumer<? super java.lang.Object,? super java.lang.Object>) ,public java.lang.Object get(java.lang.Object) ,public java.lang.Object getOrDefault(java.lang.Object, java.lang.Object) ,public java.lang.String getProperty(java.lang.String) ,public java.lang.String getProperty(java.lang.String, java.lang.String) ,public synchronized int hashCode() ,public boolean isEmpty() ,public Set<java.lang.Object> keySet() ,public Enumeration<java.lang.Object> keys() ,public void list(java.io.PrintStream) ,public void list(java.io.PrintWriter) ,public synchronized void load(java.io.Reader) throws java.io.IOException,public synchronized void load(java.io.InputStream) throws java.io.IOException,public synchronized void loadFromXML(java.io.InputStream) throws java.io.IOException, java.util.InvalidPropertiesFormatException,public synchronized java.lang.Object merge(java.lang.Object, java.lang.Object, BiFunction<? super java.lang.Object,? super java.lang.Object,?>) ,public Enumeration<?> propertyNames() ,public synchronized java.lang.Object put(java.lang.Object, java.lang.Object) ,public synchronized void putAll(Map<?,?>) ,public synchronized java.lang.Object putIfAbsent(java.lang.Object, java.lang.Object) ,public synchronized java.lang.Object remove(java.lang.Object) ,public synchronized boolean remove(java.lang.Object, java.lang.Object) ,public synchronized java.lang.Object replace(java.lang.Object, java.lang.Object) ,public synchronized boolean replace(java.lang.Object, java.lang.Object, java.lang.Object) ,public synchronized void replaceAll(BiFunction<? super java.lang.Object,? super java.lang.Object,?>) ,public void save(java.io.OutputStream, java.lang.String) ,public synchronized java.lang.Object setProperty(java.lang.String, java.lang.String) ,public int size() ,public void store(java.io.Writer, java.lang.String) throws java.io.IOException,public void store(java.io.OutputStream, java.lang.String) throws java.io.IOException,public void storeToXML(java.io.OutputStream, java.lang.String) throws java.io.IOException,public void storeToXML(java.io.OutputStream, java.lang.String, java.lang.String) throws java.io.IOException,public void storeToXML(java.io.OutputStream, java.lang.String, java.nio.charset.Charset) throws java.io.IOException,public Set<java.lang.String> stringPropertyNames() ,public synchronized java.lang.String toString() ,public Collection<java.lang.Object> values() <variables>private static final jdk.internal.misc.Unsafe UNSAFE,protected volatile java.util.Properties defaults,private volatile transient ConcurrentHashMap<java.lang.Object,java.lang.Object> map,private static final long serialVersionUID