{
    "version": "1.0",
    "resourceTypes": {
        "example-v1": {
            "subResources": {
                "users": {
                    "type": "collection",
                    "dnTemplate": "ou=people,dc=example,dc=com",
                    "resource": "frapi:opendj:rest2ldap:user:1.0",
                    "namingStrategy": {
                        "type": "clientDnNaming",
                        "dnAttribute": "uid"
                    }
                },
                "groups": {
                    "type": "collection",
                    "dnTemplate": "ou=groups,dc=example,dc=com",
                    "resource": "frapi:opendj:rest2ldap:group:1.0",
                    "namingStrategy": {
                        "type": "clientDnNaming",
                        "dnAttribute": "cn"
                    }
                }
            }
        },
        "frapi:opendj:rest2ldap:object:1.0": {
            "isAbstract": true,
            "objectClasses": ["top"],
            "properties": {
                "_schema": {
                    "type": "resourceType"
                },
                "_rev": {
                    "type": "simple",
                    "ldapAttribute": "etag",
                    "writability": "readOnly"
                },
                "_meta": {
                    "type": "object",
                    "properties": {
                        "created": {
                            "type": "simple",
                            "ldapAttribute": "createTimestamp",
                            "writability": "readOnly"
                        },
                        "lastModified": {
                            "type": "simple",
                            "ldapAttribute": "modifyTimestamp",
                            "writability": "readOnly"
                        }
                    }
                }
            }
        },
        "frapi:opendj:rest2ldap:user:1.0": {
            "superType": "frapi:opendj:rest2ldap:object:1.0",
            "objectClasses": ["person", "organizationalPerson", "inetOrgPerson"],
            "supportedActions": ["modifyPassword", "resetPassword"],
            "properties": {
                "_id": {
                    "type": "simple",
                    "ldapAttribute": "uid",
                    "isRequired": true,
                    "writability": "createOnly"
                },
                "userName": {
                    "type": "simple",
                    "ldapAttribute": "mail"
                },
                "displayName": {
                    "type": "simple",
                    "ldapAttribute": "cn",
                    "isMultiValued": true,
                    "isRequired": true
                },
                "name": {
                    "type": "object",
                    "properties": {
                        "givenName": {
                            "type": "simple"
                        },
                        "familyName": {
                            "type": "simple",
                            "ldapAttribute": "sn",
                            "isRequired": true
                        }
                    }
                },
                "description": {
                    "type": "simple"
                },
                "manager": {
                    "type": "reference",
                    "resourcePath": ".."
                },
                "reports": {
                    "type": "reverseReference",
                    "resourcePath": "..",
                    "propertyName": "manager"
                },
                "groups": {
                    "type": "reference",
                    "resourcePath": "../../groups",
                    "ldapAttribute": "isMemberOf",
                    "isMultiValued": true,
                    "writability": "readOnly"
                },
                "contactInformation": {
                    "type": "object",
                    "properties": {
                        "telephoneNumber": {
                            "type": "simple"
                        },
                        "emailAddress": {
                            "type": "simple",
                            "ldapAttribute": "mail"
                        }
                    }
                }
            },
            // devices-subresource
            "subResources": {
                "devices": {
                    "type": "collection",
                    "resource": "frapi:opendj:rest2ldap:device:1.0",
                    "namingStrategy": {
                        "type": "clientDnNaming",
                        "dnAttribute": "cn"
                    }
                }
            }
            // devices-subresource
        },
        "frapi:opendj:rest2ldap:posixUser:1.0": {
            "superType": "frapi:opendj:rest2ldap:user:1.0",
            "objectClasses": ["posixAccount"],
            "properties": {
                "uidNumber": {
                    "type": "simple",
                    "isRequired": true
                },
                "gidNumber": {
                    "type": "simple",
                    "isRequired": true
                },
                "homeDirectory": {
                    "type": "simple",
                    "isRequired": true
                },
                "loginShell": {
                    "type": "simple"
                },
                "gecos": {
                    "type": "simple"
                }
            }
        },
        "frapi:opendj:rest2ldap:group:1.0": {
            "superType": "frapi:opendj:rest2ldap:object:1.0",
            "objectClasses": ["groupOfUniqueNames"],
            "properties": {
                "_id": {
                    "type": "simple",
                    "ldapAttribute": "cn",
                    "isRequired": true,
                    "writability": "createOnly"
                },
                "displayName": {
                    "type": "simple",
                    "ldapAttribute": "cn",
                    "isRequired": true,
                    "writability": "readOnly"
                },
                "description": {
                    "type": "simple"
                },
                "members": {
                    "type": "reference",
                    "resourcePath": "../../users",
                    "ldapAttribute": "uniqueMember",
                    "isMultiValued": true
                }
            }
        },
        // device-schema
        "frapi:opendj:rest2ldap:device:1.0": {
            "superType": "frapi:opendj:rest2ldap:object:1.0",
            "objectClasses": ["device"],
            "properties": {
                "_id": {
                    "type": "simple",
                    "ldapAttribute": "cn",
                    "isRequired": true,
                    "writability": "createOnly"
                },
                "displayName": {
                    "type": "simple",
                    "ldapAttribute": "cn",
                    "isRequired": true,
                    "writability": "readOnly"
                },
                "description": {
                    "type": "simple"
                },
                "owner": {
                    "type": "reference",
                    "resourcePath": "../..",
                    "ldapAttribute": "owner"
                },
                "serialNumber": {
                    "type": "simple"
                }
            }
        }
        // device-schema
    }
}