<!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>Heterogeneity in NoSQL Databases - Challenges of Handling schema-less Data</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Mark Lukas Möller</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Dominique Hausler</string-name>
          <email>dominique.hausler@ur.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Sebastian Strasser</string-name>
          <email>sebastian.strasser@ur.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Tanja Auge</string-name>
          <email>tanja.auge@ur.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Meike Klettke</string-name>
          <email>meike.klettke@ur.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Faculty of Computer Science and Data Science, University of Regensburg</institution>
          ,
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>The schema flexibility of database management systems is often seen as an advantage, because it makes it easy to store all kinds of diferent data. Schema-less database systems (such as JSON or graph databases) allow structurally diferent data to be stored in the same database. It also allows storing diferent variants of data or data evolving over time. However, their use is much more complicated compared to relational data. In this paper, we show the impact of heterogeneity on two data processing steps: query execution and evolution operations including their composition and data transformation. From this, we will derive three proposals: (i) storing data with a partial schema management, (ii) vertical partitioning, and (iii) the usage of multi-model databases. In all cases, regular and irregular parts are distinguished in order to mitigate these efects of heterogeneity.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;NoSQL databases</kwd>
        <kwd>graph databases</kwd>
        <kwd>heterogeneity</kwd>
        <kwd>schema-less systems</kwd>
        <kwd>query execution</kwd>
        <kwd>schema evolution</kwd>
        <kwd>schema management</kwd>
        <kwd>vertical partitioning</kwd>
        <kwd>multi-model databases</kwd>
        <kwd>position paper</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        For a long time, the relational data model [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] and its regular structure with predefined fixed
schema and regular tuples was the standard model in databases. Subsequent data models (XML,
JSON, and graph data) have been developed with the aim to store heterogeneous data sets in
the same database. For this, the database management system allows either flexible schemas ,
schema definitions which are only optional, or even completely schema-less data. In the latter
case, no schema constraints are checked by the database management system.
      </p>
      <p>
        The benefits of these systems (XML, JSON and graph databases) were highly valued because
