On Thu, Mar 2, 2023, at 6:34 AM, Jakub Zelenka wrote:
> On Thu, Mar 2, 2023 at 12:00 PM Rowan Tommins <rowan.coll...@gmail.com>
> wrote:
>
>> On Wed, 1 Mar 2023 at 11:44, juan carlos morales <
>> dev.juan.mora...@gmail.com>
>> wrote:
>>
>> > I am thinking about enhancing this function to also be able to
>> > validate against a JSON SCHEMA, giving us something like this:
>> >
>> > json_validate(string $json, int $depth = 512, int $flags = 0, string
>> > $json_schema = null): bool
>> >
>>
>>
>> Functionally, I think this is sounds great. My only concern is that JSON
>> Schema is a bit of a moving target. Unlike XSD, which has only ever had two
>> revisions, 10 years apart (1.0 from 2001, and 1.1 from 2012), JSON Schema
>> is in active development, with "Draft-07", "2019-09", and "2020-12" all
>> seeing deployment as stable releases, and work in progress on a new
>> version: https://github.com/json-schema-org/json-schema-spec/milestone/7
>>
>> That raises two questions:
>>
>> * Which existing version(s) of the specification will be implemented? For
>> instance, if I have a schema written for 2019-09 rather than 2020-12, will
>> I be able to use this validator?
>>
>
> The plan is to support draft-04 and all later ones. So yeah you should be
> able to support both once they are implemented. I'm starting with draft-04
> and will add others in the order they were created.
>
>
>> * How will new versions of the specification be added to the parser? If PHP
>> 8.4 is release in November 2024, and JSON Schema 2025-01 is published two
>> months later, will I need to wait for PHP 8.5 to use the new specification?
>>
>>
> It would be a feature so the next minor.
>
>
>> I guess the combination of those leads to a third question: will support
>> for some versions be *removed* in later PHP versions, so that each PHP
>> version will have a minimum and maximum schema version it supports?
>>
>>
> It's possible that we might decide to stop supporting some drafts if the
> maintenance burden is too big and usage small but I wouldn't see that as
> something that happens often. But essentially you are right that there will
> be minimum (draft-04 initially) and maximum (latest implemented draft).
>
>
>> That's the big disadvantage of anything shipped in core, rather than in an
>> extension or library - there is no way to make even minor changes outside
>> of PHP's release cycle.
>>
>>
> The changes are going to be first added to PECL jsond which will support
> PHP 7.2+ for some time. I will most likely keep it updated for later drafts
> additions so it could be still used for older versions of PHP.
>
>
>> I wonder if there's some way this can be made pluggable - ship the core
>> mechanisms needed by the validator in core, but make them accessible to
>> libraries to implement specific specifications in an efficient way. This is
>> the approach taken by the MongoDB PHP driver - there's a stable extension
>> providing efficient low-level routines, then a decoupled PHP library which
>> can be installed at the project level, and follow a much more agile release
>> process. I'm not sure what it would look like in this case, but may be
>> worth considering.
>>
>>
> This might be quite technically challenging and also significantly
> impacting performance of parsing so I wouldn't see this happening - at
> least not initially.
>
> Regards
>
> Jakub

This may be a place where good OO design helps.  Thinking aloud:

$schema = new JsonSchemaDraft4($schema_string);

$schema->validate($json_string): bool;

$otherSchema = new JsonSchemaDraft5($other_schema);

etc.

If there's a common JasonSchema interface for them all, it would also be 
possible to polyfill the classes in user-space that way.  The C-provided 
classes could of course share whatever underlying code makes sense for them to 
share.

--Larry Garfield

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php

Reply via email to