<!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>
      <journal-title-group>
        <journal-title>D. V. Assche); x.sittminoo@ugent.be (S. M. Oo);
julianandres.rojasmelendez@ugent.be (J. A. Rojas); pieter.colpaert@ugent.be (P. Colpaert)
 https://dylanvanassche.be/ (D. V. Assche); https://julianrojas.org/ (J. A. Rojas); https://pietercolpaert.be/
(P. Colpaert)</journal-title>
      </journal-title-group>
    </journal-meta>
    <article-meta>
      <title-group>
        <article-title>Continuous generation of versioned collections' members with RML and LDES</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Dylan Van Assche</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Sitt Min Oo</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Julián Andrés Rojas</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Pieter Colpaert</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>IDLab, Department of Electronics and Information Systems, Ghent University - imec</institution>
          ,
          <addr-line>Technologiepark-Zwijnaarde 122, 9052 Ghent</addr-line>
          ,
          <country country="BE">Belgium</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2022</year>
      </pub-date>
      <volume>000</volume>
      <fpage>0</fpage>
      <lpage>0002</lpage>
      <abstract>
        <p>When evolving datasets are used to generate a knowledge graph, it is usually challenging to keep the graph synchronized in a timely manner when changes occur in the source data. Current approaches fully regenerate a knowledge graph in such cases, which may be time consuming depending on the data type, size, and update frequency. We propose a continuous knowledge graph generation approach that can be applied on diferent types of data sources. We describe continuously updating knowledge graph versions represented as a Linked Data Events Stream, and use an rml processor for rdf generation. In this paper, we present our approach and demonstrate it on diferent types of data such as bike-sharing, public transport timetables, and weather data. By describing entities with unique, immutable, and reproducible iris, we were able to identify changes in the original data collection, reducing the number of materialized triples and generation time. Our use-cases show the importance of mechanisms to derive unique and stable iri strategies of data source updates, to enable eficient knowledge graph generation pipelines. In the future, we will extend our approach to handle deletions in data collections, and conduct an extensive performance evaluation.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;RDF Mapping Language (RML)</kwd>
        <kwd>Function Ontology (FnO)</kwd>
        <kwd>Linked Data Event Stream (LDES)</kwd>
        <kwd>update</kwd>
        <kwd>immutable</kwd>
        <kwd>knowledge graph</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        Knowledge graphs (kg) usually coexist and integrate with heterogeneous and non-rdf data
