<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>A Test Suite for JSON Schema Containment?</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Lyes Attouche</string-name>
          <email>lyes.attouche@dauphine.fr</email>
          <xref ref-type="aff" rid="aff3">3</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Mohamed-Amine Baazizi</string-name>
          <email>baazizi@ia.lip6.fr</email>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Dario Colazzo</string-name>
          <email>dario.colazzo@dauphine.fr</email>
          <xref ref-type="aff" rid="aff3">3</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Yunchen Ding</string-name>
          <xref ref-type="aff" rid="aff4">4</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Michael Fruth</string-name>
          <email>michael.fruth@uni-passau.de</email>
          <xref ref-type="aff" rid="aff4">4</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Giorgio Ghelli</string-name>
          <email>ghelli@di.unipi.it</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Carlo Sartiani</string-name>
          <email>carlo.sartiani@unibas.it</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Stefanie Scherzinger</string-name>
          <email>stefanie.scherzinger@uni-passau.de</email>
          <xref ref-type="aff" rid="aff4">4</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>DIMIE, Università della Basilicata</institution>
          ,
          <country country="IT">Italy</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Dipartimento di Informatica, Università di Pisa</institution>
          ,
          <country country="IT">Italy</country>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>Sorbonne Université</institution>
          ,
          <addr-line>LIP6 UMR 7606</addr-line>
          ,
          <country country="FR">France</country>
        </aff>
        <aff id="aff3">
          <label>3</label>
          <institution>Université Paris-Dauphine &amp; Université PSL, CNRS, LAMSADE</institution>
          ,
          <addr-line>Paris</addr-line>
          ,
          <country country="FR">France</country>
        </aff>
        <aff id="aff4">
          <label>4</label>
          <institution>University of Passau</institution>
          ,
          <addr-line>Passau</addr-line>
          ,
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <fpage>19</fpage>
      <lpage>25</lpage>
      <abstract>
        <p>JSON is a very popular data exchange format, and JSON Schema an increasingly popular schema language for JSON. Evidently, schemas play an important role in implementing conceptual models. For JSON Schema, there is a first generation of tools for checking whether one schema is contained in another. This is an important task when comparing schemas, and ultimately, the conceptual models that they capture. Testing whether such tool implementations are correct is difficult, since writing test cases requires a deep understanding of the JSON Schema language. In this demo, we present the first systematically generated test suite for JSON Schema containment checking. This test suite consists of pairs of schemas where the containment relationship is known by construction. Our test suite aims at covering all language features of JSON Schema. Applying existing containment checkers (including our own implementation) to our test suite, we discovered implementation bugs not known to us. We offer our test suite to the research community as well as to tool developers, hoping to contribute to the development of JSON Schema containment checkers.</p>
      </abstract>
      <kwd-group>
        <kwd>JSON Schema Containment Checking</kwd>
        <kwd>Test Suite</kwd>
        <kwd>Comparing Conceptual Models</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>Nowadays, the most widely used data exchange format is JSON, thanks to its
flexibility and its ability to represent both objects and sequences. JSON Schema
is increasingly adopted for specifying and validating JSON instances. Software
systems exposed as API rely on JSON Schema to express the shape of the
? This contribution was partly supported by the Deutsche Forschungsgemeinschaft
(DFG, German Research Foundation) – 385808805.</p>
      <p>
        Copyright © 2021 for this paper by its authors. Use permitted under Creative
Commons License Attribution 4.0 International (CC BY 4.0).
expected request and the format of the returned data. Some machine learning
libraries [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] also resort to JSON Schema to verify the input-output compatibility
of the pipelines operators. Hence, it becomes paramount to develop tools for
deciding whether the set of instances of one schema are included in the set of
instances of another schema, that is, to check schema containment.
      </p>
      <p>
        In the case of JSON, checking for schema containment can be particularly
challenging, as JSON Schema [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], the de-facto standard schema language for
JSON data [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], is extremely powerful, but also complex (especially when
negation is involved [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]). As an example, consider the assertion “items”: {“type”:
“integer”} in schema 2 from Figure 1 ( 2 ). This assertion states that the
elements in an array can be integers only, but the assertion is also satisfied by any
JSON value that is not an array.
      </p>
      <p>When comparing two schemas, or two versions of some schema, a crucial
question is how these schemas relate. For instance, in Figure 1, the left schema
(here, an array of three integer constants) is contained in the right: Any instance
valid w.r.t. the left schema is also valid w.r.t. the right schema, but not vice versa.</p>
      <p>
        Syntax-driven approaches for checking schema containment cannot be easily
