<!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>SKOS-Utils: Developing and Checking SKOS Knowledge Graphs (Tool Presentation)</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Joachim Baumeister</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Valentin Roß</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>University of Würzburg</institution>
          ,
          <country country="DE">Germany</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>denkbares GmbH</institution>
          ,
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2022</year>
      </pub-date>
      <abstract>
        <p>We introduce the tool suite SKOS-Utils for the development and quality assessment of SKOS vocabularies (Simple Knowledge Organisation System). SKOS is a wide-spread standard for organizing hierarchical knowledge structures, that uses RDF as basic data model. SKOS-Utils provides converters for spreadsheets and mindmaps in order to facilitate the bottom-up development of SKOS vocabularies. A suite of quality checks is used for testing the created vocabularies.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;knowledge engineering</kwd>
        <kwd>ontologies</kwd>
        <kwd>mindmaps</kwd>
        <kwd>quality assessment</kwd>
        <kwd>evaluation</kwd>
        <kwd>knowledge bases</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>BSCHm skos:hasTopConcept</p>
      <p>Bike
skos:narrower
skos:broader
skos:narrower
skos:broader
skos:Concept</p>
      <p>Frame
skos:prefLabel “Frame”@en, “Rahmen”@de
skos:hiddenLabel “FR_owe_jb”
Wheel</p>
      <p>
        skosxl:prefLabel
