<!DOCTYPE html><html><head><title></title></head><body><div><br></div><div>To follow-up on the naive schema creator:</div><div><br></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">#!/</span><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">usr/bin/env perl</span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;"><br></span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">use 5.42.0;</span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">use warnings;</span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">use Ref::Util  qw/ is_plain_arrayref is_plain_hashref /;</span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">use List::Util qw/ pairmap /;</span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">use builtin 'created_as_number';</span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">use YAML;</span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;"><br></span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">use File::Serialize;</span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;"><br></span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">my $example = deserialize_file shift;</span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;"><br></span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">say YAML::Dump( schematize($example) );</span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;"><br></span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">sub schematize($example) {</span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">  my %schema;</span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;"><br></span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">  if ( is_plain_hashref $example ) {</span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">    $schema{type}       = 'object';</span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">    $schema{properties} = +{ pa</span><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">irmap { $a => schematize($b) } %$example };</span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">  }</span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">  elsif ( is_plain_arrayref $example ) {</span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">    $schema{type}  = 'array';</span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">    $schema{items} = { anyOf => [ map { schematize($_) } @$example ] };</span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">  } </span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">  else {</span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">    $schema{type} = created_as_number $example ? 'number' : 'string';</span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">  }</span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;"><br>  return \%schema;</span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">}</span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;"><br></span></div><div><span class="font" style="font-family:menlo, consolas, monospace, sans-serif;">__END__</span></div><div><br></div><div>It's not clever, but it'll provide you with a starting skeleton. And something to think about with those super-complex documents is those { $ref: .. } links to keep things small and manageable.</div><div><br></div><div>Joy,</div><div>`/anick</div><div><br></div><div><br></div><div>On Thu, 28 May 2026, at 6:17 PM, Olaf Alders wrote:</div><blockquote type="cite" id="qt" style=""><div><br></div><div><a href="https://luma.com/k73djcf1">https://luma.com/k73djcf1</a></div><div>_______________________________________________</div><div>toronto-pm mailing list</div><div><a href="mailto:toronto-pm@pm.org">toronto-pm@pm.org</a></div><div><a href="https://mail.pm.org/mailman/listinfo/toronto-pm">https://mail.pm.org/mailman/listinfo/toronto-pm</a></div><div><br></div></blockquote><div><br></div></body></html>