sentinelphp/schema

JSON Schema generation, merging, and validation library

Maintainers

Package info

github.com/SentinelPHP/Schema

Homepage

Issues

pkg:composer/sentinelphp/schema

Statistics

Installs: 0

Dependents: 1

Suggesters: 0

Stars: 0

v1.0.1 2026-04-27 12:16 UTC

This package is auto-updated.

Last update: 2026-04-27 12:21:49 UTC


README

Latest Version License

JSON Schema generation, merging, and validation library.

Installation

composer require sentinelphp/schema

Features

  • Generate JSON Schema from sample data
  • Merge multiple schemas together
  • Validate data against schemas

Usage

Schema Generation

use SentinelPHP\Schema\Generator;
use SentinelPHP\Schema\Config\GeneratorConfig;

$generator = new Generator();

$data = [
    'id' => 123,
    'name' => 'John Doe',
    'email' => 'john@example.com',
    'created_at' => '2024-01-15T10:30:00Z',
];

$schema = $generator->generate($data);
// Returns JSON Schema with inferred types and formats

Schema Merging

use SentinelPHP\Schema\Merger;

$merger = new Merger();

$schema1 = ['type' => 'object', 'properties' => ['id' => ['type' => 'integer']]];
$schema2 = ['type' => 'object', 'properties' => ['name' => ['type' => 'string']]];

$merged = $merger->merge($schema1, $schema2);
// Combines properties, widens types, intersects required fields

Schema Validation

use SentinelPHP\Schema\Validator;

$validator = new Validator();

$schema = [
    'type' => 'object',
    'properties' => [
        'email' => ['type' => 'string', 'format' => 'email'],
    ],
    'required' => ['email'],
];

$result = $validator->validate(['email' => 'invalid'], $schema);

if (!$result->isValid()) {
    foreach ($result->getErrors() as $error) {
        echo $error->path . ': ' . $error->message;
    }
}

Partial Validation

Validate only the fields present in the payload:

$result = $validator->validatePartial($partialData, $schema);

Configuration

use SentinelPHP\Schema\Config\GeneratorConfig;

$config = new GeneratorConfig(
    strictMode: true,           // Require all observed fields
    nullableFields: false,      // Don't allow null by default
    additionalProperties: false // Disallow extra properties
);

$generator = new Generator();
$schema = $generator->generate($data, $config);

License

GPL v3 — see LICENSE for details