skosxl:prefLabel
skosxl:literalForm
are expanded so that concepts can point to first class instances of lexical entities [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Then, a
label can store additional information besides its literal form, e.g., relations to other labels and
(domain specific) provenance information. Figure 1 shows the use of SKOS-XL preferred labels
for the concept Wheel.
      </p>
      <p>Concepts are grouped in a skos:ConceptScheme by using the skos:inScheme property. The
entry into a concept scheme is represented by using the property skos:hasTopConcept, which
points to the topmost concepts of this scheme. See the ConceptScheme instance BSCHm in
Figure 1. Please note, that there is no constraint, that only one top concept must exist.</p>
      <p>When not directly maintained in a SKOS data model but in a proprietary system, the data
is often converted to SKOS representation for interchange in the IT landscape. For instance,
master data located originally in an ERP system is exported as SKOS data for the interchange
with a knowledge graph application. But also for the creation of new structures the SKOS
standard has shown to be beneficial. Here, the concepts of the structure are defined in standard
applications like mindmapping tools or even spreadsheet editors. After the initial creation
phase, these structures are later transferred to a graph database or ERP system. With these use
cases we experienced, that SKOS data is often defined without tools checking for validity or
general quality.</p>
      <sec id="sec-1-1">
        <title>1.1. Contribution</title>
        <p>This paper introduces the modular open-source tool suite SKOS-Utils. The suite provides a
collection of Python scripts that help during the development of SKOS vocabularies and the
continuous quality assessment of the resulting knowledge graphs.</p>
        <p>There exist various applications tailored to the development of SKOS vocabularies. While
these tools ofer a wide range of functionalities and benefits for professional authors, the
tools lack intuitivity needed for the first steps of developing a new vocabulary, especially for
domain specialists not familiar with the engineering of ontologies. We experienced the use of
already known tools more accessible for domain specialists, e.g., using spreadsheet editors and
mindmapping tools. That way, we claim that it is more productive to start with such simple
applications for the initial structure before switching to tailored tools for supporting the life
cycle of the created vocabulary.</p>
      </sec>
      <sec id="sec-1-2">
        <title>1.2. Related Work</title>
        <p>
          Quality Assessment As a primary document besides the W3C standards, Baker et al. [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ]
introduce the main components of SKOS and the design decisions made. They also state an initial
set of integrity conditions for SKOS data. Mader et al. [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ] present a collection of quality issues that
can occur in SKOS vocabularies. The structured approach is implemented in the tool qSKOS and
they describe the analysis of many openly available vocabularies, such as DBpedia, AGROVOC,
and MeSH. Suominen and Mader [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ] extend this approach by also providing correction heuristics
for a part of the presented anomalies.
        </p>
        <p>
          Development Busse [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ] introduces an approach to transform FreeMind Mindmaps into RDF
ontologies on a syntactic level by using the XSLT scripting language. Lacasta et al. [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ] describe a
tool for the development and visualization of SKOS data especially focussed on digital libraries.
While having a strong support for typical librarian tasks the tool is build mainly as a monolithic
application.
        </p>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>2. Methods</title>
      <p>The suite SKOS-Utils ofers a collection of scripts for developing and checking SKOS data. Due to
the intrinsic nature of incompleteness1, the suite is designed to be easily extended. We distinguish
the parts development and checking, whereas each part ofers a variety of (extensible) modules
for the specific task.</p>
      <p>
        An extensive discussion of methods for checking vocabularies can be found in [
        <xref ref-type="bibr" rid="ref3 ref4">3, 4</xref>
        ]. We
describe the particular modules in the following in more detail. Please note, that the suite is under
continuous development and thus we can only describe the current state of implementation.
      </p>
      <sec id="sec-2-1">
        <title>2.1. Development</title>
        <p>
          The development part provides the standardized SKOS RDF data model as recommended by the
W3C [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ]. We can simply switch between the well-known RDF syntax definitions XML, Turtle,
and JSON-LD. The suite provides scripts to bridge this data model from/to the mindmapping
application XMind2, to Graphviz3, and from/to the spreadsheet application MS-Excel4, see
Figure 2. That way, we can develop SKOS structures using this tools in a roundtrip engineering
approach. XMind and Excel, respectively, are popular for creating (hierarchical) structures in
industry. For quick visualization purposes, also an ASCII export is provided, that prints basic
information of the SKOS hierarchy as a dashed-tree into a text file.
1Here, we follow the general rule that every new project will have new requirements and additions to existing
functionality.
2https://xmind.app
3https://graphviz.org
4https://www.microsoft.com/microsoft-365/excel
        </p>
        <sec id="sec-2-1-1">
          <title>Graphviz</title>
          <p>SKOS2GRAPHVIZ</p>
        </sec>
        <sec id="sec-2-1-2">
          <title>Excel</title>
          <p>SXKLOSS22SXKLOSS</p>
          <p>SKOS2ASCII
XSMKiOnSd22SXKMOinSd</p>
        </sec>
        <sec id="sec-2-1-3">
          <title>Engineering</title>
        </sec>
        <sec id="sec-2-1-4">
          <title>XMind</title>
          <p>…
…
Mindmaps In Figure 3 we see an example XMind structure of an exemplary bike definition.
Basically, mindmaps allow for the definition of nodes and their hierarchical relationship (general
parent-children). This relation is mapped to the skos:broader and skos:narrower properties,
respectively. Further common relations in SKOS are represented by using the ’note’ attribute
of nodes. When one wants to define preferred labels ( skos:prefLabel) or alternative labels
(skos:altLabel), these are written into the note. By convention, the user defines those
properties in separate lines, where each line needs to start with a @ character. All lines not starting
with a @ are handled as standard comments and are transferred into a skos:note property. In
the example in Figure 3 we see the note window for the node Rear brakes.</p>
          <p>When we apply the script XMind2SKOS of SKOS-Utils a SKOS representation in RDF is
generated. The following RDF in Listing 1 is an excerpt for the node Rear brakes (here in
turtle syntax). Please note, that unique URIs are generated for each concept since we cannot
rely on the unique names in the mindmap. The inverse script SKOS2Xmind converts RDF data
to an XMind data format.</p>
          <p>Listing 1: Sample output of a SKOS concept.
ex : C_5b3154 a skos : Concept ;
skos : prefLabel " Hinterradbremse " @de ,</p>
          <p>" Rear brake " @en ;
skos : broader ex : C_02b4cc ;
skos : inScheme ex : Functions ;
skos : note " @order : 10" ,
" @uuid : C_5b3154 ",
" @xmind_name : \" Rear brakes \"" ,
" The correct function of a rear brake is important for save
driving !" ;
rdfs : label " Brake " @en ;
skos : altLabel " Rear wheel brake " @en .</p>
          <p>Graphviz SKOS-Utils provides a converter to the dot format of Graphviz. By default, the
converter prints the SKOS concepts as nodes. The node label is defined by the preferred label
of a specified language. Furthermore, the class type and the preferred labels can be printed in
the node. Also, you can define which properties should be drawn in the graph, additionally.
Graphviz provides diferent layout strategies and output formats, such as PDF, PNG, and SVG.
Figure 4 depicts the example vocabulary rendered by Graphviz.</p>
          <p>Spreadsheets The bridge modules SKOS2XLS and XLS2SKOS of SKOS-Utils transfer SKOS
RDF to and from MS-Excel spreadsheets. In the spreadsheet representation, each SKOS concept
is located in a separate row, whereas the SKOS properties are represented by the respective
columns. Additional properties denoted by @ are exported as single columns. In Figure 5, a
MS-Excel sheet is depicted, which was generated from the RDF file and the XMind structure in
Figure 3, respectively. The hierarchy is represented in level notation, i.e., column Level denotes
the hierarchical position of the SKOS concept. A concept  with a level  describes the child
of a concept − 1 when the parent − 1 occurs immediately before concept . For example,
Figure 5 shows the levels in Column A, where concepts Frame and Wheel are children of Bike.
This kind of hierarchy level definition is common for exports/imports into ERP systems such as
SAP.</p>
          <p>Functions (en)
skos:ConceptScheme</p>
          <p>Bike (en)
skos:Concept</p>
          <p>skos:hasTopConcept
skos:narrower skos:narrower</p>
        </sec>
      </sec>
      <sec id="sec-2-2">
        <title>2.2. Quality Assessment</title>
        <p>
          For the quality assessment a suite of configurable checks is executed as a pipeline. The results
for each check are collected and reported after finishing the entire pipeline. We provide two
alternative interfaces for the implementation of checks, i.e., as SPARQL queries [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ] and as
Python classes. We first introduce the definition of a quality check as a SPARQL query and then
show an exemplary implementation of a check in Python.
        </p>
        <p>Check Definition The current state of SKOS-Utils brings a number of checks, that are usable
for the quality assessment of SKOS data. The extension of the suite is under development.</p>
        <p>We provide two interfaces to implement project specific checks: 1) New checks