they can store all kinds of data. The disadvantages are equally obvious: when using schema-less
or schema-flexible databases, all structural variants of the data must be considered in all database
components and also their downstream applications that access the database. This leads to
additional challenges in a lot of database tasks. Significant efort was put into solving challenges
arising from the flexible schema imposed by NoSQL databases, e.g. schema design [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] and
modeling [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], data integration [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ], and data querying [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. In our own work regarding XML
databases and JSON data collections [
        <xref ref-type="bibr" rid="ref6 ref7 ref8 ref9">6, 7, 8, 9</xref>
        ] and our ongoing work in graph databases,
we have seen that many procedures already developed for the relational world are far more
complicated to implement for schema-flexible database management systems .
      </p>
      <p>
        When thinking about optimizing schema modifications, we had an initial presumption that
Schema Modification Operators (SMOs) similar to those suggested in [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] can be composed. For
example, if a new attribute  is inserted into a table  and later renamed to , it has the same
efect as if it has been inserted at once with the attribute name . In the relational world, for a
table  which does not contain an attribute  and , we can guarantee that the following two
operations on the left-hand side generate the same table as the operation on the right-hand side:
(alter table t add column A) + (alter table t rename column A to B)
→ alter table t add column B
Based on this experience from relational databases, we developed a common SMO composition
rule for JSON databases whereby  is an entity type and  and  are properties in :
add . + rename . to  → add .
      </p>
      <p>Applying these SMOs (add &amp; rename) to a JSON document, they are translated into data
migration operations. Because of schema-lessness, i.e., the lack of schema, we have to consider
the diferent variants of datasets. Figure 1 represents this example for an entity type Students
and the properties institution and university. Here, we see that the step-wise execution
of the two SMOs add and rename produces a diferent output than a composed execution. This
means that the composition rule does not hold for heterogeneous datasets.</p>
      <p>{ "id": 1, The example shows that
{ """"ifpfdira"rom:sfitel1sy,nsainmoaenm""e::":""As"ntSnucedh"em,nitd"t"}, add institution="UaRd"d+urneinvearmseitiny=s"tUiRt"ution to university { """"""""iuffppffdnairrai"imroomr:visffiselteelt1ryssy,snssninaiinatamooamymennme"e"""e"":::":=::""""""Ass"AUSnttSnRcnuucn"heddhem"eem"}i,nni,dttdt""t",,",, itanhl
weNapyoosSsQshiLbavileditayttoaobfcaoshenesstiedwreoer"university" = "UR" } geneity. In this paper, we
{ """""iffpidairn"mros:isftltei1yst,nsunaitamoimenoe""n"::"::"""Ms"SatFcruhhidGuae"l"nz,t}"", add institution="UaRd"d+urneinvearmseitiny=s"tUiRt"ution to university {{ """"""""iipuffffddrnaiia""oimrrm::fvissieelttl11sryy,,ssnniinaanotammanymeem""e""e:"::"=::"""s""AA"tFSnnSuhcnncdGheehe"m""mni,,it}dd"tt,"",,
eeprxroeegsceeunnteitoittnyhetahinmrdopuaegcvhtoolqufutheioernty"""piurnnosiftveiestrsusitioitnoy"n":"="=s"t"UuFRdh"eGn"}t,", operations including their
composition based on our</p>
      <p>Figure 1: Composition of two SMOs on a heterogeneous dataset experiences.</p>
      <p>We will use four diferent heterogeneity classes (HCs) , ranging from very regular (HC1) to very
irregular (HC4) (see Section 2). We will show how database subtasks have to be adapted to these
heterogeneity classes in Section 3. We start by querying heterogeneous data and show why it can
deliver unwanted results. Next, we define the semantics of database evolution operations for the
diferent HCs. Then, we describe why the composition of evolution operations becomes more
complicated the higher the heterogeneity level. Finally, we briefly explain data transformation
and query rewriting for the diferent heterogeneity classes. Based on these observations,
we propose diferent data storage solutions for hybrid data consisting of homogeneous and
heterogeneous parts (Section 4). Finally, we close with some ideas for future work.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Heterogeneity Classes</title>
      <p>
        Due to the inherent schema of NoSQL data, we can distinguish diferent levels of heterogeneity.
Data can be present in a completely homogeneous structure where each entity consists of the
same properties. However, it is also possible for properties to only occur in some entities. In
this case, the properties are considered as optional and the entities of the entity type are called
heterogeneous. We introduced four heterogeneity classes (HCs) which influence the complexity
of SMOs [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]:
      </p>
      <p>HC1: All entities of a database are homogeneous which
means they have the same implicit structure.</p>
      <p>Note: In the case of multi-type operations, i.e., using
data from two entity types, only 1:1 or 1:n
relationships occur without dangling tuples.</p>
      <p>HC2: Multi-type operations with 1:1 and 1:n
relationships can create dangling tuples, i.e., join operations
with datasets without a join partner.</p>
      <p>HC3: Multi-type operations with n:1 and n:m
relationships can create dangling tuples.
HC4: Databases can contain entities with diferent structures, i.e., two entities from the same
entity type can have diferent properties. Note: This heterogeneity class is the most
lfexible one. Every possible variant of the data must be considered in all operations.</p>
      <p>If we do not have further information, we always have to assume HC4 because there are
neither schema constraints nor semantic constraints which can be guaranteed. In contrast, if
HC1 can be assumed, querying and evolving databases is much easier. In Section 3, we will
demonstrate these two cases.</p>
    </sec>
    <sec id="sec-3">
      <title>3. Handling of Heterogeneous Data</title>
      <p>When databases are stored without a fixed schema, they can vary structurally from entity to
entity. Also, checking for semantic constraints is not part of the data insertion process. Thus, in
database management systems containing foreign key references, so-called dangling tuples can
occur. In this section, we will briefly outline a few cases that illustrate the impact of structural
heterogeneity and dangling tuples when using or querying data.</p>
      <p>Using and Querying Homogeneous and Heterogeneous Data To demonstrate the efects
of heterogeneity, let’s look at a concrete example implemented in MongoDB1. As seen in Figure 3,
the university database contains entities with diferent structures. For instance, the attributes
cId and courseId of the Student document with "id":2 both describe identical attributes,
1 MongoDB: https://www.mongodb.com/
{ "pid": 1,
"name": "Schmidt",
"profession": "student",
"university": "UR",
"courses": [{
"cId": "MEI-M01",
"semester": "SoSe_22“ }]}
{ "id": 2,
"name": "Schulz",
"institution": "UR",
"courses": [
{ "cId": "MEI-M01" },
{ “cId": "MEI-M05“ }]}</p>
      <p>Student
{ "id": 3,
"name":"Huber",
"profession":"student",
"institution": "UR" }
{ "cId": "MEI-M01",
"title": "Java",
"ECTS": 6 }
{ “courseId": "MEI-M05",
"title": "Python" }</p>
      <p>Course
but have diferent property 2 names. Another case of heterogeneity is the optionality of the
attribute profession. There is also a lack of courses in Student with "id":3. All in all,
the database can be classified as HC4 following the taxonomy defined in Section 2.
db.getCollection("Student").find(</p>
      <p>{ institution: "UR" }
)
db.Student.aggregate([{
$lookup: {
from: "Course",
localField: "courses.cId",
foreignField: "cId",
as: "courses"}
}])
Query 1: Querying the Student documents
with institution="UR" (in MongoDB)</p>
      <p>Query 2: Joining the collections Student and
Course by property cId (in MongoDB)
Example 1: Query 1 filters all Students by the condition institution="UR". The results,
shown in Query result 2, contains the Student documents with "id":2 and "id":3. Due to
variation in the attribute names (institution or university), the Student document with
"pid":1 is not in the result. Users unaware of the heterogeneity in their data could expect an
output of all three entities.
{ id: 2,
name: "Schulz",
institution: "UR",
courses: [
{ cId: "MEI-M01" },
{ cId: "MEI-M05" }]}
Query result 1: Results of Query 1
{ id: 3,
name: "Huber",
profession: "student",
institution: "UR" }
Example 2: Query 2 shows a join between the Student and Course documents. It yields
one course for Student documents each with "pid":1 and "id":2. This is a result of
performing the lookup function which corresponds to a left outer join with the condition Student.
courses.cId = Course.cId. Additionally, the Student document with "id":2 contains a
second course with "cId":"MEI-M05". This attribute has no joining partner in the Course
document. Because of the incorrect attribute name, courseId represents a dangling tuple.
2 Attributes and properties are used interchangeably as they describe the same element in diferent database
management systems.</p>
      <p>
        The result of the join between Student and Course documents are summarized in the Query
result 2. In this result, the Student document with "id":3 has a courses attribute containing
"courseId":"MEI-M05". This unexpected result is caused by the structural heterogeneity of
the Course document. The lookup function sets the value of the localField (in our example
the Student document with "id":3) and the foreignField (the Course document with
cId) to NULL. In the query execution, both values are NULL [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] and are therefore joined.
      </p>
      <p>To avoid this unwanted efect and address the problem of missing values being set to NULL,
one could introduce a match stage before executing the lookup function. This filters for Student
documents containing a courses attribute and is implemented in MongoDB as follows:
$match:{"courses":{"$exists":true,"$ne":[]}}}.
{ pid: 1,
name: "Schmidt",
profession: "student",
institution: "UR",
courses: [{
cId: "MEI-M01",
title: "Java",</p>
      <p>ECTS: 6 }]}
Query result 2: Results of Query 2
{ id: 2,
name: "Schulz",
institution: "UR",
courses: [{
cId: "MEI-M01",
title: "Java",
ECTS: 6 }]}
{ id: 3,
name: "Huber",
profession: "student",
institution: "UR",
courses: [{
title: "Python",
courseId: "MEI-M05" }]}</p>
      <p>Both example queries show cases where schema and integrity constraints cannot be
guaranteed and HC4 must be assumed. This leads to individual documents not being found by the
queries; concretely: the Student document with "pid":1 in Query 1 or the Course document
with "courseId":"MEI-M05" in Query 2. This is the case for both divergent property names
and dangling tuples. The heterogeneity of the data must be considered not only in queries, but
also in evolution. In the following, we will emphasize the dificulties heterogeneity brings in
this context.</p>
      <p>
        Semantics of Evolution Operations In databases which are used over a long time, evolution
operations like add, delete, rename, move, copy, split and merge must be performed. These
operations are suggested in several approaches for relational databases [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], XML [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ], JSON
databases [
        <xref ref-type="bibr" rid="ref14 ref15 ref16">14, 15, 16</xref>
        ], and for multi-model systems in [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ].
      </p>
      <p>The HCs of the data afect how complex the evolution operations become. This heterogeneity
classes hold for all schema-less databases. In the following, we define them for JSON database.
If we can start from data in HC1 (regular, relational-like data, no dangling tuple), an operation
add is defined as follows:</p>
      <p>HC1: add . =  ∀ ∈  : {..} − → {.., ”” : ””}.</p>
      <p>
        It specifies that a new property  with value  is added to all entities  of entity type . For a
detailed definition, we refer to [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ].
      </p>
      <p>If we execute the same operation on a dataset in HC4, we need to distinguish two cases:
HC4: add . =  :
{︃ ∈  :
 ∈/  :
{.., ”” : ””, ..} →− { .., ”” : ””, ..},
{..} →− { .., ”” : ””}.</p>
      <p>The attribute  can either already exist in the entity or not. Therefore, both cases must be
considered. There are two diferent semantics of the operation: overwrite and ignore. In case a
property is present and we are adding a property with the same key, then overwrite — as the
name already says — overwrites the value in the database. When following the ignore semantics,
the operation would be rejected keeping the previous value. In the definition of add . in
HC4 from above, the ignore semantics is given.</p>
      <p>In a similar way, we define a rename operation. Whereas in HC1 only one case sufices, for
HC4 we have to distinguish four cases:</p>
      <p>HC1: rename . to</p>
      <p>
        ∀ ∈  : {.., ”” : ””, ..} − → {.., ”” : ””, ..}.
⎪⎧⎪ ∈  ∧  ∈/  : {.., ”” : ””, ..} →− { .., ”” : ””, ..},
⎪⎪⎪⎪⎪ ∈  ∧  ∈  : {.., ”” : ””, ”” : ””..}
HC4: rename . to  : ⎨⎪⎪ →− { .., ”” : ””, ”” : ””, ..},
⎪⎪ ∈/  ∧  ∈  : {.., ”” : ””, ..} →− { .., ”” : ””, ..},
⎪
⎪⎪⎪⎪⎪ ∈/  ∧  ∈/  : {..} →− { ..}.
⎪
⎩
We want to mention that the definition for HC1 corresponds to the first case of the definition
for HC4. Again, we difer between the ignore and overwrite semantics. In the definition of
rename . to . in HC4 from above, the ignore semantics is used which avoids overwriting
already available properties. For using overwrite, which is overwriting the already available
properties, the definition of rename . to  has to be adapted. For details we refer to [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ].
      </p>
      <p>Most evolution approaches also ofer so-called multi-type operations like move, copy, split,
and merge for a complex restructuring. Here, we also see large diferences in the definitions of
semantics for diferent heterogeneity classes. We pick the move operation for HC1 and HC4 as
an example. We define move 1. to 2. where 1.1 = 2.2 for HC1:
∀ ∈ 1, ∀ ∈ 2 :  : {.., ”” : ””, ”1” : ””, ..},  : {.., ”2” : ””, ..}
→−  : {.., ”1” : ””, ..},  : {.., ”” : ””, ”2” : ””, ..}.</p>
      <p>The definition of the move operation also looks a lot more complex when assuming the datasets
are in HC4. Following are the diferent cases to be considered:
•  ∈  vs.  ∈/ 
• 1 ∈  vs. 1 ∈/ 
•  ∈  vs.  ∈/ 
• 2 ∈  vs. 2 ∈/ 
Combining these conditions, 24 = 16 diferent cases are resulting. All cases where a join
condition is not valid that means (1 ∈/  ∨ 2 ∈/  ) do not need to be considered furthermore.
We only have to distinguish and define four diferent cases in the semantics for the move
operation:
• ( ∈ ,  ∈ , 1 ∈ , 2 ∈ ),
• ( ∈ ,  ∈/ , 1 ∈ , 2 ∈ ),
• ( ̸∈ ,  ∈ , 1 ∈ , 2 ∈ ),
• ( ∈/ ,  ∈/ , 1 ∈ , 2 ∈ ).</p>
      <p>
        For the definition of all evolution operations in all heterogeneity classes, we again refer to [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ].
Composition of Operations for Heterogeneous Data When multiple evolution operations
need to be performed (e.g., legacy data that has to be updated over several versions), an
optimisation shall be applied. An obvious method is the composition of operations. In Figure 1,
a first example for a composition of an add and a subsequent rename operation was already
given. There are many other possible compositions that can be performed if we have the data
in HC1. Some examples are:
      </p>
      <p>We can distinguish three abstract classes for compositions: (i) adding and renaming can be
composed to a modified add operation, (ii) several rename operations can be combined, and (iii)
rename operations followed by a delete can be composed to a modified delete operation.</p>
      <p>
        In case we can assume HC1, the composed operations (right-hand side in the equations
of Figure 4) have the same efect as a step-wise execution (left-hand side). Data migration
operations are generated for each evolution operation. Consequently, reducing the number of
these evolution operations significantly improves performance . Let’s assume a NoSQL database
with 10000 entities and five evolution operations. In the step-wise execution, we have to apply
the data migration operations on 5 · 10000 entities. If we combine the operations into two
evolution operations, then we need to perform the corresponding data migration operations
on only 2 · 10000 entities. In [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] we have shown that using an operation caching improves the
run-time significantly. Therefore, a composition of evolution operations is recommended.
      </p>
      <p>
        In [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], we have defined which compositions are possible for all combinations of evolution
operations (add, delete, rename, move, and copy). This article was published some years
before we defined the HCs for NoSQL databases. We have used pre- and postconditions instead.
For example, for the composition of the operations add . + rename . to  (see Figure 1),
we have set the preconditions  ∈  and  ∈/ . Preconditions define the presence or absence
of properties and guarantee certain dataset characteristics. so that the composition to add .
in the example can be done. Each composition can only be applied if all preconditions hold.
      </p>
      <p>The postconditions define the conditions that hold after the execution of the evolution
operation. When applying several evolution operations, these conditions define the status of the
dataset after each operation execution. They are needed to determine how evolution operations
can be combined. Otherwise, i.e., in heterogeneity classes other than HC1, no composition is
possible and the evolution operations have to be applied step-wise instead.</p>
      <p>If we do not apply preconditions in the composition, we have to assume HC4. Thus, all
structural variants has to be defined in the composition. We want to explain this for the following
evolution operations:
→−
move 1. to 2 on 1. = 2. + rename 2. to</p>
      <p>move 1. to 2. on 1. = 2..</p>
      <p>In the prior paragraph, we have defined the move operation and the rename operation for HC4.
For both operations, we distinguished four cases. If we compose both operations then we have
to define 4 · 4 = 16 cases. We want to mention that besides the large efort to define all cases
separately, a composition is not possible in all cases. This short example shows how high the
efort for composition is in HC4.</p>
      <sec id="sec-3-1">
        <title>Database Transformation and Query Rewriting Database heterogeneity has to be consid</title>
        <p>ered in all database tasks. Two further examples focus on the transformation of heterogeneous
data into other formats and query rewriting.</p>
        <p>
          Data transformation has to consider all variants of the data. We assume that the database has
heterogeneous structures in the source. If we define a mapping between source and target format,
the transformations must be defined for all variants. For instance, if we use the local as view
(LaV) approach — originally developed in [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ] for relational data —, this leads to incomparably
larger transformation scripts. These scripts have to contain all variants of the input data.
        </p>
        <p>
          If we assume data in diferent formats, we have to use query rewriting. This is necessary
either in case of versioned databases or in data integration where we query against the global
schema and translate the queries into the structure of the local schemas. For both tasks, the
number of diferent cases that have to be defined depends on the heterogeneity class [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ].
        </p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4. Databases Designs for Heterogeneous Data</title>
      <p>
        In summary, as expected, all database tasks are more complex to perform for heterogeneous
databases. Nevertheless, we cannot avoid heterogeneity; in countless applications, it is visible
that not all data is structured in a regular way. And finally, the various developments of
schemaless database management systems show this need. How can one now manage this balancing
act between regular and irregular data? Our conclusion from the application examples listed in
this article is very simple: we propose hybrid methods storing a maximum amount of data under
schema control. For the rest of the data, we need the ability to store irregular data. Several
applications following this hybrid approach have been presented in literature. They deal with
the conjunction of relational databases with document stores [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] or graph databases [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ].
      </p>
      <p>These hybrid approaches can be implemented in three diferent ways (see Figure 5): (a) within
one NoSQL or graph database with partial schema control, (b) as a set of connected NoSQL or
graph databases (some with schema control and the others without), or (c) in a multi-model
database combining one relational database and NoSQL databases.</p>
      <sec id="sec-4-1">
        <title>JSON and Graph databases with partial schema control. NoSQL management systems</title>
        <p>
          like JSON and graph database systems added the opportunity to check schema constraints
(visualized in Figure 5(a)). A prominent example is MongoDB where users can specify a JSON
schema for a specific MongoDB collection [
          <xref ref-type="bibr" rid="ref21">21</xref>
          ]. With this specification, document validation
against a predefined schema is possible [
          <xref ref-type="bibr" rid="ref22">22</xref>
          ].
        </p>
        <p>Neo4J – as an example for a graph database – follows a similar approach, making it possible to
generate a partial schema control by defining an individual schema. Cypher ofers existence, type,
and uniqueness constraints, which are available for properties of either nodes or relationships.</p>
        <p>JSON
schema</p>
        <p>JSON
documents
(a) JSON documents with
partial schema control</p>
        <p>JSON
schema</p>
        <p>JSON
documents
JSON
documents</p>
        <p>JSON
documents</p>
        <p>JSON
documents</p>
        <p>JSON
documents</p>
        <p>JSON JSON
documents documents
(b) JSON documents, the central (c) Multi-model database: relational
documents under schema control database with JSON databases</p>
        <p>
          Vertical partitioning
Furthermore, key constraints can be defined for whole entities such as nodes or relations [
          <xref ref-type="bibr" rid="ref23">23</xref>
          ].
The constraints are checked upon creation or manipulation of data.
        </p>
        <p>
          Constraints can be used to avoid heterogeneity of data. In Figure 6 a Neo4J example is
shown. Here, a key constraint constraint_student on the Student nodes with properties
id, name, profession and institution is defined. The graph is based on the dataset of
Figure 3. When violating the constraint, an error message is generated. In Neo4J the command
SHOW CONSTRAINTS can be used to show all defined constraints.
Connected JSON or Graph databases. In this storage method, we propose vertical
partitioning, i.e., the splitting of attributes into groups and the distribution of these groups into
diferent tables [
          <xref ref-type="bibr" rid="ref24">24</xref>
          ]. In our case, the regular and irregular parts of a database are stored
separately in NoSQL (JSON or graph) databases. For the regular components, a NoSQL database with
schema control is used. This can be seen as the kernel of the dataset. The other portions contain
the heterogeneous parts of the datasets which could be imagined as satellites surrounding the
kernel. The connection between the diferent databases is realized by references (see Figure
5(b)). The same approach can also be used for graph databases.
        </p>
        <p>When looking at Figure 6, one example for this approach would be to save essential
information of a Student node as displayed in the constraint called constraint_student under
schema control matching the kernel. Additional optional information for each Student node
(e.g., a photo or her credit points) would be stored separately in the graph database.
Multi-model database. The storage method visualized in Figure 5(c) is quite similar to the
previous one. Instead of storing the regular parts in a NoSQL database under schema control
(see Figure 5(b)), a relational database is used. This relational database has the built-in feature
schema-first which guarantees schema constraints and ofers the opportunity to define further
semantic constraints. Similarly to the approach shown in Figure 5(b), the heterogeneous parts
are kept in JSON or graph databases. The connections between the datasets are realized by
references or other inter-model linkage constraints.</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>5. Conclusion and Future Work</title>
      <p>In recent years, the need to store heterogeneous data has become increasingly apparent. This
resulted in the development of diferent generations of database systems that allow the
heterogeneity of data (XML, JSON and graph databases). However, we conclude that one should keep
these heterogeneous parts as small as possible and store everything else relationally. With such
an approach, we can achieve a balance in data storage between the desirability of regularly
storing large chunks of homogeneous data and the need to store heterogeneous data externally.</p>
      <p>
        NoSQL databases like wide-column stores (Cassandra [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ]) and JSON databases (MongoDB
[
        <xref ref-type="bibr" rid="ref21">21</xref>
        ]) allow a (partial) schema definition. Therefore, they can be used for hybrid approaches
defined in Section 4. As graph databases such as Neo4J [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ] allow the definition of semantic
constraints, they could also make use of the suggested storage methods.
      </p>
      <p>
        In the past, reverse engineering approaches have been developed to derive the structures
[
        <xref ref-type="bibr" rid="ref16 ref26 ref27 ref28">16, 26, 27, 28</xref>
        ] and semantic constraints [
        <xref ref-type="bibr" rid="ref29">29</xref>
        ] from NoSQL data. There is still a need for such
components. Schema management for graphs is also an active research topic [
        <xref ref-type="bibr" rid="ref30">30</xref>
        ]. Derivation
of semantic constraints from graph data and multi-model data is part of our future work.
      </p>
      <p>Another interesting research direction is the consideration of hybrid databases in schema
optimization. The challenge is to distinguish between data that is better suited to be stored
in relational databases and data you are better of storing in nonrelational databases. Here,
diferent factors like storage size or query performance have to be considered.</p>
    </sec>
    <sec id="sec-6">
      <title>Acknowledgments</title>
      <p>The article is published in the scope of the project “NoSQL Schema Evolution und Big Data
Migration at Scale” which is funded by the Deutsche Forschungsgemeinschaft(DFG) under the
grant no. 385808805.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>E. F.</given-names>
            <surname>Codd</surname>
          </string-name>
          ,
          <article-title>Extending the Database Relational Model to Capture More Meaning</article-title>
          ,
          <source>ACM Trans. Database Syst</source>
          .
          <volume>4</volume>
          (
          <year>1979</year>
          )
          <fpage>397</fpage>
          -
          <lpage>434</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>M.</given-names>
            <surname>Shah</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Kothari</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Patel</surname>
          </string-name>
          ,
          <article-title>Influence of Schema Design in NoSQL Document Stores</article-title>
          ,
          <source>in: Mobile Computing and Sustainable Informatics</source>
          , Springer Singapore,
          <year>2022</year>
          , pp.
          <fpage>435</fpage>
          -
          <lpage>452</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>A.</given-names>
            <surname>Abubakar Imam</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Basri</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Ahmad</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Watada</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>González-Aparicio</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. A.</given-names>
            <surname>Almomani</surname>
          </string-name>
          ,
          <article-title>Data Modeling Guidelines for NoSQL Document-Store Databases</article-title>
          ,
          <source>International Journal of Advanced Computer Science and Applications</source>
          <volume>9</volume>
          (
          <year>2018</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>S.</given-names>
            <surname>Amghar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Cherdal</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Mouline</surname>
          </string-name>
          ,
          <article-title>Data Integration and NoSQL Systems: A State of the Art</article-title>
          , in: BDIoT, ACM,
          <year>2019</year>
          , pp.
          <volume>16</volume>
          :
          <fpage>1</fpage>
          -
          <lpage>16</lpage>
          :
          <fpage>6</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>H. B.</given-names>
            <surname>Hamadou</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Ghozzi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Péninou</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Teste</surname>
          </string-name>
          ,
          <article-title>Towards Schema-independent Querying on Document Data Stores</article-title>
          , in: DOLAP, volume
          <volume>2062</volume>
          <source>of CEUR Workshop Proceedings, CEUR-WS.org</source>
          ,
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>M. L.</given-names>
            <surname>Möller</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Klettke</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Hillenbrand</surname>
          </string-name>
          , U. Störl,
          <article-title>Query Rewriting for Continuously Evolving NoSQL Databases</article-title>
          , in: ER, volume
          <volume>11788</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2019</year>
          , pp.
          <fpage>213</fpage>
          -
          <lpage>221</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>M. L.</given-names>
            <surname>Möller</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Klettke</surname>
          </string-name>
          , U. Störl, Keeping NoSQL Databases Up to Date -
          <article-title>Semantics of Evolution Operations and their Impact on Data Quality</article-title>
          , in: LWDA, volume
          <volume>2454</volume>
          <source>of CEUR Workshop Proceedings, CEUR-WS.org</source>
          ,
          <year>2019</year>
          , pp.
          <fpage>25</fpage>
          -
          <lpage>37</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>M.</given-names>
            <surname>Klettke</surname>
          </string-name>
          ,
          <string-name>
            <given-names>U.</given-names>
            <surname>Störl</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Shenavai</surname>
          </string-name>
          , S. Scherzinger,
          <article-title>NoSQL schema evolution and big data migration at scale</article-title>
          , in: IEEE BigData, IEEE Computer Society,
          <year>2016</year>
          , pp.
          <fpage>2764</fpage>
          -
          <lpage>2774</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>U.</given-names>
            <surname>Störl</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Tekleab</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Klettke</surname>
          </string-name>
          ,
          <string-name>
            <surname>S.</surname>
          </string-name>
          <article-title>Scherzinger, In for a Surprise When Migrating NoSQL Data</article-title>
          , in: ICDE, IEEE Computer Society,
          <year>2018</year>
          , p.
          <fpage>1662</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>C.</given-names>
            <surname>Curino</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H. J.</given-names>
            <surname>Moon</surname>
          </string-name>
          , C. Zaniolo,
          <article-title>Graceful database schema evolution: the PRISM workbench</article-title>
          ,
          <source>Proc. VLDB Endow</source>
          .
          <volume>1</volume>
          (
          <year>2008</year>
          )
          <fpage>761</fpage>
          -
          <lpage>772</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <surname>MongoDB</surname>
          </string-name>
          , Inc., MongoDB documentation - $
          <source>lookup (aggregation)</source>
          , https://www.mongodb. com/docs/manual/reference/operator/aggregation/lookup/,
          <year>2023</year>
          . Accessed:
          <fpage>2023</fpage>
          -07-31.
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>K.</given-names>
            <surname>Herrmann</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Voigt</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Behrend</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Rausch</surname>
          </string-name>
          , W. Lehner,
          <article-title>Logical Data Independence in the 21st Century - Co-Existing Schema Versions with InVerDa</article-title>
          ,
          <source>CoRR abs/1608</source>
          .05564 (
          <year>2016</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>M.</given-names>
            <surname>Polák</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Chytil</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Jakubec</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Kudelas</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Piják</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Necaský</surname>
          </string-name>
          ,
          <string-name>
            <surname>I. Holubová</surname>
          </string-name>
          ,
          <article-title>Data and Query Adaptation Using DaemonX, Comput</article-title>
          .
          <source>Informatics</source>
          <volume>34</volume>
          (
          <year>2015</year>
          )
          <fpage>99</fpage>
          -
          <lpage>137</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>S.</given-names>
            <surname>Scherzinger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Klettke</surname>
          </string-name>
          , U. Störl,
          <article-title>Managing Schema Evolution in NoSQL Data Stores</article-title>
          , in: DBPL,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>A. H.</given-names>
            <surname>Chillón</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. S.</given-names>
            <surname>Ruiz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. G.</given-names>
            <surname>Molina</surname>
          </string-name>
          ,
          <article-title>Towards a Taxonomy of Schema Changes for NoSQL Databases: The Orion Language</article-title>
          , in: ER, volume
          <volume>13011</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2021</year>
          , pp.
          <fpage>176</fpage>
          -
          <lpage>185</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>P.</given-names>
            <surname>Suárez-Otero</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. J.</given-names>
            <surname>Mior</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. J. S.</given-names>
            <surname>Cabal</surname>
          </string-name>
          ,
          <string-name>
            <surname>J. Tuya,</surname>
          </string-name>
          <article-title>CoDEvo: Column family database evolution using model transformations</article-title>
          ,
          <source>J. Syst. Softw</source>
          .
          <volume>203</volume>
          (
          <year>2023</year>
          )
          <fpage>111743</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>P.</given-names>
            <surname>Koupil</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Bártík</surname>
          </string-name>
          ,
          <string-name>
            <surname>I. Holubová</surname>
          </string-name>
          ,
          <article-title>MM-evocat: A Tool for Modelling and Evolution Management of Multi-Model Data</article-title>
          , in: CIKM, ACM,
          <year>2022</year>
          , pp.
          <fpage>4892</fpage>
          -
          <lpage>4896</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>J. D.</given-names>
            <surname>Ullman</surname>
          </string-name>
          ,
          <article-title>Information integration using logical views</article-title>
          ,
          <source>Theoretical Computer Science</source>
          <volume>239</volume>
          (
          <year>2000</year>
          )
          <fpage>189</fpage>
          -
          <lpage>210</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>G.</given-names>
            <surname>Ongo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G. P.</given-names>
            <surname>Kusuma</surname>
          </string-name>
          ,
          <article-title>Hybrid Database System of MySQL and MongoDB in Web Application Development</article-title>
          , in: ICIMTech,
          <year>2018</year>
          , pp.
          <fpage>256</fpage>
          -
          <lpage>260</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>H.</given-names>
            <surname>Vyawahare</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Karde</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Thakare</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A Hybrid</given-names>
            <surname>Database</surname>
          </string-name>
          <article-title>Approach Using Graph and Relational Database</article-title>
          , in: RICE,
          <year>2018</year>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>4</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <surname>MongoDB</surname>
          </string-name>
          , Inc., MongoDB documentation - Specify JSON Schema Validation, https://www. mongodb.com/docs/manual/core/schema-validation/specify-json-schema/,
          <year>2023</year>
          . Accessed:
          <fpage>2023</fpage>
          -07-13.
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>F.</given-names>
            <surname>Pezoa</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. L.</given-names>
            <surname>Reutter</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Suárez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Ugarte</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Vrgoc</surname>
          </string-name>
          , Foundations of JSON Schema, in: WWW, ACM,
          <year>2016</year>
          , pp.
          <fpage>263</fpage>
          -
          <lpage>273</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <fpage>Neo4J</fpage>
          , Inc.,
          <source>Neo4J</source>
          Docs - Constraints, https://neo4j.com/docs/cypher-manual/current/ constraints/,
          <year>2023</year>
          . Accessed:
          <fpage>2023</fpage>
          -07-24.
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>S. B.</given-names>
            <surname>Navathe</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Ceri</surname>
          </string-name>
          , G. Wiederhold,
          <string-name>
            <given-names>J.</given-names>
            <surname>Dou</surname>
          </string-name>
          ,
          <article-title>Vertical Partitioning Algorithms for Database Design</article-title>
          ,
          <source>ACM Trans. Database Syst</source>
          .
          <volume>9</volume>
          (
          <year>1984</year>
          )
          <fpage>680</fpage>
          -
          <lpage>710</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <surname>Apache</surname>
            <given-names>Cassandra</given-names>
          </string-name>
          , Cassandra Docs - Defining Database Schema, https://cassandra.apache. org/doc/latest/cassandra/data_modeling/data_modeling_schema.html,
          <year>2023</year>
          . Accessed:
          <fpage>2023</fpage>
          -07-28.
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <given-names>D. S.</given-names>
            <surname>Ruiz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S. F.</given-names>
            <surname>Morales</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. G.</given-names>
            <surname>Molina</surname>
          </string-name>
          ,
          <article-title>Inferring Versioned Schemas from NoSQL Databases and Its Applications</article-title>
          , in: ER, volume
          <volume>9381</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2015</year>
          , pp.
          <fpage>467</fpage>
          -
          <lpage>480</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          [27]
          <string-name>
            <given-names>M.</given-names>
            <surname>Klettke</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Awolin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>U.</given-names>
            <surname>Störl</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Müller</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Scherzinger</surname>
          </string-name>
          ,
          <article-title>Uncovering the evolution history of data lakes</article-title>
          , in: IEEE BigData, IEEE Computer Society,
          <year>2017</year>
          , pp.
          <fpage>2462</fpage>
          -
          <lpage>2471</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          [28]
          <string-name>
            <given-names>P.</given-names>
            <surname>Koupil</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Hricko</surname>
          </string-name>
          ,
          <string-name>
            <surname>I. Holubová</surname>
          </string-name>
          ,
          <article-title>A universal approach for multi-model schema inference</article-title>
          ,
          <source>J. Big Data</source>
          <volume>9</volume>
          (
          <year>2022</year>
          )
          <fpage>97</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          [29]
          <string-name>
            <given-names>S.</given-names>
            <surname>Klessinger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Klettke</surname>
          </string-name>
          ,
          <string-name>
            <given-names>U.</given-names>
            <surname>Störl</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Scherzinger</surname>
          </string-name>
          ,
          <article-title>Extracting JSON Schemas with tagged unions</article-title>
          , in: DEco@VLDB, volume
          <volume>3306</volume>
          <source>of CEUR Workshop Proceedings, CEUR-WS.org</source>
          ,
          <year>2022</year>
          , pp.
          <fpage>27</fpage>
          -
          <lpage>40</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          [30]
          <string-name>
            <given-names>A.</given-names>
            <surname>Bonifati</surname>
          </string-name>
          ,
          <article-title>The Quest for Schemas in Graph Databases (keynote)</article-title>
          ,
          <source>in: DOLAP</source>
          , volume
          <volume>3369</volume>
          <source>of CEUR Workshop Proceedings, CEUR-WS.org</source>
          ,
          <year>2023</year>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>2</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>