romaricdrigon/MetaYaml

Uncaught exception 'RomaricDrigon\MetaYaml\Exception\NodeValidatorException' with message 'The node 'root.book.generator.name' is not an array'

Closed this issue · 1 comments

# easybook_schema.yml
root:
    _type: array
    _children:
        book:
            _type: array
            _children:
                title:
                    _required: true
                    _type: text
                author:
                    _type: text
                edition:
                    _type: text
                language:
                    _type: text
                publication_date:
                    _type: text
                generator:
                    _type: prototype
                    _prototype:
                        _type: array
                        _children:
                            name:
                                _type: text
                            version:
                                _type: text
                contents:
                    _type: prototype
                    _prototype:
                        _type: array
                        _children:
                            name:
                                _type: text
                            version:
                                _type: text
                editions:
                    _type: text
# config.yml
easybook:
    parameters:
        parser.options:
            code_block_type: fenced

book:
    title:            easybook documentation
    author:           Javier Eguiluz
    edition:          First edition
    language:         en
    publication_date: ~

    generator: { name: easybook, version: 5.0 }

    contents:
        - { element: cover }
        - { element: toc   }
        - { element: chapter,  number: 1,  content: 01-publishing-your-first-book.md }
        - { element: chapter,  number: 2,  content: 02-book-contents-and-configuration.md }
        - { element: chapter,  number: 3,  content: 03-editions.md }
        - { element: chapter,  number: 4,  content: 04-themes.md }
        - { element: chapter,  number: 5,  content: 05-publishing-html-books.md }
        - { element: chapter,  number: 6,  content: 06-publishing-epub-books.md }
        - { element: chapter,  number: 7,  content: 07-publishing-mobi-books.md }
        - { element: chapter,  number: 8,  content: 08-publishing-pdf-books.md }
        - { element: chapter,  number: 9,  content: 09-plugins.md }
        - { element: chapter,  number: 10, content: 10-hacking-easybook.md }
        - { element: appendix, number: A,  content: A-markdown-reference.md }

    editions:
        kindle:
            extends:         ebook
            format:          mobi

        ebook:
            format:          epub
            include_styles:  true
            highlight_cache: true
            highlight_code:  false
            labels:          ['appendix', 'chapter', 'figure']
            theme:           clean
            toc:
                deep:        1
                elements:    ["appendix", "chapter"]

        print:
            format:          pdf
            highlight_cache: true
            highlight_code:  true
            isbn:            ~
            include_styles:  true
            labels:          ['appendix', 'chapter', 'figure']
            margin:
                top:         25mm
                bottom:      25mm
                inner:       30mm
                outter:      20mm
            page_size:       A4
            theme:           clean
            toc:
                deep:        2
                elements:    ["appendix", "chapter"]
            two_sided:       true

        web:
            format:          html
            include_styles:  true
            highlight_cache: true
            highlight_code:  true
            labels:          ['appendix', 'chapter', 'figure']
            theme:           clean
            toc:
                deep:        2
                elements:    ["appendix", "chapter"]

        website:
            extends:         web
            format:          html_chunked
            chunk_level:     1
            images_base_dir: /img/doc-en/

        easybook-project.org:
            format:          html_chunked
            chunk_level:     2
            images_base_dir: /images/doc-en/
            include_styles:  false
            highlight_cache: false
            highlight_code:  true
            labels:          ['appendix', 'chapter', 'figure']
            theme:           clean
            toc:
                deep:        2
                elements:    ["appendix", "chapter"]
<?php

include __DIR__.'/vendor/autoload.php';

use RomaricDrigon\MetaYaml\MetaYaml;
use RomaricDrigon\MetaYaml\Loader\YamlLoader;

$loader = new YamlLoader(); // Yaml using Symfony Yaml component

// or you can load from a file
$schema = $loader->loadFromFile(__DIR__.'/easybook_schema.yml');
$data = $loader->loadFromFile(__DIR__.'/config.yml');

// create object, load schema from an array
$schemaEngine = new MetaYaml($schema);
$schemaEngine->validateSchema(); // return true or throw an exception

// finally, validate your data array according to the schema
$schemaEngine->validate($data); // return true or throw an exception