basically defined by a SPARQL query are implemented by extending the python class
StructureTestInterfaceSPARQL. 2) Checks navigating the graph object structure are
implemented by extending the python class StructureTestInterfaceNavigate.</p>
        <p>Listing 2 shows an example of the SPARQL approach and implements the check
SinglePrefLabelCheckerSPARQL. It looks for deficient SKOS concepts that have more than
one preferred label for the same language. For the sake of simplicity we omitted the query for
retrieving SKOS-XL prefLabel occurrences, that is also part of the actual implementation.</p>
        <p>Listing 2: Check definition SinglePrefLabelChecker implemented as SPARQL query.
class SinglePrefLabelCheckerSPARQL ( StructureTestInterfaceSPARQL ):
"""
Check whether every concept has at most one prefLabel for
each language . Considers prefLabels defined in standard SKOS .
"""
@property
def status ( self ):</p>
        <p>return " Error "
def message ( self , result_df ):</p>
        <p>...
@property
def query ( self ):
return """</p>
        <p>SELECT DISTINCT ? concept
WHERE { { ? concept skos : prefLabel ? label1 , ? label2 . }</p>
        <p>FILTER ( lang (? label1 ) = lang (? label2 ) &amp;&amp;</p>
        <p>? label1 != ? label2 )
}
GROUP BY ? concept
"""
A check is basically defined by overwriting three methods: The method status signifies the
escalation level in the case of a found deficiency. The levels info, warning, and error are possible.
The method message defines the information given to the user in case of found deficiencies.
The actual logic for finding deficiencies is specified in the method query. Here, a SPARQL query
for finding the wanted deficiencies needs to be given. In the standard case, the check does not
report an error/warning, when the query returns no results. All results returned by the query,
in turn, are interpreted as deficiencies.</p>
        <p>Listing 3 shows the same method as native implementation. Native implementations navigate
over the graph data model and try to find the deficiencies programmatically. By interfacing
the class StructureTestInterfaceNavigate we usually only need to implement the method
find_concepts() with the logic for finding the corresponding deficient concepts.
Listing 3: Check definition SinglePrefLabelChecker implemented by navigating the graph object
model.
class SinglePrefLabelChecker ( StructureTestInterfaceNavigate ):
@property
def status ( self ):</p>
        <p>...
def message ( self , result ):</p>
        <p>...
def find_concepts ( self , graph ):
bad_concepts_list = []
for concept , p , o in graph . triples (( None , RDF . type , SKOS .</p>
        <p>Concept )):
labels = self . all_pref_labels ( concept , graph )
if self . duplicate_labels ( labels ):</p>
        <p>bad_concepts_list . append ( concept )
return bad_concepts_list
Implementation note: Checks defined by SPARQL queries come with the advantage of easy
definition. Additionally, SPARQL is a well-accepted W3C standard that is widely used. That way,
SPARQL allows for a quick and declarative addition of new checks. However, the disadvantage
of that approach is that the execution performance of SPARQL queries is significantly worse
than an implementation working directly on the graph object model.</p>
        <p>Pipeline Definition The quality assessment of SKOS data is performed by defining a pipeline
of quality checks. A configuration file defines the pipeline in YAML syntax. The pipeline
execution script SKOSQualityChecker performs the actual assessment of the SKOS data using
this configuration file. Listing 4 shows an exemplary configuration for the quality assessment:</p>
        <p>Listing 4: Sample definition of a check pipeline configuration.
input : tests / Testdata / testfile . rdf
output : test_results
add_datetime_to_output : True
write_results_to_excel : True
tests :
- LooseConceptIdentifier
- SchemeCoherenceChecker
- SinglePrefLabelChecker
- ...</p>
        <p>The YAML configuration describes the SKOS RDF file under analysis ( input), the name of the
results file ( output). In the section (tests) the actual pipeline of tests is defined. Further, we
can toggle whether we want to write a result output and whether we want to log the date/times
of the tests.</p>
        <p>That way, quality assessments are easily executable the headless way, for example, as part of
a nightly continuous integration step. The results of an assessment step can be persisted into
an Excel file for subsequent analysis.</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>3. Case Study</title>
      <p>SKOS-Utils is implemented as a Python script collection. For the access to RDF vocabularies we
use the popular library rdflib 5. For the access to Excel files we use the pandas framework 6.</p>
      <p>In the following we report the experiences we made during the use of the development scripts
in an industrial project. We further demonstrate the implementation of the quality assessment
part by reporting the runtime and findings for a collection of known SKOS vocabularies.</p>
      <sec id="sec-3-1">
        <title>3.1. Development with SKOS-Utils</title>
        <p>In the context of a customer project we started the development of a functional structure of
machines in 2022. The functional structure was created on the green field initialized by a number
of workshops with domain specialists from diferent areas, e.g., engineering, safety, and after
sales.</p>
        <p>Due to the collaborative set-up of the workshop the use of a mindmapping improved the
intuitive creation and change of the structure. We used the bridge to the spreadsheet application
for subsequent and iterative analyses by the domain specialists in their own areas. These
analyses mainly covered the alignment of existing structures to the newly developed structure.
Here, a spreadsheet efectively helped the alignment process. The development of the functional
structure is still in progress.</p>
      </sec>
      <sec id="sec-3-2">
        <title>3.2. Quality Assessment of SKOS Vocabularies</title>
        <p>
          Data Sets We selected a collection of popular SKOS vocabularies in order to demonstrate
the performance and usability of the developed SKOS-Utils. The DemoBike vocabulary is a
selfcreated SKOS structure describing an exemplary bicycle configuration. Here, example defects are
included to test the functionality of the SKOS-Utils implementation. The EuroVoc7 vocabulary
is a multi-lingual thesaurus created and managed by the European Union publications ofice
and describes terms in languages of EU countries and EU-candidate countries. The AGROVOC
vocabulary is developed and coordinated by the Food and Agriculture Organization (FAO) of
the United Nations [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ]. As stated at its homepage "AGROVOC (is) a valuable tool for data to be
classified homogeneously, facilitating interoperability and reuse." 8 The UNESCO Thesaurus9
(UNESCO THES) defines terms in the domain of education, culture, natural sciences, social and
human science. The terms are used as metadata for document annotation.
        </p>
        <p>Results We used the introduced data sets with the check implementations of SKOS-Utils. The
aim of this experiments was to measure the application runtime and the general functionality
of the implementation. For the experiments we used a Macbook Pro M1 Max with 32GB RAM
(Python 3.11). Table 2 shows runtime numbers performing the particular checks. For each
check the runtime of the navigate implementation is shown and the corresponding SPARQL
5rdflib: https://rdflib.readthedocs.io
6pandas: https://pandas.pydata.org
7EuroVoc: https://op.europa.eu/s/yTkE
8AGROVOC: https://www.fao.org/agrovoc/
9UNESCO THES: http://vocabularies.unesco.org/thesaurus
implementation, when available ("-" otherwise). The runtime numbers in Table 2 are formatted
as sec:ms, whereas sec is omitted, when the check only had a milliseconds runtime. After the
runtimes the count of found anomalies is given.</p>
        <p>We see that accessing the SKOS graph by using SPARQL is significantly larger than accessing
the graph via the navigation features of the library. This observation is also made for other
programming libraries and therefore not surprising.</p>
        <p>When looking at the findings in the table, the BikeDemo vocabulary shows findings for all
checks. This ist not surprising, since the knowledge base is used as test for all checks, The
vocabulary AGROVOC has a high number of incomplete language coverage: The vocabulary
defines in total 58 languages but mostly uses for the single concepts only about 20 languages.
For the UNESCO thesaurus 35 concepts with incomplete language coverage are detected, e.g.,
not all concepts define preferred labels for Russian language.</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4. Conclusions</title>
      <p>We introduced the tool suite SKOS-Utils as a collection of useful Python scripts for the
development and quality assessment of SKOS vocabularies. SKOS became one industrial standard
for creating and interchanging knowledge organization structures. Due to the heterogenous
infrastructures of existing IT landscapes in industries, a flexible and open tool suite is necessary
to interweave SKOS vocabularies into existing applications.</p>
      <p>The described SKOS-Utils is at the beginning of its implementation. While the available
scripts have proven to be useful in daily development and testing of knowledge bases, there
are limitations so far that are tasks for future work. For the development part, only the most
important SKOS properties are converted between the applications and RDF. For the quality
assessment we need to develop more checks to be included in the suite. Also, there is a strong
limitation in the reasoning support of SKOS-Utils. The underlying Python library rdflib does
not support reasoning of RDF ontologies. For example, instances of SKOS concepts need to be
defined explicitly ( ex:A rdf:type skos:Concept) and not as instances of sub-classes of SKOS
concepts. This also holds for other SKOS properties and classes. That way, it is required that
instances under investigation need to be explicitly defined as SKOS elements. In the future, we
are planning to include reasoning support for SKOS-Utils to remove this requirement.</p>
    </sec>
    <sec id="sec-5">
      <title>Acknowledgments References</title>
      <p>Parts of this work were funded by German Federal Ministry for Economic Afairs and Climate
Action under the ZIM program, AiF grant KK5394901GR1 (ISCO project).</p>
    </sec>
    <sec id="sec-6">
      <title>A. Online Resources</title>
      <p>SKOS-Utils is still under development and we invite collaborators to join the development team.
The sources are available via GitHub: https://github.com/denkbares/SKOS-Utils</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          <article-title>[1] W3C, SKOS Simple Knowledge Organization System reference</article-title>
          : http://www.w3.org/TR/ skos-reference,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>T.</given-names>
            <surname>Baker</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Bechhofer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Isaac</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Miles</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Schreiber</surname>
          </string-name>
          , E. Summers,
          <article-title>Key choices in the design of simple knowledge organization system (SKOS)</article-title>
          ,
          <source>Journal of Web Semantics</source>
          <volume>20</volume>
          (
          <year>2013</year>
          )
          <fpage>35</fpage>
          -
          <lpage>49</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>C.</given-names>
            <surname>Mader</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Haslhofer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Isaac</surname>
          </string-name>
          ,
          <article-title>Finding quality issues in SKOS vocabularies</article-title>
          ,
          <source>in: Proceedings of TPDL 2012, Theory and Practice of Digital Libraries</source>
          ,
          <year>2012</year>
          . arXiv:
          <volume>1206</volume>
          .
          <fpage>1339</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>O.</given-names>
            <surname>Suominen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Mader</surname>
          </string-name>
          ,
          <article-title>Assessing and improving the quality of skos vocabularies</article-title>
          ,
          <source>Journal on Data Semantics</source>
          <volume>3</volume>
          (
          <year>2014</year>
          ).
          <source>doi:10.1007/s13740-013-0026-0.</source>
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>J.</given-names>
            <surname>Busse</surname>
          </string-name>
          , Semantische Modelle mit Mindmaps, De Gruyter Saur, Berlin, Boston,
          <year>2014</year>
          , pp.
          <fpage>115</fpage>
          -
          <lpage>127</lpage>
          . doi:doi:10.1515/9783110312812.115.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>J.</given-names>
            <surname>Lacasta</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Nogueras-Iso</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Lopez-Pellicer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Muro-Medrano</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Zarazaga</surname>
          </string-name>
          ,
          <string-name>
            <surname>ThManager:</surname>
          </string-name>
          <article-title>An open source tool for creating and visualizing SKOS</article-title>
          ,
          <source>Information Technology and Libraries</source>
          <volume>26</volume>
          (
          <year>2007</year>
          )
          <fpage>39</fpage>
          -
          <lpage>51</lpage>
          . doi:
          <volume>10</volume>
          .6017/ital.v26i3.
          <fpage>3274</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          <source>[7] W3C, SPARQL 1</source>
          .1 recommendation: http://www.w3.org/TR/sparql11-query,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>C.</given-names>
            <surname>Caracciolo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Stellato</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Morshed</surname>
          </string-name>
          , G. Johannsen,
          <string-name>
            <given-names>S.</given-names>
            <surname>Rajbhandari</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Jaques</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Keizer</surname>
          </string-name>
          ,
          <article-title>The AGROVOC linked dataset</article-title>
          .,
          <source>Semantic Web</source>
          <volume>4</volume>
          (
          <year>2013</year>
          )
          <fpage>341</fpage>
          -
          <lpage>348</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>