

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Especificación de formato
<a name="schemas_jsonformat"></a>

Un esquema de Cloud Directory añade estructura a los datos en los directorios de datos. Cloud Directory ofrece dos mecanismos para que pueda definir su esquema. Los desarrolladores pueden especificar operaciones de API específicas para construir un esquema o pueden cargar un esquema completamente con las capacidades de carga de esquemas. Los documentos de esquemas se pueden cargar a través de llamadas de API o a través de la consola. En esta sección se describe el formato que utilizar cuando se cargan todos los documentos de esquema.

## Formato de esquemas JSON
<a name="schemas_json"></a>

Un documento de esquema es un documento JSON con el siguiente formato general. 

```
{
    "facets": {
        "facet name": {
            "facetAttributes": {
                "attribute name": Attribute JSON Subsection
            }
        }
    }
}
```

Un documento de esquema contiene una asignación de nombres de faceta para facetas. Cada faceta, a su vez, contiene una asignación que contiene atributos. Todos los nombres de facetas dentro de un esquema deben ser únicos. Todos los nombres de atributo en una faceta deben ser únicos.

### Subsección JSON de atributo
<a name="schemas_attributejsonsub"></a>

Las facetas contienen atributos. Cada atributo define el tipo de valor que se puede almacenar en un atributo. El siguiente formato JSON describe un atributo.

```
{
    "attributeDefinition": Attribute Definition Subsection,
    "attributeReference": Attribute Reference Subsection,
    "requiredBehavior": "REQUIRED_ALWAYS" or "NOT_REQUIRED"
}
```

Debe proporcionar una definición de atributo o una referencia de atributo. Consulte las subsecciones relacionadas para obtener más información sobre cada una de ellas. 

El campo de comportamiento obligatorio indica si este atributo es obligatorio o no. Debe proporcionar este campo. Los valores posibles son los siguientes:
+ `REQUIRED_ALWAYS`: este atributo se debe proporcionar cuando se crea el objeto o cuando se añade una faceta al objeto. No puede eliminar este atributo.
+ `NOT_REQUIRED`: este atributo puede estar o no presente.

### Subsección de definición de atributos
<a name="schemas_attributedefinitionsub"></a>

Un atributo define el tipo y las reglas asociadas a un valor de atributo. El siguiente diseño JSON describe el formato.

```
{
    "attributeType": One of "STRING", "NUMBER", "BINARY", "BOOLEAN" or "DATETIME",
    "defaultValue": Default Value Subsection,
    "isImmutable": true or false,
    "attributeRules": "Attribute Rules Subsection"
}
```

### Subsección Valor predeterminado
<a name="schemas_defaultvaluesub"></a>

Especifique exactamente uno de los siguientes valores predeterminados. Los valores de tipo largo y booleanos se deben suministrar fuera de las comillas (como sus tipos de Javascript respectivos en lugar de cadenas). Los valores binarios se proporcionan mediante una cadena de cifrado Base64 URL-segura (como se describe en RFC 4648). Los valores de fecha y hora se proporcionan en el número de milisegundos desde la fecha de inicio (00:00:00 UTC el 1 de enero de 1970).

```
{ 
	"stringValue": "a string value",
	"longValue": an integer value,
	"booleanValue": true or false,
	"binaryValue": a URL-safe Base64 encoded string,
	"datetimeValue": an integer value representing milliseconds since epoch
}
```

### Subsección Reglas de atributo
<a name="schemas_attributerulessub"></a>

Las reglas de atributo definen limitaciones sobre los valores de atributo. Puede definir varias reglas para cada atributo. Las reglas de atributo contienen un tipo de regla y un conjunto de parámetros para la regla. Puede encontrar más información en la sección [Reglas de atributos](schemas_attributerules.md). 

```
{
    "rule name": {
        "parameters": {
            "rule parameter key 1": "value",
            "rule parameter key 2": "value"
        },
        "ruleType": "rule type value"
    }
}
```

### Subsección Referencia de atributo
<a name="schemas_attributerefsub"></a>

Las referencias de atributo son una característica avanzada. Permiten que varias facetas compartan una definición de atributo y un valor guardado. Consulte la sección [Referencias de atributo](schemas_attributereferences.md) para obtener más información. Puede definir una referencia de atributo en el esquema JSON con la siguiente plantilla.

```
{
	"targetSchemaArn": "schema ARN"
	"targetFacetName": "facet name"
	"targetAttributeName": "attribute name"
}
```

## Ejemplos de documentos de esquemas
<a name="schemas_completeexample"></a>

A continuación, se indican ejemplos de documentos de esquema que muestran el formato JSON válido.

**nota**  
Todos los valores expresados en la cadena `allowedValues` deben estar separados por comas y sin espacios. Por ejemplo, `"SENSITIVE,CONFIDENTIAL,PUBLIC"`.

### Documento de esquema básico
<a name="schemas_basicschema"></a>

```
{
    "facets": {
        "Employee": {
            "facetAttributes": {
                "Name": {
                    "attributeDefinition": {
                        "attributeType": "STRING",
                        "isImmutable": false,
                        "attributeRules": {
                            "NameLengthRule": {
                                "parameters": {
                                    "min": "3",
                                    "max": "100"
                                },
                                "ruleType": "STRING_LENGTH"
                            }
                        }
                    },
                    "requiredBehavior": "REQUIRED_ALWAYS"
                },
                "EmailAddress": {
                    "attributeDefinition": {
                        "attributeType": "STRING",
                        "isImmutable": true,
                        "attributeRules": {
                            "EmailAddressLengthRule": {
                                "parameters": {
                                    "min": "3",
                                    "max": "100"
                                },
                                "ruleType": "STRING_LENGTH"
                            }
                        }
                    },
                    "requiredBehavior": "REQUIRED_ALWAYS"
                },
                "Status": {
                    "attributeDefinition": {
                        "attributeType": "STRING",
                        "isImmutable": false,
                        "attributeRules": {
                            "rule1": {
                                "parameters": {
                                    "allowedValues": "ACTIVE,INACTIVE,TERMINATED"
                                },
                                "ruleType": "STRING_FROM_SET"
                            }
                        }
                    },
                    "requiredBehavior": "REQUIRED_ALWAYS"
                }
            },
            "objectType": "LEAF_NODE"
        },
        "DataAccessPolicy": {
            "facetAttributes": {
                "AccessLevel": {
                    "attributeDefinition": {
                        "attributeType": "STRING",
                        "isImmutable": true,
                        "attributeRules": {
                            "rule1": {
                                "parameters": {
                                    "allowedValues": "SENSITIVE,CONFIDENTIAL,PUBLIC"
                                },
                                "ruleType": "STRING_FROM_SET"
                            }
                        }
                    },
                    "requiredBehavior": "REQUIRED_ALWAYS"
                }
            },
            "objectType": "POLICY"
        },
        "Group": {
            "facetAttributes": {
                "Name": {
                    "attributeDefinition": {
                        "attributeType": "STRING",
                        "isImmutable": true
                    },
                    "requiredBehavior": "REQUIRED_ALWAYS"
                }
            },
            "objectType": "NODE"
        }
    }
}
```

### Documento de esquema de enlaces con tipo
<a name="schemas_schematyped"></a>

```
{
    "sourceSchemaArn": "",
    "facets": {
        "employee_facet": {
            "facetAttributes": {
                "employee_login": {
                    "attributeDefinition": {
                        "attributeType": "STRING",
                        "isImmutable": true,
                        "attributeRules": {}
                    },
                    "requiredBehavior": "REQUIRED_ALWAYS"
                },
                "employee_id": {
                    "attributeDefinition": {
                        "attributeType": "STRING",
                        "isImmutable": true,
                        "attributeRules": {}
                    },
                    "requiredBehavior": "REQUIRED_ALWAYS"
                },
                "employee_name": {
                    "attributeDefinition": {
                        "attributeType": "STRING",
                        "isImmutable": true,
                        "attributeRules": {}
                    },
                    "requiredBehavior": "REQUIRED_ALWAYS"
                },
                "employee_role": {
                    "attributeDefinition": {
                        "attributeType": "STRING",
                        "isImmutable": true,
                        "attributeRules": {}
                    },
                    "requiredBehavior": "REQUIRED_ALWAYS"
                }
            },
            "objectType": "LEAF_NODE"
        },
        "device_facet": {
            "facetAttributes": {
                "device_id": {
                    "attributeDefinition": {
                        "attributeType": "STRING",
                        "isImmutable": true,
                        "attributeRules": {}
                    },
                    "requiredBehavior": "REQUIRED_ALWAYS"
                },
                "device_type": {
                    "attributeDefinition": {
                        "attributeType": "STRING",
                        "isImmutable": true,
                        "attributeRules": {}
                    },
                    "requiredBehavior": "REQUIRED_ALWAYS"
                }
            },
            "objectType": "NODE"
        },
        "region_facet": {
            "facetAttributes": {},
            "objectType": "NODE"
        },
        "group_facet": {
            "facetAttributes": {
                "group_type": {
                    "attributeDefinition": {
                        "attributeType": "STRING",
                        "isImmutable": true,
                        "attributeRules": {}
                    },
                    "requiredBehavior": "REQUIRED_ALWAYS"
                }
            },
            "objectType": "NODE"
        },
        "office_facet": {
            "facetAttributes": {
                "office_id": {
                    "attributeDefinition": {
                        "attributeType": "STRING",
                        "isImmutable": true,
                        "attributeRules": {}
                    },
                    "requiredBehavior": "REQUIRED_ALWAYS"
                },
                "office_type": {
                    "attributeDefinition": {
                        "attributeType": "STRING",
                        "isImmutable": true,
                        "attributeRules": {}
                    },
                    "requiredBehavior": "REQUIRED_ALWAYS"
                },
                "office_location": {
                    "attributeDefinition": {
                        "attributeType": "STRING",
                        "isImmutable": true,
                        "attributeRules": {}
                    },
                    "requiredBehavior": "REQUIRED_ALWAYS"
                }
            },
            "objectType": "NODE"
        }
    },
    "typedLinkFacets": {
        "device_association": {
            "facetAttributes": {
                "device_type": {
                    "attributeDefinition": {
                        "attributeType": "STRING",
                        "isImmutable": false,
                        "attributeRules": {}
                    },
                    "requiredBehavior": "REQUIRED_ALWAYS"
                },
                "device_label": {
                    "attributeDefinition": {
                        "attributeType": "STRING",
                        "isImmutable": false,
                        "attributeRules": {}
                    },
                    "requiredBehavior": "REQUIRED_ALWAYS"
                }
            },
            "identityAttributeOrder": [
                "device_label",
                "device_type"
            ]
        }
    }
}
```