COMPARE The Met DB against Wikidata titles

This is an experiment to check the consistency of the Met data set and Wikidata.

One approach is to examine an object's title, accession number, creator, creation date and instance of info and to see how many of these match between the two databases.

  1. Met: Load the entire Met database of 400,000 items into a dataframe.
  2. Wikidata: Return all items with Met Object ID (P3634) set into a dataframe.
  3. Compare the basic indicators between the two using fuzzy comparisons.
  4. Flag any objects that have no similarities at all.

Import Met CSV database

This is more than 400,000 rows, so it may take 5-10 seconds or more

import csv
from urllib.request import urlopen
import codecs
# from tqdm import tqdm
# from tqdm._tqdm_notebook import tqdm_notebook
import requests
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from dateutil.parser import parse

# The Met's weekly CSV dump URL in Github is quite big at 250 Mbytes
# Comment out for now, since this is slow to load. 
# url = 'https://media.githubusercontent.com/media/metmuseum/openaccess/master/MetObjects.csv'

# Use local copy of CSV file for speed and read the CSV file into a pandas dataframe
url = 'metmuseum/MetObjects-20190425.csv'
met_df = pd.read_csv(url,low_memory=False)

Sanity check

Take a look at some of the rows. NaN means "not a number" or a blank from the CSV file.

met_df.sample(3)
Object Number Is Highlight Is Public Domain Object ID Department Object Name Title Culture Period Dynasty ... Locale Locus Excavation River Classification Rights and Reproduction Link Resource Metadata Date Repository Tags
319404 2002.494.768 False True 454546 Islamic Art Fragment Fragment NaN NaN NaN ... NaN NaN NaN NaN Textiles NaN http://www.metmuseum.org/art/collection/search... 4/22/2019 8:00:03 AM Metropolitan Museum of Art, New York, NY Textile Fragments
426729 60.683.23 False True 698420 Drawings and Prints Print Art and Literature NaN NaN NaN ... NaN NaN NaN NaN Prints NaN http://www.metmuseum.org/art/collection/search... 4/22/2019 8:00:03 AM Metropolitan Museum of Art, New York, NY Musical Instruments|Women
115042 64.101.521 False True 203388 European Sculpture and Decorative Arts Figure The Roman Charity British, Chelsea NaN NaN ... NaN NaN NaN NaN Ceramics-Porcelain NaN http://www.metmuseum.org/art/collection/search... 4/22/2019 8:00:03 AM Metropolitan Museum of Art, New York, NY Sculpture|Prisoners|Men|Women|Flowers

3 rows × 44 columns

Columns of the Met database

met_df.sample(1).info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1 entries, 2442 to 2442
Data columns (total 44 columns):
Object Number              1 non-null object
Is Highlight               1 non-null bool
Is Public Domain           1 non-null bool
Object ID                  1 non-null int64
Department                 1 non-null object
Object Name                1 non-null object
Title                      1 non-null object
Culture                    1 non-null object
Period                     0 non-null object
Dynasty                    0 non-null object
Reign                      0 non-null object
Portfolio                  0 non-null object
Artist Role                0 non-null object
Artist Prefix              0 non-null object
Artist Display Name        0 non-null object
Artist Display Bio         0 non-null object
Artist Suffix              0 non-null object
Artist Alpha Sort          0 non-null object
Artist Nationality         0 non-null object
Artist Begin Date          0 non-null object
Artist End Date            0 non-null object
Object Date                1 non-null object
Object Begin Date          1 non-null int64
Object End Date            1 non-null int64
Medium                     1 non-null object
Dimensions                 1 non-null object
Credit Line                1 non-null object
Geography Type             1 non-null object
City                       1 non-null object
State                      0 non-null object
County                     0 non-null object
Country                    1 non-null object
Region                     0 non-null object
Subregion                  0 non-null object
Locale                     0 non-null object
Locus                      0 non-null object
Excavation                 0 non-null object
River                      0 non-null object
Classification             1 non-null object
Rights and Reproduction    0 non-null object
Link Resource              1 non-null object
Metadata Date              1 non-null object
Repository                 1 non-null object
Tags                       1 non-null object
dtypes: bool(2), int64(3), object(39)
memory usage: 346.0+ bytes
met_df[met_df['Object Number'].str.match('^62.635$')]
Object Number Is Highlight Is Public Domain Object ID Department Object Name Title Culture Period Dynasty ... Locale Locus Excavation River Classification Rights and Reproduction Link Resource Metadata Date Repository Tags
267275 62.635 False True 396034 Drawings and Prints Print The Delivery of the Keys to Peter NaN NaN NaN ... NaN NaN NaN NaN Prints NaN http://www.metmuseum.org/art/collection/search... 4/22/2019 8:00:03 AM Metropolitan Museum of Art, New York, NY Sheep|Christ|Christian Imagery|Saint Peter|Keys
475029 62.635 False False 772842 Drawings and Prints Print Air NaN NaN NaN ... NaN NaN NaN NaN Prints NaN http://www.metmuseum.org/art/collection/search... 4/22/2019 8:00:03 AM Metropolitan Museum of Art, New York, NY NaN
475031 62.635 False False 772844 Drawings and Prints Print Water NaN NaN NaN ... NaN NaN NaN NaN Prints NaN http://www.metmuseum.org/art/collection/search... 4/22/2019 8:00:03 AM Metropolitan Museum of Art, New York, NY NaN
476670 62.635 False False 774810 Drawings and Prints Print Dilapidated Tower and Gothic Gate NaN NaN NaN ... NaN NaN NaN NaN Prints NaN http://www.metmuseum.org/art/collection/search... 4/22/2019 8:00:03 AM Metropolitan Museum of Art, New York, NY NaN

4 rows × 44 columns

Isolate Met DB columns of interest

met_df[['Object ID','Object Name','Object Date','Title','Artist Display Name']].sample(20)
Object ID Object Name Object Date Title Artist Display Name
266116 394806 Drawing ; Ornament and Architecture ca. 1852 Nine Designs for Decorated Cups Samuel Alcock & Company|Alfred Henry Forrester...
422466 692433 Painting August 1872 Clouds over Olana Frederic Edwin Church
468126 760857 Print 1704 Acis and Galatea at left running away from Pol... Geronimo Frezza|Sisto Badalocchio|Pietro Anton...
197495 316768 Bowl 1st–5th century Bowl with Lizards NaN
278225 407131 Print ca. 1750–80 Large illustration of a part of the first orde... Francesco Piranesi|Francesco Piranesi
42182 48716 Bottle NaN NaN NaN
37807 43602 Knife NaN NaN NaN
351294 506173 Lukombé (slit drum) ca. 1900 Lukombé (slit drum) NaN
8691 9337 Vase ca. 1886 Vase Hobbs, Brockunier and Company
318737 453224 Fragment first half 17th century Fragment NaN
92609 158452 Ball gown 1953 Ball gown Charles James
1039 1124 Candelabrum ca. 1836 Candelabrum NaN
51510 59367 Netsuke 18th century NaN NaN
440902 718463 Drawing Ornament & Architecture ca. 1940–1950 Textile Design with Bundles of Carmine Roses, ... Robert Bryer
233916 361560 Print 1647 Royal Exchange Wenceslaus Hollar
305593 435181 Print 1596–1638 Landscape Magdalena de Passe|Roelandt Savery
79313 105076 Evening shoes 1964 Evening shoes Bruno Magli SP.A.
414801 680552 Books Prints Ornament & Architecture 1600 New Künstlichs Modelbuch (Page 43 recto) Bernhard Jobin
411466 671469 Drawing ca. 1932 Frank Lloyd Wright Samuel Johnson Woolf
145912 244845 Cup first half of the 6th century B.C. Cup NaN

Send Wikidata Query to pick up Met objects

Met objects are currently (April 2019) modeled slightly differently, so one goal of the project is to normalize this and make it consistent. There are currently two different methods to pick up Met objects:

  1. Anything with Met ID (P3634)
  2. Anything with inventory number (P217) qualified with collection (P195) set to Met (Q160236)

For a SPARQL query, these two are combined with UNION, and optional fields returned.

wikidata_api_url = 'https://query.wikidata.org/bigdata/namespace/wdq/sparql'

query = '''
SELECT DISTINCT ?item ?inventorynumber ?metid ?creator ?creatorLabel ?inception 
WHERE 
{
  {
    ?item p:P217 [ ps:P217 ?inventorynumber ; pq:P195 wd:Q160236 ]  .
  } UNION {
    ?item wdt:P3634 ?metid .
  }
  OPTIONAL { ?item p:P217 [ ps:P217 ?inventorynumber ; pq:P195 wd:Q160236 ]  . }
  OPTIONAL { ?item wdt:P3634 ?metid . }
  OPTIONAL { ?item wdt:P170 ?creator . }
  OPTIONAL { ?item wdt:P571 ?inception . }

  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
} 
'''

data = requests.post(wikidata_api_url, data={'query': query, 'format': 'json'}).json()

Convert the WDQ JSON result to a dataframe

Make life easier by converting the JSON to a Pandas Dataframe, which is basically a 2D spreadsheet-like data structure. We're going to also do some integrity checks as we import. Most of the data are strings and numbers, but the "inception" is a formal date string in the format +1984-01-01T00:00:00Z and it's possible Wikidata has dates that validate but are illogical, like year 0. It will error out on these, and show up in pink below.

Problem - It is also possible inception is set to "Unknown value" in Wikidata which is tricky to handle in Python.

In SPARQL parlance, it would be tested like this:

?item wdt:P571 ?date .

FILTER isBLANK(?date) .

We're have to figure out how to best represent this while doing our data work, since a Python dateTime module is quite strict. Some research indicates that there is quite a need for this type of function of handling outliers, but there is no simple or pat solution.

(https://stackoverflow.com/questions/6697770/allowing-invalid-dates-in-python-datetime)

import logging as logger
import numpy as np

resultarray = []
for item in data['results']['bindings']:
    # Need to fill in 0 and not None for int64, or this will be cast as float64
    metid = item['metid']['value'] if 'metid' in item else 0
    inventorynumber = item['inventorynumber']['value'] if 'inventorynumber' in item else None
    cl = item['creatorLabel']['value'] if 'creatorLabel' in item else None
    
    # Dates are weird - they are usually like +1984-01-01T00:00:00Z
    #   They may also be "unknown" with or without a start and end time
    try:
        inception = parse(item['inception']['value']) if 'inception' in item else None
    except (TypeError, ValueError):
        logger.warning('failed to parse QID %s - time %r', item['item']['value'], item['inception']['value'])
    
    resultarray.append({
        'qid': int(item['item']['value'].replace('http://www.wikidata.org/entity/Q','')),
        'metid': int(metid),
        'creatorLabel': cl,
        'inception': inception,
        'inventorynumber': inventorynumber,
        }
    )

# resultarray

# Create a Pandas dataframe    
wd_metitems_df = pd.DataFrame(resultarray)

# wd_metitems_df.astype(dtype={'metid':np.int64})

wd_metitems_df.info()
WARNING:root:failed to parse QID http://www.wikidata.org/entity/Q62759189 - time 't1415987824'
WARNING:root:failed to parse QID http://www.wikidata.org/entity/Q62761150 - time 't1415987834'
WARNING:root:failed to parse QID http://www.wikidata.org/entity/Q59767196 - time 't1466676268'
WARNING:root:failed to parse QID http://www.wikidata.org/entity/Q59770772 - time 't1466676468'
WARNING:root:failed to parse QID http://www.wikidata.org/entity/Q63434597 - time 't1446348760'
WARNING:root:failed to parse QID http://www.wikidata.org/entity/Q61730536 - time 't1466677115'
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10800 entries, 0 to 10799
Data columns (total 5 columns):
creatorLabel       9565 non-null object
inception          10417 non-null object
inventorynumber    10695 non-null object
metid              10800 non-null int64
qid                10800 non-null int64
dtypes: int64(2), object(3)
memory usage: 422.0+ KB

Examine some random records to check they are being imported correctly

wd_metitems_df.sample(15)
creatorLabel inception inventorynumber metid qid
6705 Robert Havell 1840-01-01 00:00:00+00:00 54.90.32 11042 20174458
4004 Emmanuel Tzanes 1663-01-01 00:00:00+00:00 33.79.18 437857 19913426
8214 anonymous 1350-01-01 00:00:00+00:00 25.120.289a-e 473891 20201854
2933 anonymous 1700-01-01 00:00:00+00:00 1976.100.13 436347 19913242
9540 None 0433-01-01 00:00:00+00:00 11.141 248499 29383763
1923 anonymous 1750-01-01 00:00:00+00:00 25.106.36 435939 19913745
1984 anonymous 1800-01-01 00:00:00+00:00 62.122.32 437665 19913880
10203 None 0265-01-01 00:00:00+00:00 55.11.5 254819 29383917
6913 Pavel Svinyin 1811-01-01 00:00:00+00:00 42.95.42 12729 20178059
6479 David Teniers the Younger 1655-01-01 00:00:00+00:00 1975.1.127 459069 20187112
5995 William Scott 1957-01-01 00:00:00+00:00 2007.49.87 492759 20190127
10725 None None None 38159 43712728
3366 Henry Colton Shumway 1843-01-01 00:00:00+00:00 2007.437 19718 19924795
8606 None 1800-01-01 00:00:00+00:00 1988.301 327369 29384521
5120 William P. Chappel 1870-01-01 00:00:00+00:00 54.90.514 10440 20175745

Use Pandas equivalent of a database join

Do an "inner" join that makes a new dataframe based on the Met database (met_df) but adds a new columns from the Wikidata query (wd_missing_metid_df) that supplies qid and Object Number/inventory number

merged_todo_metid_df = pd.merge(met_df, wd_missing_metid_df, how='inner', left_on='Object Number', right_on='inventorynumber')

Test some rows for sanity:

merged_todo_metid_df[['Object Number','Object ID','qid']].info()
<class 'pandas.core.frame.DataFrame'>
Index: 0 entries
Data columns (total 3 columns):
Object Number    0 non-null object
Object ID        0 non-null int64
qid              0 non-null int64
dtypes: int64(2), object(1)
memory usage: 0.0+ bytes

Need some checking here - If we had 96 missing Q items, but only 82 are coming back after the merge, there are some errors that need resolving.

Generate Quickstatements to fix the problem

# To generate Quickstatements, iterate over the rows
# Desired output: Q43742238|P3634|26606
QS_ADDMISSING_METID='Q%s|P3634|"%d"'

for index, row in merged_todo_metid_df.iterrows(): 
    print (QS_ADDMISSING_METID % (row['qid'], row['Object ID']))

Wikidata items believed to be Met objects but missing inventory number statement

These items don't have inventory number set but are in the list because Met Object ID (P3634) was set. We test to see if Wikidata results for Met items has inventorynumber set to None.

FIX for this would be to generate and ingest Quickstatements to fill in inventory number.

Something like:

Q61876946|P217|"2003.161"|P195|Q160236

wd_missing_inventory_df = wd_metitems_df[wd_metitems_df['inventorynumber'].isnull()].copy()

wd_missing_inventory_df.sample(10)
creatorLabel inception inventorynumber metid qid
10786 Katsushika Hokusai 1825-01-01 00:00:00+00:00 None 54925 60920142
10729 Makron None None 248697 42186356
10795 Giovanni Paolo Panini 1754-01-01 00:00:00+00:00 None 437245 3094651
10735 None 0589-01-01 00:00:00+00:00 None 548211 28670008
10694 Winslow Homer 1899-01-01 00:00:00+00:00 None 20011478 62022405
10797 None 1550-01-01 00:00:00+00:00 None 812566 61781455
10789 Katsushika Hokusai None None 78638 60682065
10695 Pablo Picasso 1914-01-01 00:00:00+00:00 None 490563 61884489
10765 Kitagawa Utamaro None None 36631 60590430
10758 Gaspare Diziani None None 338609 28732893

Use Pandas equivalent of a database join

Do an "inner" join that makes a new dataframe based on the Met database (met_df) but adds a new columns from the Wikidata query (wd_missing_inventory_df) that supplies qid and matched metid

merged_todo_inventorynumber_df = pd.merge(met_df, wd_missing_inventory_df, how='inner', left_on='Object ID', right_on='metid')

merged_todo_inventorynumber_df[['Object Number','Object ID','qid']].info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 104 entries, 0 to 103
Data columns (total 3 columns):
Object Number    104 non-null object
Object ID        104 non-null int64
qid              104 non-null int64
dtypes: int64(2), object(1)
memory usage: 3.2+ KB
merged_todo_inventorynumber_df[['Object Number','Object ID','qid']].sample(5)
Object Number Object ID qid
91 L.2014.77 503040 63082710
44 2013.730 78801 60661765
63 80.3.384 338609 28732893
87 1998.456.3 490686 61781317
58 2005.100.20 283092 29881716

Generate Quickstatements to fix the problem

# To generate Quickstatements, iterate over the rows
# Desired output: Q61876946|P217|32767|P195|Q160236

# It is possible that the inventory number does exist already, but is missing the qualifier
# For example, it may have:
#   Q61750964|P217|"66.109"
# but not:
#   Q61750964|P217|"66.109"|P195|Q160236

# We could just subtract

QS_ADDMISSING_INVENTORYNUMBER='Q%s|P217|"%s"|P195|Q160236'
QS_ADDMISSING_COLLECTION='Q%s|P195|Q160236|P217|"%s"'

for index, row in merged_todo_inventorynumber_df.iterrows(): 
    print (QS_ADDMISSING_INVENTORYNUMBER % (row['qid'], row['Object Number']))
    print (QS_ADDMISSING_COLLECTION % (row['qid'], row['Object Number']))
Q61750964|P217|"66.109"|P195|Q160236
Q61750964|P195|Q160236|P217|"66.109"
Q30993455|P217|"2016.797.21"|P195|Q160236
Q30993455|P195|Q160236|P217|"2016.797.21"
Q30994036|P217|"2016.797.17"|P195|Q160236
Q30994036|P195|Q160236|P217|"2016.797.17"
Q61750993|P217|"43.120.1208a, b"|P195|Q160236
Q61750993|P195|Q160236|P217|"43.120.1208a, b"
Q30063003|P217|"36.25.508"|P195|Q160236
Q30063003|P195|Q160236|P217|"36.25.508"
Q60590430|P217|"JP152"|P195|Q160236
Q60590430|P195|Q160236|P217|"JP152"
Q60579810|P217|"JP555"|P195|Q160236
Q60579810|P195|Q160236|P217|"JP555"
Q60628715|P217|"JP1122"|P195|Q160236
Q60628715|P195|Q160236|P217|"JP1122"
Q60601286|P217|"JP2739"|P195|Q160236
Q60601286|P195|Q160236|P217|"JP2739"
Q60567840|P217|"JP3118"|P195|Q160236
Q60567840|P195|Q160236|P217|"JP3118"
Q60568037|P217|"JP3129"|P195|Q160236
Q60568037|P195|Q160236|P217|"JP3129"
Q43712728|P217|"1982.220.7"|P195|Q160236
Q43712728|P195|Q160236|P217|"1982.220.7"
Q62794859|P217|"36.100.70"|P195|Q160236
Q62794859|P195|Q160236|P217|"36.100.70"
Q61751040|P217|"30.32.15"|P195|Q160236
Q61751040|P195|Q160236|P217|"30.32.15"
Q43742393|P217|"19.103.2"|P195|Q160236
Q43742393|P195|Q160236|P217|"19.103.2"
Q60628584|P217|"1996.463"|P195|Q160236
Q60628584|P195|Q160236|P217|"1996.463"
Q28126677|P217|"1991.134"|P195|Q160236
Q28126677|P195|Q160236|P217|"1991.134"
Q60590216|P217|"JP990"|P195|Q160236
Q60590216|P195|Q160236|P217|"JP990"
Q47544982|P217|"1985.227.1"|P195|Q160236
Q47544982|P195|Q160236|P217|"1985.227.1"
Q43376787|P217|"1999.263a, b"|P195|Q160236
Q43376787|P195|Q160236|P217|"1999.263a, b"
Q61746498|P217|"1989.363.123"|P195|Q160236
Q61746498|P195|Q160236|P217|"1989.363.123"
Q60920142|P217|"JP1016"|P195|Q160236
Q60920142|P195|Q160236|P217|"JP1016"
Q60572478|P217|"JP1121"|P195|Q160236
Q60572478|P195|Q160236|P217|"JP1121"
Q60595333|P217|"JP2394"|P195|Q160236
Q60595333|P195|Q160236|P217|"JP2394"
Q60706622|P217|"JIB5"|P195|Q160236
Q60706622|P195|Q160236|P217|"JIB5"
Q61409206|P217|"JIB69"|P195|Q160236
Q61409206|P195|Q160236|P217|"JIB69"
Q61413284|P217|"JIB80"|P195|Q160236
Q61413284|P195|Q160236|P217|"JIB80"
Q61748802|P217|"10.7.4"|P195|Q160236
Q61748802|P195|Q160236|P217|"10.7.4"
Q61876908|P217|"2002.325"|P195|Q160236
Q61876908|P195|Q160236|P217|"2002.325"
Q43648711|P217|"2015.300.301a–c"|P195|Q160236
Q43648711|P195|Q160236|P217|"2015.300.301a–c"
Q63243745|P217|"SL.17.2011.22.4"|P195|Q160236
Q63243745|P195|Q160236|P217|"SL.17.2011.22.4"
Q61781621|P217|"2011.127"|P195|Q160236
Q61781621|P195|Q160236|P217|"2011.127"
Q60682065|P217|"2013.736a–f"|P195|Q160236
Q60682065|P195|Q160236|P217|"2013.736a–f"
Q60704425|P217|"2013.738a, b"|P195|Q160236
Q60704425|P195|Q160236|P217|"2013.738a, b"
Q60570674|P217|"2013.852a, b"|P195|Q160236
Q60570674|P195|Q160236|P217|"2013.852a, b"
Q60571703|P217|"2013.853"|P195|Q160236
Q60571703|P195|Q160236|P217|"2013.853"
Q60571061|P217|"2013.858"|P195|Q160236
Q60571061|P195|Q160236|P217|"2013.858"
Q60571356|P217|"2013.859"|P195|Q160236
Q60571356|P195|Q160236|P217|"2013.859"
Q60704878|P217|"2013.875"|P195|Q160236
Q60704878|P195|Q160236|P217|"2013.875"
Q60704659|P217|"2013.878"|P195|Q160236
Q60704659|P195|Q160236|P217|"2013.878"
Q60701873|P217|"2013.881"|P195|Q160236
Q60701873|P195|Q160236|P217|"2013.881"
Q60571569|P217|"2013.897"|P195|Q160236
Q60571569|P195|Q160236|P217|"2013.897"
Q60705589|P217|"2013.726"|P195|Q160236
Q60705589|P195|Q160236|P217|"2013.726"
Q60661034|P217|"2013.729a–c"|P195|Q160236
Q60661034|P195|Q160236|P217|"2013.729a–c"
Q60661765|P217|"2013.730"|P195|Q160236
Q60661765|P195|Q160236|P217|"2013.730"
Q41601734|P217|"29.158.485"|P195|Q160236
Q41601734|P195|Q160236|P217|"29.158.485"
Q30063394|P217|"2009.300.3275a–c"|P195|Q160236
Q30063394|P195|Q160236|P217|"2009.300.3275a–c"
Q582428|P217|"24.232"|P195|Q160236
Q582428|P195|Q160236|P217|"24.232"
Q30263483|P217|"42.30.17a, b"|P195|Q160236
Q30263483|P195|Q160236|P217|"42.30.17a, b"
Q54965918|P217|"58.75.3"|P195|Q160236
Q54965918|P195|Q160236|P217|"58.75.3"
Q30262521|P217|"42.30.18a, b"|P195|Q160236
Q30262521|P195|Q160236|P217|"42.30.18a, b"
Q60646192|P217|"L.2011.66.56a, b"|P195|Q160236
Q60646192|P195|Q160236|P217|"L.2011.66.56a, b"
Q42186356|P217|"12.231.1"|P195|Q160236
Q42186356|P195|Q160236|P217|"12.231.1"
Q42149613|P217|"17.230.5"|P195|Q160236
Q42149613|P195|Q160236|P217|"17.230.5"
Q36446060|P217|"24.97.21a, b"|P195|Q160236
Q36446060|P195|Q160236|P217|"24.97.21a, b"
Q36446060|P217|"24.97.21a, b"|P195|Q160236
Q36446060|P195|Q160236|P217|"24.97.21a, b"
Q42244789|P217|"46.11.7"|P195|Q160236
Q42244789|P195|Q160236|P217|"46.11.7"
Q3209564|P217|"1976.646"|P195|Q160236
Q3209564|P195|Q160236|P217|"1976.646"
Q29881716|P217|"2005.100.20"|P195|Q160236
Q29881716|P195|Q160236|P217|"2005.100.20"
Q61876946|P217|"2003.161"|P195|Q160236
Q61876946|P195|Q160236|P217|"2003.161"
Q61781606|P217|"1987.394.544"|P195|Q160236
Q61781606|P195|Q160236|P217|"1987.394.544"
Q26221327|P217|"62.151"|P195|Q160236
Q26221327|P195|Q160236|P217|"62.151"
Q61876710|P217|"1999.171.1, .2"|P195|Q160236
Q61876710|P195|Q160236|P217|"1999.171.1, .2"
Q28732893|P217|"80.3.384"|P195|Q160236
Q28732893|P195|Q160236|P217|"80.3.384"
Q56604898|P217|"26.72.24"|P195|Q160236
Q56604898|P195|Q160236|P217|"26.72.24"
Q56604898|P217|"26.72.24"|P195|Q160236
Q56604898|P195|Q160236|P217|"26.72.24"
Q23688157|P217|"06.1322.2"|P195|Q160236
Q23688157|P195|Q160236|P217|"06.1322.2"
Q18338529|P217|"19.73.66"|P195|Q160236
Q18338529|P195|Q160236|P217|"19.73.66"
Q61876882|P217|"2003.20.4"|P195|Q160236
Q61876882|P195|Q160236|P217|"2003.20.4"
Q18339638|P217|"19.73.152"|P195|Q160236
Q18339638|P195|Q160236|P217|"19.73.152"
Q61876879|P217|"17.3.4"|P195|Q160236
Q61876879|P195|Q160236|P217|"17.3.4"
Q61781468|P217|"2009.436.1a–w"|P195|Q160236
Q61781468|P195|Q160236|P217|"2009.436.1a–w"
Q18338468|P217|"68.793.66"|P195|Q160236
Q18338468|P195|Q160236|P217|"68.793.66"
Q18338961|P217|"19.73.82"|P195|Q160236
Q18338961|P195|Q160236|P217|"19.73.82"
Q61781441|P217|"53.600.261(5)"|P195|Q160236
Q61781441|P195|Q160236|P217|"53.600.261(5)"
Q3395798|P217|"49.7.21"|P195|Q160236
Q3395798|P195|Q160236|P217|"49.7.21"
Q17275914|P217|"14.40.626–27"|P195|Q160236
Q17275914|P195|Q160236|P217|"14.40.626–27"
Q44214076|P217|"49.7.22"|P195|Q160236
Q44214076|P195|Q160236|P217|"49.7.22"
Q3094651|P217|"52.63.2"|P195|Q160236
Q3094651|P195|Q160236|P217|"52.63.2"
Q25936897|P217|"66.25"|P195|Q160236
Q25936897|P195|Q160236|P217|"66.25"
Q25936897|P217|"66.25"|P195|Q160236
Q25936897|P195|Q160236|P217|"66.25"
Q31073129|P217|"1979.317.1"|P195|Q160236
Q31073129|P195|Q160236|P217|"1979.317.1"
Q31068759|P217|"1979.317.2ab"|P195|Q160236
Q31068759|P195|Q160236|P217|"1979.317.2ab"
Q31070828|P217|"1979.317.3ab"|P195|Q160236
Q31070828|P195|Q160236|P217|"1979.317.3ab"
Q29049154|P217|"1990.38.1"|P195|Q160236
Q29049154|P195|Q160236|P217|"1990.38.1"
Q933665|P217|"1990.38.3"|P195|Q160236
Q933665|P195|Q160236|P217|"1990.38.3"
Q61884489|P217|"CTO.135"|P195|Q160236
Q61884489|P195|Q160236|P217|"CTO.135"
Q5506360|P217|"2016.237.33"|P195|Q160236
Q5506360|P195|Q160236|P217|"2016.237.33"
Q61781317|P217|"1998.456.3"|P195|Q160236
Q61781317|P195|Q160236|P217|"1998.456.3"
Q60596830|P217|"CTO.128"|P195|Q160236
Q60596830|P195|Q160236|P217|"CTO.128"
Q60517079|P217|"SL.17.2014.1.3"|P195|Q160236
Q60517079|P195|Q160236|P217|"SL.17.2014.1.3"
Q61479355|P217|"SL.17.2014.1.9"|P195|Q160236
Q61479355|P195|Q160236|P217|"SL.17.2014.1.9"
Q63082710|P217|"L.2014.77"|P195|Q160236
Q63082710|P195|Q160236|P217|"L.2014.77"
Q7107718|P217|"31.4.2"|P195|Q160236
Q7107718|P195|Q160236|P217|"31.4.2"
Q28670008|P217|"07.229.1a, b"|P195|Q160236
Q28670008|P195|Q160236|P217|"07.229.1a, b"
Q61781516|P217|"2011.599.1a"|P195|Q160236
Q61781516|P195|Q160236|P217|"2011.599.1a"
Q61627764|P217|"63.350.207.135.17"|P195|Q160236
Q61627764|P195|Q160236|P217|"63.350.207.135.17"
Q44178853|P217|"2014.520"|P195|Q160236
Q44178853|P195|Q160236|P217|"2014.520"
Q55619837|P217|"SL.1.2016.39.1"|P195|Q160236
Q55619837|P195|Q160236|P217|"SL.1.2016.39.1"
Q61781550|P217|"1972.717.1"|P195|Q160236
Q61781550|P195|Q160236|P217|"1972.717.1"
Q61781403|P217|"1972.717.4"|P195|Q160236
Q61781403|P195|Q160236|P217|"1972.717.4"
Q56651549|P217|"SL.2.2018.1.2"|P195|Q160236
Q56651549|P195|Q160236|P217|"SL.2.2018.1.2"
Q61781450|P217|"2016.113"|P195|Q160236
Q61781450|P195|Q160236|P217|"2016.113"
Q56697085|P217|"SL.2.2018.21.20"|P195|Q160236
Q56697085|P195|Q160236|P217|"SL.2.2018.21.20"
Q61781455|P217|"2018.756"|P195|Q160236
Q61781455|P195|Q160236|P217|"2018.756"