adapted, nor tree-automata approaches, as used for XML types [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. Indeed,
JSON Schema is inherently more expressive than XML Schema [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ], given the
presence of the uniqueItems assertion; in a similar way, approaches based on
stacks and regular expression inclusion algorithms cannot cope with the
constraints of JSON Schema. More sophisticated approaches are required. First
proposals have been made [
        <xref ref-type="bibr" rid="ref10 ref2">2, 10</xref>
        ], yet given the lack of a trusted testbed,
checking the correctness of such tools remains a challenge [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ].
      </p>
      <p>
        Our Contributions. We propose here a test suite for checking JSON Schema
containment. Our test suite comprises pairs of schemas and the schema containment
result. We made the deliberate decision to not hand-craft our test suite, or use
real-world examples, as this would make it vulnerable to errors. Rather, we
derive all tests from an existing ground truth, the JSON Schema Test Suite [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] (a
collection of schema validation tests, which is a different and well-explored task).
By design, our test suite covers all keywords in the JSON Schema language.
      </p>
      <p>We have made our test suite available as open source. Our Zenodo archive
at https://zenodo.org/record/5336931 also links to our GitHub repository.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Preliminaries</title>
      <p>JSON data model. The grammar below captures the syntax of JSON values,
which are basic values, objects, or arrays. Basic values B include the null value,
booleans, numbers n, and strings s. Objects O represent sets of members, each
member being a name-value pair, and arrays A represent sequences of values.</p>
      <p>J ::= B | O | A
B ::= null | true | false | n | s
O ::= {l1 : J1, . . . , ln : Jn}
A ::= [J1, . . . , Jn]
n ∈ Num, s ∈ Str
n ≥ 0, i 6= j ⇒ li 6= lj
n ≥ 0</p>
      <p>JSON expressions</p>
      <p>Basic values</p>
      <p>
        Objects
Arrays
JSON Schema. JSON Schema is a language for defining the structure of JSON
documents. The syntax and semantics of JSON Schema have been formalized
in [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] (following Draft-04), and we merely present the main keywords informally:
Assertions include required, enum, const, pattern and type, and indicate a
test that is performed on the corresponding instance.
      </p>
      <p>Applicators include the boolean operators anyOf, allOf, oneOf, not, the
object operators properties, patternProperties, additionalProperties,
the array operator items, and the reference operator $ref. They indicate a
request to apply a different operator to the same instance or to a component
of the current instance.</p>
      <p>
        Annotations include title, description, and $comment, they do not affect
validation but they indicate an annotation associated to the instance.
JSON Schema Validation. In validating a JSON instance against a schema,
we check whether the instance is valid w.r.t. the schema. Implementations are
available in most common programming languages [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. The JSON Schema Test
Suite [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] is a collection of tests for validators, covering the entire JSON Schema
language. Figure 2 shows a sample test case on the left, which we discuss further
below. Programmers write a script in their preferred programming language, to
parse this JSON-encoded input, and to perform unit tests, e.g., as done in [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ].
Example 1. We present the general idea behind the test case in Figure 2 (left).
The schema to be tested starts in line 3. It declares that if the instance is an
array, then all items must be integer-typed. The data instances to be tested are
contained in lines 9, 14, and 19. Lines 10, 15, and 20 state whether the data is
a valid instance w.r.t. the schema. Note that due to the conditional semantics
of JSON Schema, the object in line 19 is indeed a valid instance, because the
integer-type assertion only applies if the instance is an array.
1 {
2 " description ": " schema for items",
3 " schema ": {
4 "items ": {" type ": " integer "}
5 },
se67 "{tests ": [
aC98 ""ddaetsacr":ipt[io1n,":2,"3val]i,d items",
ts10 "valid ": true
eT1121 }{,
n13
o
i14
t
a15
id16
l
a17
V18
19
20
21 }
22 ]
23 }
" description ": "wrong type items",
"data ": [1, "x"],
"valid ": false
},
{
" description ": " ignore non - arrays ",
"data ": {" foo" : "bar "},
"valid ": true
e121 {
s3
a4
t5
C
s6
e7
. 8
T
t9
10
n
o
C11 }
      </p>
      <p>
        }