sources via mapping rules. The result of executing such mapping rules is commonly a data
dump that represents a snapshot of the kg at a certain time. However, in practice, kgs and their
sources may evolve making it dificult for data publishers to keep the kg up to date and for
consumers to stay synchronized with their latest version. Recently, Linked Data Event Stream
(ldes)1 was introduced as a mechanism for publishers to expose a stream of changes (additions,
updates and deletions) of topic-based data sources composed by data objects (a.k.a. members), as
an immutable collection [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Thanks to ldes, data consumers are able to traverse and materialize
historical versions, or simply synchronize with the latest member changes of a data source
without having to re-download it in its full extent, saving time, bandwidth, and computing
resources.
      </p>
      <p>Eficient generation of an ldes from non-rdf sources requires not only the capacity to define
unique and immutable iris identifying every new version of a member, but also a mechanism
that enables materializing only the members that were actually updated. Data sources may
publish updates in various ways e.g. latest version of each member, only the updated members,
or all members and their history. Yet, they not always provide the means to uniquely identify
every update and leave it up to the consumer to handle integration.</p>
      <p>Current kg generation approaches cannot leverage data updates. Instead, they regenerate
the complete kg upon updates, even when only a subset of the data changes. This approach
becomes impractical for large data sources where the cost of processing new updates grows
proportionally to their update frequency and may impact services relying on the resulting kg.
For example, services operating on outdated data or being unavailable during the regeneration.</p>
      <p>We address this problem by investigating how we can uniquely and consistently (across
multiple versions) identify and materialize only member updates, to avoid the costs of fully
regenerating the kg. We extend an rml processor implementation to produce ldes-based kgs
and demonstrate our approach through 3 use cases with varying data characteristics, e.g. size
and update strategy. Preliminary tests show that our approach reduces the processing time
and number of triples up to 20 times when a data source is updated compared to completely
regenerating all the triples.</p>
      <p>Through this work, we aim on reducing the generation time and size of the kg generated
from dynamic and evolving data sources, while improving the overall operational behavior of
dependent services and applications.</p>
      <p>The next section discusses related work. Section 3 describes our approach. Section 4 applies
our approach on 3 use cases: bike-sharing, public transport timetables, and weather data.
Section 5 presents our conclusions and future work.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Related Work</title>
      <p>
        Mapping rules execution optimizations Optimizing mapping rules execution for rdf kg
generation is an active research domain; several approaches e.g. SDM-RDFizer [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], or FunMap [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]
emerged to optimize the mapping rules execution for generating rdf. SDM-RDFizer avoids
generating rdf from duplicates in a data collection. This way, all rdf triples are generated only
once every time the SDM-RDFizer is executed. FunMap applies the same methodology to data
transformations. It executes every function on each collection member only once and leverages
an existing rml processor for the actual rdf generation. However, both approaches cannot
apply this methodology across multiple versions of a data source. If a subset of a kg must be
updated, it is fully regenerated.
      </p>
      <p>
        Linked Data Event Stream (LDES) ldes2 is a collection of immutable rdf data members
such as versioned entities, observations, etc. ldes uses immutable iris [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] for each member.
Consequently, every version of a member will have a new immutable iri. ldes relies on
the tree specification 3 for describing collection and pagination relations. Each ldes has
a tree:shape predicate which associates a shacl 4 shape describing its members. It also
includes tree:members indicating the members of the collection. Optionally, one or multiple
path descriptions such as ldes:timestampPath or ldes:versionOfPath may be provided
to indicate the relation with previous versions of a member. Additionally, an ldes may specify
a retention policy such as ldes:LatestVersionSubset to inform consumers for how long
is the data kept.
      </p>
      <p>
        Versioning Mechanisms to store and access versioned rdf data include the approaches
proposed by Ostrich [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ], TailR [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], R&amp;Wbase [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], Memento5, or ldes [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. Three main rdf
archive storage strategies can be identified: (i) Independent Copies (IC), (ii) Change-Based (CB),
and (iii) Timestamp-Based (TB). Ostrich and TailR are both hybrid approaches, combining all
three strategies for eficient query operations. R&amp;Wbase is based on Git 6 and applies a CB
approach, while Memento is a TB approach for accessing diferent versions over HTTP. All these
approaches put the burden of resolving versions on the producer. ldes uses an IC approach
by storing complete and incrementally versioned objects for each change in an append-only
log. This way, consumers can synchronize their collections with the producer, and resolve
the versioning on the consumer-side. ldes is similar to the Copy and Log approach [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], but
can be applied using any versioning strategy, not only limited to a timestamp-based approach.
However, eficient generation and storage of ldes-based kgs from dynamic non-rdf data sources
remains an open challenge.
      </p>
    </sec>
    <sec id="sec-3">
      <title>3. Approach</title>
      <p>In this section, we describe our approach to generate unique and reproducible iris for collection’s
member updates, to enable continuous ldes-based kg generation. We discuss data collections
types, how we generate iris, and expose a ldes.</p>
      <sec id="sec-3-1">
        <title>3.1. Data collection types</title>
        <p>Diferent data collection types exist regarding immutability and history. We identify 5 types
given history availability and data immutability (Table 1).</p>
        <p>Based on their update strategy, we consider that data collections may be: (i) immutable or
(ii) mutable. A collection is immutable if all its members and their updates can be uniquely
identified through data member properties e.g. timestamps or hash codes. This way, consumers
can identify each update individually without comparing against previous versions. In contrast,
2https://w3id.org/ldes/specification
3https://w3id.org/tree/specification
4https://www.w3.org/TR/shacl/
5http://mementoweb.org/guide/rfc/
6https://git-scm.com
mutable collections require consumers to compare each member against previous versions
to identify if the member was updated. In which case, consumers store the new version for
handling later version reconciliation.</p>
        <p>Regarding history availability, we identify 3 diferent types of data source: (i) latest state, (ii)
latest changes, and (iii) full history. Latest state collections publish the latest version of all its
members on every update. Latest changes collections publish only updated members (a.k.a. delta
updates). In this case, consumers must retrieve the complete collection upfront and reconcile
updates over it. In both previous cases, it is up to the consumers to record history. Full history
collections provide the latest state of all members, including also (some) previous versions. In
such case, member versions are normally identified by means of a version ID property, making
them immutable.</p>
      </sec>
      <sec id="sec-3-2">
        <title>3.2. Unique and reproducible IRIs</title>
        <p>In this section, we introduce our approach to generate unique and reproducible iris by leveraging
properties of immutable data collections or by observing properties of mutable ones.</p>
        <p>Immutable data collections provide member properties which are renewed when a member is
updated e.g. timestamps or hash codes. When generating kgs from this type of data collections,
we use such properties to create unique and reproducible iris for named entities. We highlight
that these properties must be unafected by external factors. For example, timestamps may be
afected by timezones, in such case, the timezone ofset must also be present for the collection to
remain immutable. Mutable data collections on the other hand, do not provide unique member
properties across updates. Consumers must compare each data member against a previous
version to identify updates. Once a member update is found, a unique property such as a
timestamp or hash code needs to be externally generated to create unique and reproducible
iris for named entities. Keeping track of the generated iris for each collection’s member and
updates, allows to identify updates and avoid generating duplicates.</p>
        <p>Our approach for generating unique and reproducible iris for mutable and immutable data
collections is illustrated in Figure 1. We generate iris with an unique identifier for each data
member updateFirst, we check if the collection is immutable or not, which is described in the
rml mapping rules. If immutable, we proceed to generate an iri given that members already
include at least one property to produce an iri that is unique and reproducible (Section 3.1). If
the collection is mutable, we compare the data member properties with a previous version (if
any) to identify if a member was updated. To achieve this, we describe in the mapping rules
which properties we want to observe of each data member. If a change is detected, we generate
a unique value, e.g. timestamp or hash code based on the observed properties, to uniquely
identify this member update and store this new version for comparison with further updates.
Leveraging these unique and reproducible iris, we can avoid generating duplicates by checking
if the iri was already generated in the past or not. This way, only data members which are
updated, trigger rdf materialization.</p>
        <p>Listing 1 shows an extract of an rml mapping that produces unique iris for an mutable data
collection. Subject iris are generated through a FnO described function (line 6). This function
receives as input (i) the iri template (line 9); (ii) a flag indicating if at least one property of the
member is unique across updates (line 12) and; (iii) a set of properties to observe to check for updates
(line 15). In this example, watched properties are input in a URL parameter-like form, but this can
be adjusted according to the idlab-fn:generateUniqueIRI function implementation.
Resulting subject iris in this example conform to http://ex.org/prop1/prop2#timestamp.
We use the generation time as timestamp in this example to make the iri unique, but hash codes
can be applied here as well.</p>
        <p>Listing 1: rml Subject Map for generating a unique and immutable iri from a mutable data
collection.</p>
      </sec>
      <sec id="sec-3-3">
        <title>3.3. LDES Logical Target</title>
        <p>
          We also introduce ldes Logical Target which is used to export the generated ldes-based rdf
into a file. Thanks to the modularity of rml’s Logical Target [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ], it is possible to add an ldes
Logical Target to any rml processor.
        </p>
        <p>An ldes Logical Target (Listing 2) is a regular rml Logical Target with an additional type
(ldes:EventStreamTarget). Each ldes:EventStreamTarget adds ldes specific
properties to a regular Logical Target such as ldes paths (lines 6-7) or a shacl shape (line 8). An ldes
Logical Target only adds metadata to the serialized output. It also inherits all the characteristics
of a regular rml Logical Target7, allowing it to be written into a file, a triple store, etc.</p>
        <p>Listing 2: ldes Logical Target definition in rml to export an ldes to a file.
1 :LDESToFile a rmlt:LogicalTarget;
2 rmlt:target [ a ldes:EventStreamTarget;
3 dcat:distribution [ a dcat:Distribution;
4 dcat:accessURL &lt;file://data/dump.nq.zip&gt;; ]; ];
5 rmlt:serialization formats:N-Quads; rmlt:compression comp:zip;
6 ldes:timestampPath sosa:resultTime;
7 ldes:versionOfPath dcterms:isVersionOf;
8 tree:shape &lt;http://example.org/shape.shacl&gt;; .</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4. Use Cases and Preliminary Tests</title>
      <p>In this section, we describe practical examples of our approach, applied on 3 use cases: (i)
BlueBike8 bike-sharing availability data, (ii) NMBS9 public transport timetables, and (iii) KMI10
meteorological data with the RMLMapper as rml processor. We implemented our approach in
the RMLMapper, but it can be implemented in any other rml processor since we re-use existing
features such as FnO functions to generate unique and reproducible IRIs; and rml’s Logical
Target for producing ldes-based kgs. Our mapping rules 11 and implementation 12 are available
on GitHub.</p>
      <p>BlueBike bike-sharing data provides a dump of all stations and currently available bikes. This
data source is immutable. Its members include a data property that is unique across updates, and
it follows a latest state update strategy. We mapped the data using a GBFS-based vocabulary 13
into rdf, and exported it as an ldes with our ldes Logical Target. We retrieved every minute
the latest state and generated unique and reproducible IRIs with our approach (Section 3.2), by
leveraging the immutable last_seen timestamp property, which is included on every data
member of this collection.</p>
      <p>NMBS is the Belgian railway agency which publishes its yearly timetable schedule as a
GTFS 14 dump. This data source is mutable since there are not unique data properties across
updates, and follows a latest state update strategy. Each day the schedule is republished without
providing a list of updates. The GTFS dump is retrieved daily to check for updates. We define
a set of observed properties that are used to asses member updates (e.g. parent_station
and stop_id for GTFS stops). If an updated member is found, we generate a unique and
reproducible IRI for the member by adding the current timestamp when the mapping rules were
executed.</p>
      <p>KMI is the Belgian meteorological institute, which provides measurements of their Automatic
Weather Stations as a csv dump. This data source is immutable since it contains historical data
about the measurements with unique identifiers. We leveraged these identifiers, namely the
code property, to generate unique and reproducible IRIs.</p>
      <p>We performed preliminary tests by retrieving dumps for each of the use cases and replayed
them in the same retrieval order to verify the impact of our approach on generation time and
number of materialized triples. We observed reduced generation time that is proportional to the
data source size. For the smaller data sources BlueBike and KMI, the generation time is 1.1x and
1.2x faster. For the bigger data source NMBS we register a generation time 24.7x faster. In terms
of number of materialized triples, we see a reduction in all cases: BlueBike 4.6x less triples, KMI
17x less triples, and NMBS 33.7x less triples; compared to fully regenerating each kg. These
results are available on Github15.</p>
      <p>11https://github.com/RMLio/RML-LDES-mapping-rules
12https://github.com/RMLio/rmlmapper-java/releases/tag/v5.0.0
13https://github.com/pietercolpaert/Blue-Bike-to-Linked-GBFS
14https://gtfs.org
15https://github.com/RMLio/RML-LDES-mapping-rules/</p>
    </sec>
    <sec id="sec-5">
      <title>5. Conclusion</title>
      <p>We see very promising results of our approach in terms of eficiency for continuous kg
generation. We manage to speed up generation time up to 24x while reducing unnecessarily
materialized triples up to 33.7x. Our approach relies on existing rml features such as FnO
functions, which facilitates its implementation on existing engines. Furthermore, our
implementation provides out-of-the-box publishing of kg updates in the form of an ldes, which facilitates
data synchronization tasks for consumers. In the future, we will extend our approach to handle
deletions and perform a more exhaustive performance evaluation.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>D.</given-names>
            <surname>Van Lancker</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Colpaert</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Delva</surname>
          </string-name>
          , B. Van de Vyvere,
          <string-name>
            <given-names>J. Rojas</given-names>
            <surname>Meléndez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Dedecker</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Michiels</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Buyle</surname>
          </string-name>
          ,
          <string-name>
            <surname>A. De Craene</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          <string-name>
            <surname>Verborgh</surname>
          </string-name>
          ,
          <article-title>Publishing base registries as Linked Data Event Streams</article-title>
          ,
          <source>in: Proceedings of the 21th International Conference on Web Engineering, Lecture Notes in Computer Science</source>
          , Springer,
          <year>2021</year>
          , pp.
          <fpage>28</fpage>
          -
          <lpage>36</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>E.</given-names>
            <surname>Iglesias</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Jozashoori</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Chaves-Fraga</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Collarana</surname>
          </string-name>
          , M.-E. Vidal,
          <article-title>SDM-RDFizer: An RML Interpreter for the Eficient Creation of RDF Knowledge Graphs</article-title>
          ,
          <source>in: Proceedings of the 29th ACM International Conference on Information &amp; Knowledge Management</source>
          ,
          <year>2020</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>S.</given-names>
            <surname>Jozashoori</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Chaves-Fraga</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Iglesias</surname>
          </string-name>
          ,
          <string-name>
            <surname>M.-E. Vidal</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          <string-name>
            <surname>Corcho</surname>
          </string-name>
          , Funmap:
          <article-title>Eficient execution of functional mappings for knowledge graph creation</article-title>
          , in: International Semantic Web Conference,
          <year>2020</year>
          , pp.
          <fpage>276</fpage>
          -
          <lpage>293</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>T.</given-names>
            <surname>Kuhn</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Dumontier</surname>
          </string-name>
          ,
          <article-title>Trusty uris: Verifiable, immutable, and permanent digital artifacts for linked data</article-title>
          , in: V.
          <string-name>
            <surname>Presutti</surname>
          </string-name>
          , C.
          <string-name>
            <surname>d'Amato</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          <string-name>
            <surname>Gandon</surname>
            , M. d'Aquin,
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Staab</surname>
            ,
            <given-names>A</given-names>
          </string-name>
          . Tordai (Eds.),
          <source>The Semantic Web: Trends and Challenges</source>
          , Springer International Publishing, Cham,
          <year>2014</year>
          , pp.
          <fpage>395</fpage>
          -
          <lpage>410</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>R.</given-names>
            <surname>Taelman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. Vander</given-names>
            <surname>Sande</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Verborgh</surname>
          </string-name>
          ,
          <article-title>Versioned querying with OSTRICH and Comunica in MOCHA 2018, in:</article-title>
          <source>Proceedings of the Mighty Storage Challenge</source>
          ,
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>P.</given-names>
            <surname>Meinhardt</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Knuth</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Sack</surname>
          </string-name>
          ,
          <article-title>Tailr: A platform for preserving history on the web of data</article-title>
          ,
          <source>in: Proceedings of the 11th International Conference on Semantic Systems</source>
          , SEMANTICS '15,
          <string-name>
            <surname>Association</surname>
          </string-name>
          for Computing Machinery,
          <year>2015</year>
          , p.
          <fpage>57</fpage>
          -
          <lpage>64</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>M.</given-names>
            <surname>Vander Sande</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Colpaert</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Verborgh</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Coppens</surname>
          </string-name>
          , E. Mannens, R. Van de Walle,
          <string-name>
            <surname>R</surname>
          </string-name>
          &amp;
          <article-title>Wbase: git for triples</article-title>
          ,
          <source>in: Proceedings of the 6th Workshop on Linked Data on the Web, CEUR Workshop Proceedings</source>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>D.</given-names>
            <surname>Van Lancker</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Colpaert</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Delva</surname>
          </string-name>
          , B. Van de Vyvere,
          <string-name>
            <given-names>J. R.</given-names>
            <surname>Meléndez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Dedecker</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Michiels</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Buyle</surname>
          </string-name>
          ,
          <string-name>
            <surname>A. De Craene</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          <string-name>
            <surname>Verborgh</surname>
          </string-name>
          ,
          <source>Publishing Base Registries as Linked Data Event Streams</source>
          ,
          <year>2021</year>
          , pp.
          <fpage>28</fpage>
          -
          <lpage>36</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>B.</given-names>
            <surname>Salzberg</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V. J.</given-names>
            <surname>Tsotras</surname>
          </string-name>
          ,
          <article-title>Comparison of access methods for time-evolving data</article-title>
          ,
          <source>ACM Comput. Surv</source>
          . (
          <year>1999</year>
          )
          <fpage>158</fpage>
          -
          <lpage>221</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <surname>D. Van Assche</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          <string-name>
            <surname>Haesendonck</surname>
            , G. De Mulder,
            <given-names>T.</given-names>
          </string-name>
          <string-name>
            <surname>Delva</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          <string-name>
            <surname>Heyvaert</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          <string-name>
            <surname>De Meester</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Dimou</surname>
          </string-name>
          ,
          <article-title>Leveraging web of things w3c recommendations for knowledge graphs generation</article-title>
          , in: Web Engineering, 21st International Conference, ICWE 2021, Proceedings,
          <year>2021</year>
          , pp.
          <fpage>337</fpage>
          -
          <lpage>352</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>