echo "Successful validation";
~ php run.php                                                                               Luiss-MacBook-Pro-2 [3:30:28]
PHP Fatal error:  Uncaught exception 'RomaricDrigon\MetaYaml\Exception\NodeValidatorException' with message 'The node 'root.book.generator.name' is not an array' in /Users/cordoval/Sites/schema_generate/src/RomaricDrigon/MetaYaml/NodeValidator/ArrayNodeValidator.php:14
Stack trace:
#0 /Users/cordoval/Sites/schema_generate/src/RomaricDrigon/MetaYaml/SchemaValidator.php(48): RomaricDrigon\MetaYaml\NodeValidator\ArrayNodeValidator->validate('root.book.gener...', Array, 'easybook')
#1 /Users/cordoval/Sites/schema_generate/src/RomaricDrigon/MetaYaml/NodeValidator/PrototypeNodeValidator.php(30): RomaricDrigon\MetaYaml\SchemaValidator->validateNode('root.book.gener...', 'array', Array, 'easybook')
#2 /Users/cordoval/Sites/schema_generate/src/RomaricDrigon/MetaYaml/SchemaValidator.php(48): RomaricDrigon\MetaYaml\NodeValidator\PrototypeNodeValidator->validate('root.book.gener...', Array, Array)
#3 /Users/cordoval/Sites/schema_generate/src/RomaricDrigon/MetaYaml/NodeValidator/ArrayNodeValidator.php(24): RomaricDrigon\MetaYaml\SchemaVali in /Users/cordoval/Sites/schema_generate/src/RomaricDrigon/MetaYaml/NodeValidator/ArrayNodeValidator.php on line 14

Fatal error: Uncaught exception 'RomaricDrigon\MetaYaml\Exception\NodeValidatorException' with message 'The node 'root.book.generator.name' is not an array' in /Users/cordoval/Sites/schema_generate/src/RomaricDrigon/MetaYaml/NodeValidator/ArrayNodeValidator.php on line 14

RomaricDrigon\MetaYaml\Exception\NodeValidatorException: The node 'root.book.generator.name' is not an array in /Users/cordoval/Sites/schema_generate/src/RomaricDrigon/MetaYaml/NodeValidator/ArrayNodeValidator.php on line 14

Call Stack:
    0.0002     231216   1. {main}() /Users/cordoval/Sites/schema_generate/run.php:0
    0.0467     887840   2. RomaricDrigon\MetaYaml\MetaYaml->validate() /Users/cordoval/Sites/schema_generate/run.php:19
    0.0467     888072   3. RomaricDrigon\MetaYaml\SchemaValidator->validate() /Users/cordoval/Sites/schema_generate/src/RomaricDrigon/MetaYaml/MetaYaml.php:61
    0.0467     888120   4. RomaricDrigon\MetaYaml\SchemaValidator->validateNode() /Users/cordoval/Sites/schema_generate/src/RomaricDrigon/MetaYaml/SchemaValidator.php:32
    0.0467     888248   5. RomaricDrigon\MetaYaml\NodeValidator\ArrayNodeValidator->validate() /Users/cordoval/Sites/schema_generate/src/RomaricDrigon/MetaYaml/SchemaValidator.php:48
    0.0467     888408   6. RomaricDrigon\MetaYaml\SchemaValidator->validateNode() /Users/cordoval/Sites/schema_generate/src/RomaricDrigon/MetaYaml/NodeValidator/ArrayNodeValidator.php:24
    0.0467     888536   7. RomaricDrigon\MetaYaml\NodeValidator\ArrayNodeValidator->validate() /Users/cordoval/Sites/schema_generate/src/RomaricDrigon/MetaYaml/SchemaValidator.php:48
    0.0468     889320   8. RomaricDrigon\MetaYaml\SchemaValidator->validateNode() /Users/cordoval/Sites/schema_generate/src/RomaricDrigon/MetaYaml/NodeValidator/ArrayNodeValidator.php:24
    0.0468     889448   9. RomaricDrigon\MetaYaml\NodeValidator\PrototypeNodeValidator->validate() /Users/cordoval/Sites/schema_generate/src/RomaricDrigon/MetaYaml/SchemaValidator.php:48
    0.0468     890176  10. RomaricDrigon\MetaYaml\SchemaValidator->validateNode() /Users/cordoval/Sites/schema_generate/src/RomaricDrigon/MetaYaml/NodeValidator/PrototypeNodeValidator.php:30
    0.0468     890304  11. RomaricDrigon\MetaYaml\NodeValidator\ArrayNodeValidator->validate() /Users/cordoval/Sites/schema_generate/src/RomaricDrigon/MetaYaml/SchemaValidator.php:48

Hi Luis,

There's a small error in your schema: a prototype is already an array (a repetition of items).

So you can either keep your schema and do:

    generator: 
        - { name: easybook, version: 5.0 }
        - { name: anotherGenerator, version: 4.0 }

Or the other way, keep your data and modify your schema to:

                generator:
                    _type: array
                    _children:
                        name:
                            _type: text
                        version:
                            _type: text

Please take a second look at the documentation, and tell me if things are not clear.
I'm not sure of what to do, but I'll try to enhance it.