Skip to content
Snippets Groups Projects
Commit 570c4318 authored by Guilherme Henrique's avatar Guilherme Henrique
Browse files

Project start

parents
No related branches found
No related tags found
No related merge requests found
Showing
with 959 additions and 0 deletions
# On Evaluation Metrics for Complex Matching based on Reference Alignments
This project is built using Python 3.12. Below are the instructions to install the necessary dependencies to run the project.
## Prerequisites
- Python 3.12
## Data
The data used in this project comes from OAEI 2020. Download the data from the following links and unzip the matchers outputs in each corresponding folder:
`edoal/hydrography` -> [Hydrography Results 2020](https://oaei.ontologymatching.org/2020/results/complex/hydrography/hydrography_results_2020.zip)
`edoal/populated_conference` -> [Populated Conference Results 2020](https://oaei.ontologymatching.org/2020/results/complex/popconf/results_conference.zip)
`edoal/populated_geolink` -> [Populated Geolink Results 2020](https://oaei.ontologymatching.org/2020/results/complex/popgeolink/popgeolink_results_2020.zip)
## Installation
1. **Create a virtual environment:**
```bash
python3.12 -m venv venv
```
2. **Activate the virtual environment:**
- On Linux or macOS:
```bash
source venv/bin/activate
```
- On Windows:
```bash
venv\Scripts\activate
```
3. **Install the dependencies:**
```bash
pip install -r requirements.txt
```
4. **Run:**
```bash
python main.py
```
import xml.etree.ElementTree as ET
from tree_similarity import tree_sim, tree_size, post_order
import re
def xml_to_tree(t):
att_keys = sorted(list(t.attrib.keys()))
att_pairs = ', '.join([f'{k}: {t.attrib[k]}' for k in att_keys])
tag = f'{t.tag} {att_pairs}'
children = sorted([xml_to_tree(c) for c in t], key=lambda x: x[0])
return tag, children
def load_maps(path):
tree = ET.parse(path)
root = tree.getroot()
maps = []
for c in root:
for c1 in c:
if not c1.tag.endswith('map'):
continue
cell = c1.find('{http://knowledgeweb.semanticweb.org/heterogeneity/alignment#}Cell')
ent1 = cell.find('{http://knowledgeweb.semanticweb.org/heterogeneity/alignment#}entity1')
ent2 = cell.find('{http://knowledgeweb.semanticweb.org/heterogeneity/alignment#}entity2')
t1 = ent1[0] if len(ent1) > 0 else ent1
t2 = ent2[0] if len(ent2) > 0 else ent2
maps.append((xml_to_tree(t1), xml_to_tree(t2)))
return maps
def maximize_assign(m):
preferences = {}
for i, p in enumerate(m):
preferences[i] = list(sorted(enumerate(p), key=lambda x: x[1], reverse=True))
unassigned_pairs = list(range(len(m)))
assigned_pairs = {}
while unassigned_pairs:
pair = unassigned_pairs.pop()
pair_similarities = preferences[pair]
if len(pair_similarities) == 0:
continue
next_similarity = pair_similarities.pop(0)
if next_similarity[0] in assigned_pairs:
if next_similarity[1] > assigned_pairs[next_similarity[0]][1]:
unassigned_pairs.append(assigned_pairs[next_similarity[0]][0])
assigned_pairs[next_similarity[0]] = (pair, next_similarity[1])
else:
unassigned_pairs.append(pair)
else:
assigned_pairs[next_similarity[0]] = (pair, next_similarity[1])
return assigned_pairs
def evaluate_edoal(p1, p2, w = 0.5, sim_func = tree_sim):
maps1 = load_maps(p1)
maps2 = load_maps(p2)
p_simple_count = 0
p_complex_count = 0
for m1, m2 in maps1:
if tree_size(m1) == 1 and tree_size(m2) == 1:
p_simple_count += 1
else:
p_complex_count += 1
r_simple_count = 0
r_complex_count = 0
for m1, m2 in maps2:
if tree_size(m1) == 1 and tree_size(m2) == 1:
r_simple_count += 1
else:
r_complex_count += 1
sl = []
for mt1, mt2 in maps1:
ms = []
for m1, m2 in maps2:
ms.append((sim_func(mt1, m1) + sim_func(mt2, m2)) / 2)
sl.append(ms)
assigns = maximize_assign(sl)
p_simple_assigns = {}
p_complex_assigns = {}
r_simple_assigns = {}
r_complex_assigns = {}
for k, v in assigns.items():
mt1, mt2 = maps1[v[0]]
m1, m2 = maps2[k]
if tree_size(m1) == 1 and tree_size(m2) == 1:
r_simple_assigns[k] = v
else:
r_complex_assigns[k] = v
if tree_size(mt1) == 1 and tree_size(mt2) == 1:
p_simple_assigns[k] = v
else:
p_complex_assigns[k] = v
sum1 = sum([v[1] for k, v in r_simple_assigns.items()])
sum2 = sum([v[1] for k, v in r_complex_assigns.items()])
sum3 = sum([v[1] for k, v in p_simple_assigns.items()])
sum4 = sum([v[1] for k, v in p_complex_assigns.items()])
rdiv = (1 - w) * r_simple_count + w * r_complex_count
pdiv = (1 - w) * p_simple_count + w * p_complex_count
soft_recall = ((1 - w) * sum1 + w * sum2) / rdiv if rdiv > 0 else 0
soft_precision = ((1 - w) * sum3 + w * sum4) / pdiv if pdiv > 0 else 0
soft_fmeasure = 2 * soft_recall * soft_precision / (
soft_recall + soft_precision) if soft_recall + soft_precision > 0 else 0
return soft_precision, soft_recall, soft_fmeasure
def filter_entities(n):
return [x.split(' ')[1] for x in re.findall(r'resource: http://[^\s]+', n)] + [x.split(' ')[1] for x in re.findall(r'about: http://[^\s]+', n)]
def jaccard(s1, s2):
return len(s1.intersection(s2)) / len(s1.union(s2)) if len(s1.union(s2)) > 0 else 0
def jaccard_sim(e1, e2):
s1 = set()
s2 = set()
post_order(e1, lambda x, y: s1.update(filter_entities(y[0])))
post_order(e2, lambda x, y: s2.update(filter_entities(y[0])))
return jaccard(s1, s2)
\ No newline at end of file
main.py 0 → 100644
#%%
from complex_evaluate import evaluate_edoal, jaccard_sim
import os
import pandas as pd
#%% Initialize matchers dictionary
matchers = {}
# Walk through the 'edoal' directory to populate the matchers dictionary
for root, _, files in os.walk('./edoal'):
for file in files:
ontology = root.split('/')[-2]
matcher = root.split('/')[-1]
pair = file.split('.')[0]
# Ensure matchers dictionary structure is initialized
matchers.setdefault(ontology, {}).setdefault(pair, []).append((matcher, f'{root}/{file}'))
#%% Evaluate matchers against references
evaluations = []
reference_count = {}
# Walk through the 'references' directory for evaluation
for root, _, files in os.walk('./references'):
for file in files:
ontology = root.split('/')[-1]
pair = file.split('.')[0]
# Count references for the ontology
reference_count[ontology] = reference_count.get(ontology, 0) + 1
# Evaluate matchers and handle errors gracefully
for matcher, file_path in matchers.get(ontology, {}).get(pair, []):
try:
evaluations.extend([
[matcher, 'def', pair, ontology] + list(evaluate_edoal(file_path, f'{root}/{file}')),
[matcher, 'def w=0', pair, ontology] + list(evaluate_edoal(file_path, f'{root}/{file}', w=0.0)),
[matcher, 'def w=1', pair, ontology] + list(evaluate_edoal(file_path, f'{root}/{file}', w=1.0)),
[matcher, 'jaccard', pair, ontology] + list(evaluate_edoal(file_path, f'{root}/{file}', sim_func=jaccard_sim)),
[matcher, 'jaccard w=0', pair, ontology] + list(evaluate_edoal(file_path, f'{root}/{file}', w=0.0, sim_func=jaccard_sim)),
[matcher, 'jaccard w=1', pair, ontology] + list(evaluate_edoal(file_path, f'{root}/{file}', w=1.0, sim_func=jaccard_sim))
])
except:
# Handle failed evaluations by appending default values
evaluations.extend([
[matcher, metric, pair, ontology, 0, 0, 0] for metric in
['def', 'def w=0', 'def w=1', 'jaccard', 'jaccard w=0', 'jaccard w=1']
])
# Create a DataFrame to hold evaluation results
df = pd.DataFrame(evaluations, columns=['matcher', 'metric', 'pair', 'ontology', 'precision', 'recall', 'f1'])
#%% Analyze evaluation results
metrics = ['def', 'def w=0', 'def w=1', 'jaccard', 'jaccard w=0', 'jaccard w=1']
for metric in metrics:
metric_df = df[df['metric'] == metric]
filtered_df = metric_df[metric_df['f1'] != 0]
grouped_df = filtered_df.groupby(['matcher', 'ontology'])[['precision', 'recall', 'f1']].mean()
print(f"{metric}")
print(grouped_df.round(2))
print()
#%%
This diff is collapsed.
This diff is collapsed.
<?xml version='1.0' encoding='utf-8' standalone='no'?>
<!DOCTYPE rdf:RDF [
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#">
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">
<!ENTITY hydro3 "http://spatial.maine.edu/semgaz/HydroOntology#">
<!ENTITY swo "http://cegis.usgs.gov/SWO#">
<!ENTITY edoal "http://ns.inria.org/edoal/1.0/#">
]>
<rdf:RDF xmlns="http://knowledgeweb.semanticweb.org/heterogeneity/alignment#"
xml:base="http://cree-swo/alignment/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:align="http://knowledgeweb.semanticweb.org/heterogeneity/alignment#"
xmlns:cree="http://www.owl-ontologies.com/Cree_hydro.owl#"
xmlns:swo="http://cegis.usgs.gov/SWO#"
xmlns:edoal="http://ns.inria.org/edoal/1.0/#">
<Alignment>
<xml>yes</xml>
<level>2EDOAL</level>
<type>**</type>
<method>manual</method>
<onto1>
<Ontology rdf:about="&hydro3;">
<formalism>
<Formalism align:name="OWL1.0" align:uri="http://www.w3.org/2002/07/owl#" />
</formalism>
</Ontology>
</onto1>
<onto2>
<Ontology rdf:about="&swo;">
<formalism>
<Formalism align:name="OWL1.0" align:uri="http://www.w3.org/2002/07/owl#" />
</formalism>
</Ontology>
</onto2>
<map>
<Cell>
<entity1>
<edoal:Class rdf:about="&hydro3;Coastline" />
</entity1>
<entity2>
<edoal:Class rdf:about="&swo;Coastline" />
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>Equivalence</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Class rdf:about="&hydro3;Levee" />
</entity1>
<entity2>
<edoal:Class rdf:about="&swo;Levee" />
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>Equivalence</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Class rdf:about="&hydro3;Rapids" />
</entity1>
<entity2>
<edoal:Class rdf:about="&swo;Rapids" />
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>Equivalence</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Class rdf:about="&hydro3;Reservoir" />
</entity1>
<entity2>
<edoal:Class rdf:about="&swo;Reservoir" />
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>Equivalence</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Class rdf:about="&hydro3;Wetlands" />
</entity1>
<entity2>
<edoal:Class rdf:about="&swo;SwampOrMarsh" />
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>Equivalence</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Class rdf:about="&hydro3;Falls" />
</entity1>
<entity2>
<edoal:Class rdf:about="&swo;Waterfall" />
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>Equivalence</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Class rdf:about="&hydro3;DamWeir" />
</entity1>
<entity2>
<edoal:Class>
<edoal:or rdf:parseType="Collection" >
<edoal:Class rdf:about="&swo;Dam" />
<edoal:Class rdf:about="&swo;Weir" />
</edoal:or>
</edoal:Class>
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>Equivalence</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Class rdf:about="&hydro3;FreshwaterBay" />
</entity1>
<entity2>
<edoal:Class rdf:about="&swo;BayOrInlet" />
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>SubsumedBy</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Class rdf:about="&hydro3;Lake" />
</entity1>
<entity2>
<edoal:Class rdf:about="&swo;LakeOrPond" />
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>SubsumedBy</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Class rdf:about="&hydro3;Ocean" />
</entity1>
<entity2>
<edoal:Class rdf:about="&swo;SeaOrOcean" />
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>SubsumedBy</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Class rdf:about="&hydro3;River" />
</entity1>
<entity2>
<edoal:Class rdf:about="&swo;StreamOrRiver" />
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>SubsumedBy</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Class rdf:about="&hydro3;SaltWaterBay" />
</entity1>
<entity2>
<edoal:Class rdf:about="&swo;BayOrInlet" />
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>SubsumedBy</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Class rdf:about="&hydro3;Spring" />
</entity1>
<entity2>
<edoal:Class rdf:about="&swo;SpringOrSeep" />
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>SubsumedBy</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Class rdf:about="&hydro3;Watershed" />
</entity1>
<entity2>
<edoal:Class>
<edoal:or rdf:parseType="Collection">
<edoal:Class rdf:about="&swo;LakeOrPond" />
<edoal:Class rdf:about="&swo;SwampOrMarsh" />
</edoal:or>
</edoal:Class>
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>SubsumedBy</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Class>
<edoal:or rdf:parseType="Collection">
<edoal:Class rdf:about="&hydro3;Boundary" />
<edoal:Class rdf:about="&hydro3;Hydrographic_Feature" />
<edoal:Class rdf:about="&hydro3;Hydrographic_Structure" />
</edoal:or>
</edoal:Class>
</entity1>
<entity2>
<edoal:Class rdf:about="&swo;HydrographicFeature" />
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>SubsumedBy</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Relation rdf:about="&hydro3;flowsfrom" />
</entity1>
<entity2>
<edoal:Relation rdf:about="&swo;startsFrom" />
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>SubsumedBy</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Relation rdf:about="&hydro3;flowsinto" />
</entity1>
<entity2>
<edoal:Relation rdf:about="&swo;endsAt" />
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>SubsumedBy</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Relation rdf:about="&hydro3;flowsthrough" />
</entity1>
<entity2>
<edoal:Relation rdf:about="&swo;hasFlow" />
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>SubsumedBy</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Relation rdf:about="&hydro3;isDownstreamTo" />
</entity1>
<entity2>
<edoal:Relation rdf:about="&swo;hasDirection" />
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>SubsumedBy</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Relation rdf:about="&hydro3;isUpstreamOf" />
</entity1>
<entity2>
<edoal:Relation rdf:about="&swo;hasDirection" />
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>SubsumedBy</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Relation rdf:about="&hydro3;hasDam" />
</entity1>
<entity2>
<edoal:Relation rdf:about="&swo;adjoins" />
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>SubsumedBy</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Relation rdf:about="&hydro3;isDamOf" />
</entity1>
<entity2>
<edoal:Relation rdf:about="&swo;adjoins" />
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>SubsumedBy</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Relation rdf:about="&hydro3;hasPart" />
</entity1>
<entity2>
<edoal:Relation rdf:about="&swo;contains" />
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>SubsumedBy</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Relation rdf:about="&hydro3;hasHydrographicPart" />
</entity1>
<entity2>
<edoal:Relation rdf:about="&swo;contains" />
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>SubsumedBy</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Relation rdf:about="&hydro3;isHydrologicallyConnectedTo" />
</entity1>
<entity2>
<edoal:Relation rdf:about="&swo;isConnectedTo" />
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>SubsumedBy</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Relation rdf:about="&hydro3;hasMouth" />
</entity1>
<entity2>
<edoal:Relation rdf:about="&swo;endsAt" />
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>SubsumedBy</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Relation rdf:about="&hydro3;hasSource" />
</entity1>
<entity2>
<edoal:Relation rdf:about="&swo;startsFrom" />
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>SubsumedBy</relation>
</Cell>
</map>
<map>
<Cell>
<entity1>
<edoal:Relation rdf:about="&hydro3;hasTributary" />
</entity1>
<entity2>
<edoal:Relation>
<edoal:inverse>
<edoal:Relation rdf:about="&swo;endsAt" />
</edoal:inverse>
</edoal:Relation>
</entity2>
<measure rdf:datatype="&xsd;float">1.</measure>
<relation>SubsumedBy</relation>
</Cell>
</map>
</Alignment>
</rdf:RDF>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<!DOCTYPE rdf:RDF [
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">
<!ENTITY cmt "http://cmt#">
<!ENTITY confOf "http://confOf#">
<!ENTITY proton "http://proton.semanticweb.org/">
<!ENTITY edoal "http://ns.inria.org/edoal/1.0/#">
]>
<!-- JE2010: With the "#" in the end, this is parsed (by the RDF parser...)
without it, this is not! -->
<rdf:RDF xmlns="http://knowledgeweb.semanticweb.org/heterogeneity/alignment#"
xml:base="http://cmt-confOf/alignment/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:align="http://knowledgeweb.semanticweb.org/heterogeneity/alignment#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cmt="http://cmt#"
xmlns:confOf="http://confOf#"
xmlns:proton="http://proton.semanticweb.org/"
xmlns:edoal="http://ns.inria.org/edoal/1.0/#">
<Alignment rdf:about="http://cmt-confOf/alignment/">
<xml>yes</xml>
<dc:creator>http://www.irit.fr/recherches/MELODI/ontologies/contributors#thieblin</dc:creator>
<dc:date>2017/07/11</dc:date>
<method>manual</method>
<purpose>matcher-evaluation</purpose>
<level>2EDOAL</level>
<type>**</type>
<onto1>
<Ontology rdf:about="http://cmt">
<formalism>
<Formalism align:uri="http://www.w3.org/TR/owl-guide/" align:name="owl" />
</formalism>
</Ontology>
</onto1>
<onto2>
<Ontology rdf:about="http://confOf">
<formalism>
<Formalism align:uri="http://www.w3.org/TR/owl-guide/" align:name="owl" />
</formalism>
</Ontology>
</onto2>
<map>
<Cell rdf:about="ProgramCommitteeChair1">
<entity1>
<edoal:Class rdf:about="&cmt;ProgramCommitteeChair" />
</entity1>
<entity2>
<edoal:Class rdf:about="&confOf;Chair_PC" />
</entity2>
<measure rdf:datatype="&xsd;float">1.0</measure>
<relation>Equivalence</relation>
</Cell>
</map>
<map>
<Cell rdf:about="ProgramCommitteeMember2">
<entity1>
<edoal:Class rdf:about="&cmt;ProgramCommitteeMember" />
</entity1>
<entity2>
<edoal:Class rdf:about="&confOf;Member_PC" />
</entity2>
<measure rdf:datatype="&xsd;float">1.0</measure>
<relation>Equivalence</relation>
</Cell>
</map>
<map>
<Cell rdf:about="Person3">
<entity1>
<edoal:Class rdf:about="&cmt;Person" />
</entity1>
<entity2>
<edoal:Class rdf:about="&confOf;Person" />
</entity2>
<measure rdf:datatype="&xsd;float">1.0</measure>
<relation>Equivalence</relation>
</Cell>
</map>
<map>
<Cell rdf:about="Author4">
<entity1>
<edoal:Class rdf:about="&cmt;Author" />
</entity1>
<entity2>
<edoal:Class rdf:about="&confOf;Author" />
</entity2>
<measure rdf:datatype="&xsd;float">1.0</measure>
<relation>Equivalence</relation>
</Cell>
</map>
<map>
<Cell rdf:about="Administrator5">
<entity1>
<edoal:Class rdf:about="&cmt;Administrator" />
</entity1>
<entity2>
<edoal:Class rdf:about="&confOf;Administrator" />
</entity2>
<measure rdf:datatype="&xsd;float">1.0</measure>
<relation>Equivalence</relation>
</Cell>
</map>
<map>
<Cell rdf:about="Conference6">
<entity1>
<edoal:Class rdf:about="&cmt;Conference" />
</entity1>
<entity2>
<edoal:Class rdf:about="&confOf;Conference" />
</entity2>
<measure rdf:datatype="&xsd;float">1.0</measure>
<relation>Equivalence</relation>
</Cell>
</map>
<map>
<Cell rdf:about="Contribution_Paper7">
<entity1>
<edoal:Class rdf:about="&cmt;Paper" />
</entity1>
<entity2>
<edoal:Class rdf:about="&confOf;Contribution" />
</entity2>
<measure rdf:datatype="&xsd;float">1.0</measure>
<relation>Equivalence</relation>
</Cell>
</map>
<map>
<Cell rdf:about="PaperFullVersion8">
<entity1>
<edoal:Class rdf:about="&cmt;PaperFullVersion" />
</entity1>
<entity2>
<edoal:Class rdf:about="&confOf;Paper" />
</entity2>
<measure rdf:datatype="&xsd;float">1.0</measure>
<relation>Equivalence</relation>
</Cell>
</map>
<map>
<Cell rdf:about="Participant9">
<entity1>
<edoal:Class rdf:about="&cmt;ConferenceMember" />
</entity1>
<entity2>
<edoal:Class rdf:about="&confOf;Participant" />
</entity2>
<measure rdf:datatype="&xsd;float">1.0</measure>
<relation>Equivalence</relation>
</Cell>
</map>
<map>
<Cell rdf:about="Topic10">
<entity1>
<edoal:Class rdf:about="&cmt;SubjectArea" />
</entity1>
<entity2>
<edoal:Class rdf:about="&confOf;Topic" />
</entity2>
<measure rdf:datatype="&xsd;float">1.0</measure>
<relation>Equivalence</relation>
</Cell>
</map>
<map>
<Cell rdf:about="hasSubjectArea11">
<entity1>
<edoal:Relation rdf:about="&cmt;hasSubjectArea" />
</entity1>
<entity2>
<edoal:Relation rdf:about="&confOf;dealsWith" />
</entity2>
<measure rdf:datatype="&xsd;float">1.0</measure>
<relation>Equivalence</relation>
</Cell>
</map>
<map>
<Cell rdf:about="hasAuthor12">
<entity1>
<edoal:Relation rdf:about="&cmt;hasAuthor" />
</entity1>
<entity2>
<edoal:Relation rdf:about="&confOf;writtenBy" />
</entity2>
<measure rdf:datatype="&xsd;float">1.0</measure>
<relation>Equivalence</relation>
</Cell>
</map>
<map>
<Cell rdf:about="writePaper13">
<entity1>
<edoal:Relation rdf:about="&cmt;writePaper" />
</entity1>
<entity2>
<edoal:Relation rdf:about="&confOf;writes" />
</entity2>
<measure rdf:datatype="&xsd;float">1.0</measure>
<relation>Equivalence</relation>
</Cell>
</map>
<map>
<Cell rdf:about="readPaper14">
<entity1>
<edoal:Relation rdf:about="&cmt;readPaper" />
</entity1>
<entity2>
<edoal:Relation rdf:about="&confOf;reviewes" />
</entity2>
<measure rdf:datatype="&xsd;float">1.0</measure>
<relation>SubsumedBy</relation>
</Cell>
</map>
<map>
<Cell rdf:about="hasEmail15">
<entity1>
<edoal:Property rdf:about="&cmt;email" />
</entity1>
<entity2>
<edoal:Property rdf:about="&confOf;hasEmail" />
</entity2>
<measure rdf:datatype="&xsd;float">1.0</measure>
<relation>Equivalence</relation>
</Cell>
</map>
<map>
<Cell rdf:about="hasPaperTitle16">
<entity1>
<edoal:Property rdf:about="&cmt;title" />
</entity1>
<entity2>
<edoal:Property rdf:about="&confOf;hasTitle" />
</entity2>
<measure rdf:datatype="&xsd;float">1.0</measure>
<relation>Equivalence</relation>
</Cell>
</map>
<map>
<Cell rdf:about="Reviewer17">
<entity1>
<edoal:Class rdf:about="&cmt;Reviewer" />
</entity1>
<entity2>
<edoal:AttributeOccurenceRestriction>
<edoal:onAttribute>
<edoal:Relation rdf:about="&confOf;reviewes" />
</edoal:onAttribute>
<edoal:comparator rdf:resource="&edoal;greater-than" />
<edoal:value>0</edoal:value>
</edoal:AttributeOccurenceRestriction>
</entity2>
<measure rdf:datatype="&xsd;float">1.0</measure>
<relation>Equivalence</relation>
</Cell>
</map>
</Alignment>
</rdf:RDF>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment