Esquema JSON validación anyOf basada en una de las propiedades

Tengo dificultades para descubrir cómo validar una matriz de objetos en función del valor de una de las propiedades. Entonces, donde tengo un objeto JSON como:

{
    "items": [
        {
            "name": "foo",
            "otherProperty": "bar"
        },
        {
            "name": "foo2",
            "otherProperty2": "baz",
            "otherProperty3": "baz2"
        },
        {
            "name": "imInvalid"
        }
    ]
}

Me gustaría decir eso

los elementos pueden contener cualquier objeto donde el nombre puede ser "foo" o "foo2"si es "foo", la única otra propiedad válida (requerida) es "otherProperty"si el nombre es "foo2", entonces las únicas otras propiedades válidas son "otherProperty2" y "otherProperty3", ambas requeridasNingún otro valor para "nombre" que "foo" y "foo2" es válidoLos objetos en sí son opcionales en la matriz de elementos, y algunos pueden repetirse.

He intentado todo tipo de cosas, pero parece que no puedo fallar cuando valido. Por ejemplo, el nombre "imInvalid" debería estar causando un error de validación. Esta es mi última iteración del esquema. ¿Qué me estoy perdiendo?

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "required": ["items"],
    "properties": {
        "items": {
            "type": "array",
            "minItems": 1,
            "additionalProperties": false,
            "properties": {
                "name": {
                    "anyOf": [
                        {
                            "type": "object",
                            "required": ["name", "otherProperty"],
                            "additionalProperties": false,
                            "properties": {
                                "otherProperty": { "type": "string" },
                                "name": { "enum": [ "foo" ] }
                            }
                        },{
                            "type": "object",
                            "required": ["name", "otherProperty2", "otherProperty3" ],
                            "additionalProperties": false,
                            "properties": {
                                "otherProperty2": { "type": "string" },
                                "otherProperty3": { "type": "string" },
                                "name": { "enum": [ "foo2" ] }
                            }
                        }
                    ]
                }
            }
        }
    }
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta