diff --git a/lang/README b/lang/README
index da54c78b..8dfaa54f 100644
--- a/lang/README
+++ b/lang/README
@@ -10,3 +10,4 @@ sub-directory.
Directory Language
cl Common Lisp
+xml-schemas XML (schema files for Relax-NG, RNG compact, W3C XSD and DTD)
diff --git a/lang/xml-schemas/gpgmekeys.dtd b/lang/xml-schemas/gpgmekeys.dtd
new file mode 100644
index 00000000..08c0402f
--- /dev/null
+++ b/lang/xml-schemas/gpgmekeys.dtd
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lang/xml-schemas/gpgmekeys.rnc b/lang/xml-schemas/gpgmekeys.rnc
new file mode 100644
index 00000000..ef669a68
--- /dev/null
+++ b/lang/xml-schemas/gpgmekeys.rnc
@@ -0,0 +1,75 @@
+default namespace = ""
+
+start =
+ element gpgme {
+ element keylist {
+ element key {
+ element revoked {
+ attribute value { xsd:NMTOKEN }
+ },
+ element expired {
+ attribute value { xsd:NMTOKEN }
+ },
+ element disabled {
+ attribute value { xsd:NMTOKEN }
+ },
+ element invalid {
+ attribute value { xsd:NMTOKEN }
+ },
+ element can-encrypt {
+ attribute value { xsd:NMTOKEN }
+ },
+ element can-sign {
+ attribute value { xsd:NMTOKEN }
+ },
+ element can-certify {
+ attribute value { xsd:NMTOKEN }
+ },
+ element can-authenticate {
+ attribute value { xsd:NMTOKEN }
+ },
+ element is-qualified {
+ attribute value { xsd:NMTOKEN }
+ },
+ secret,
+ element protocol {
+ attribute value { xsd:integer },
+ xsd:NCName
+ },
+ element issuer {
+ element serial { empty },
+ name
+ },
+ element chain-id { empty },
+ element owner-trust {
+ attribute value { xsd:integer },
+ xsd:NCName
+ },
+ element subkeys {
+ element subkey {
+ element keyid { xsd:NMTOKEN },
+ element fpr { text },
+ secret,
+ element is_cardkey {
+ attribute value { xsd:NMTOKEN }
+ },
+ element curve { xsd:NCName }?
+ }+
+ },
+ element uids { uid+ }
+ }+
+ }
+ }
+secret =
+ element secret {
+ attribute value { xsd:NMTOKEN }
+ }
+name = element name { text }
+uid =
+ element uid {
+ (text
+ | name
+ | uid
+ | element comment { text }
+ | element email { xsd:anyURI })+
+ }
diff --git a/lang/xml-schemas/gpgmekeys.rng b/lang/xml-schemas/gpgmekeys.rng
new file mode 100644
index 00000000..f8fad916
--- /dev/null
+++ b/lang/xml-schemas/gpgmekeys.rng
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lang/xml-schemas/gpgmekeys.xsd b/lang/xml-schemas/gpgmekeys.xsd
new file mode 100644
index 00000000..9efd94e7
--- /dev/null
+++ b/lang/xml-schemas/gpgmekeys.xsd
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+