1 {
2
e234
s5
a6
t7
C
s8
e9
10
T
.
t11
12
n
o
13
C
14 }
15 }
" schema1 ": {
"const ": [
        <xref ref-type="bibr" rid="ref1 ref2 ref3">1, 2, 3</xref>
        ]
},
" schema2 ": {
"items ": { "type ": " integer " }
},
"tests ": {
" s1SubsetEqOfs2 ": true
" schema1 ": {
"allOf ": [
{ "items ": { "type ": " integer " } },
{ "not ":
{ "items ": { "type ": " integer " } }
}
]
},
" schema2 ": false ,
"tests ": {
" s1SubsetEqOfs2 ": true ,
" s2SubsetEqOfs1 ": true
JSON Schema Containment. In the following, we write S ⊆ S0 to denote that
schema S is contained in S0, meaning that any JSON instance valid w.r.t. S is
also valid w.r.t. S0. We write S ≡ S0 to denote schema equivalence, which can
be checked by double inclusion. While JSON Schema validation can be checked
in polynomial time, containment checking results to be EXPTIME-hard [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ].
3
      </p>
      <p>The JSON Schema Containment Test Suite
We next describe how we construct our test suite for checking JSON Schema
containment, by programmatically deriving tests from the validation test suite.
Our main approach is to use the Boolean operators not (for negation), anyOf
(for disjunction), and allOf (for conjunction), to derive pairs of schemas such
that we have a clear understanding of their containment relationship.
Example 2. Let us consider Figure 2. To the left, we see the test case of the JSON
Schema Test Suite discussed earlier. To the right, we see two derived test cases:
Containment Test Case 1 is an alternative encoding of the first validation test
from the left: schema1 declaring an array constant with three integer members
(derived from line 9 on the left) is contained in schema2 (derived from line 3 on
the left). Line 9 states this relationship.</p>
      <p>Test Case 2 is based on a different idea. Line 3 requires that two subschemas
must be matched in a way that is unsatisfiable, the one in line 4 (taken from
the validation test), and its negation. In line 10, we declare the unsatisfiable
schema false. Here, schema1 and schema2 are equivalent (see lines 12 and 13).
While this may seem obvious to human observers, it can be challenging for tools.
We next describe how we systematically derive our test cases.</p>
      <p>
        Reflexivity. For each schema S, it holds that S ≡ S. While this might seem
trivial, it is nevertheless a challenge for existing implementations [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ].
Validation. For each valid instance v of a schema S, we encode the validation:
{ "const": v }
      </p>
      <p>⊆
{ "const": v } 6⊆</p>
      <p>S
{ "not": S }
(1)
(2)
Given all valid instances v1, . . . , vn from a validation test, we further derive
{ “anyOf”: [{ “const”: v1 }, ..., { “const”: vn }] }
⊆</p>
      <p>S
Correspondingly, for each invalid instance i, we derive a test case
{ “const”: i } 6⊆</p>
      <p>S
Empty and universal language. Given a schema S, we derive an unsatisfiable
schema, i.e., a schema equivalent to the schema false.</p>
      <p>{ “allOf”: [S, { “not”: S }] }
false</p>
      <p>
        Similarly, we declare a schema that is universally satisfied (true), by
replacing the conjunction allOf by the disjunction anyOf:
{ “anyOf”: [S, { “not”: S }] }
true
≡
≡
Test case statistics. We provide test cases for all adopted drafts (six at the time
of writing) of JSON Schema. Specifically, for Draft 6, we derive 2 120 schema
pairs. In 60%, the first is a subset of the second. By not exclusively generating
test cases where the first schema is contained in the second, containment checkers
that always declare the first schema to be a subset of the second will fail in 40%.
Putting the Test Suite to the Test. We have used our test suite to assess the
language coverage of our own containment checker [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], as well as of two preceding
implementations [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. For all tools, we found gaps in coverage. For our own tool [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ],
we identified a failure rate of 25%. Discussing the problematic schemas in detail
is beyond the scope of this demo proposal. Overall, as the test suite was able to
reveal actual problems, we find it vastly helpful for our purposes.
      </p>
    </sec>
    <sec id="sec-3">
      <title>Demonstration Scenario</title>
      <p>We next outline our planned demonstration scenario.
1. We introduce our audience to the JSON Schema language and its semantics.</p>
      <p>
        We illustrate how this language can capture complex conceptual models.
2. We review the JSON Schema Test suite, originally designed for validation
experiments. We then show how we derive containment tests.
3. We engage our attendees in a mini game, where we employ our interactive
schema management tool Josch [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]1. We pre-load the test schemas in Josch,
and show them side-by side, as seen in Figure 1 ( 1 and 2 ).
      </p>
      <p>– We ask our attendees to vote (e.g., using an online polling tool) whether
they regard one schema to be a subschema of the other.
– We resort to existing tools for checking JSON Schema containment ( 3
in the screenshot), to compare the shown schemas. Our attendees will
notice that there are tests where the tool implementations do not agree.
– We reveal the answer to containment checking, based on our test suite.
We plan our mini game as an entertaining and engaging way to quickly
gain a certain level of understanding of the JSON Schema language, and
to recognize the need for a well-principled schema containment test suite.
We hope that by participating in our demo, the demo attendees will find
inspiration for their own research in the conceptual modeling field.
Acknowledgments. We thank Luca Escher (University of Passau) for code quality
assurance and Wolfgang Mauerer (Technical University of Applied Sciences Regensburg)
for sharing the LaTeX template used to create Figure 2.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>JSON</given-names>
            <surname>Schema</surname>
          </string-name>
          <article-title>Validators</article-title>
          . Available at: https://json-schema.org/ implementations.html (
          <year>2021</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Attouche</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Baazizi</surname>
            ,
            <given-names>M.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Colazzo</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Falleni</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ghelli</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Landi</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sartiani</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Scherzinger</surname>
            ,
            <given-names>S.:</given-names>
          </string-name>
          <article-title>A Tool for JSON Schema Witness Generation</article-title>
          .
          <source>In: Proc. EDBT</source>
          . pp.
          <fpage>694</fpage>
          -
          <lpage>697</lpage>
          (
          <year>2021</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Baazizi</surname>
            ,
            <given-names>M.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Colazzo</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ghelli</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sartiani</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <article-title>Schemas And Types For JSON Data</article-title>
          .
          <source>In: Proc. EDBT'19</source>
          . pp.
          <fpage>437</fpage>
          -
          <lpage>439</lpage>
          (
          <year>2019</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Baudart</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hirzel</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kate</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ram</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Shinnar</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Lale: Consistent automated machine learning</article-title>
          .
          <source>In: KDD Workshop on Automation in Machine Learning</source>
          (
          <year>2020</year>
          ), https://arxiv.org/abs/
          <year>2007</year>
          .01977
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Bazizi</surname>
            ,
            <given-names>M.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Colazzo</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ghelli</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sartiani</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Scherzinger</surname>
            ,
            <given-names>S.:</given-names>
          </string-name>
          <article-title>An Empirical Study on the “Usage of Not” in Real-World JSON Schema Documents</article-title>
          .
          <source>In: Proc. ER</source>
          (
          <year>2021</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Bourhis</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Reutter</surname>
            ,
            <given-names>J.L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Suárez</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Vrgoc</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          : JSON:
          <article-title>Data model, Query languages and Schema specification</article-title>
          .
          <source>In: Proc. PODS</source>
          . pp.
          <fpage>123</fpage>
          -
          <lpage>135</lpage>
          (
          <year>2017</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Ebdrup</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>JSON Schema Benchmark</article-title>
          . Available at: https://github.com/ ebdrup/json-schema-benchmark, version of commit hash: #
          <year>e9c884f</year>
          . (
          <year>2021</year>
          )
          <article-title>1 Note that our demo proposal does not feature Josch as its contribution, but our JSON Schema containment test suite. We merely use Josch as a convenient editor</article-title>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Fruth</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Baazizi</surname>
            ,
            <given-names>M.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Colazzo</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ghelli</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sartiani</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Scherzinger</surname>
            ,
            <given-names>S.:</given-names>
          </string-name>
          <article-title>Challenges in Checking JSON Schema Containment over Evolving Real-World Schemas</article-title>
          .
          <source>In: Proc. EmpER</source>
          . pp.
          <fpage>220</fpage>
          -
          <lpage>230</lpage>
          (
          <year>2020</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Fruth</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Dauberschmidt</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Scherzinger</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          : Josch:
          <article-title>Managing Schemas for NoSQL Document Stores</article-title>
          .
          <source>In: Proc. ICDE</source>
          . pp.
          <fpage>2693</fpage>
          -
          <lpage>2696</lpage>
          (
          <year>2021</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Habib</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Shinnar</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hirzel</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pradel</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Finding Data Compatibility Bugs with JSON Subschema Checking</article-title>
          . In: ISSTA. p.
          <fpage>620</fpage>
          -
          <lpage>632</lpage>
          (
          <year>2021</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <article-title>json-schema-org: JSON Schema (</article-title>
          <year>2021</year>
          ), available at: https://json-schema.org
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <article-title>json-schema.org: JSON Schema Test Suite</article-title>
          . Available online at https://github. com
          <article-title>/json-schema-org/JSON-Schema-Test-Suite, commit hash: #09fd353</article-title>
          . (
          <year>2021</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Pezoa</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Reutter</surname>
            ,
            <given-names>J.L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Suárez</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ugarte</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Vrgoc</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Foundations of JSON Schema</article-title>
          .
          <source>In: Proc. WWW</source>
          . pp.
          <fpage>263</fpage>
          -
          <lpage>273</lpage>
          (
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Tozawa</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hagiya</surname>
            ,
            <given-names>M.:</given-names>
          </string-name>
          <article-title>XML schema containment checking based on semi-implicit techniques</article-title>
          .
          <source>In: CIAA</source>
          . pp.
          <fpage>213</fpage>
          -
          <lpage>225</lpage>
          (
          <year>2003</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>