Register
Login
Resources
Docs Blog Datasets Glossary Case Studies Tutorials & Webinars
Product
Data Engine LLMs Platform Enterprise
Pricing Explore
Connect to our Discord channel

loc-id-book-index.sql 6.2 KB

You have to be logged in to leave a comment. Sign In
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
  1. --- #step Extract instance IRIs
  2. DROP MATERIALIZED VIEW IF EXISTS locid.instance_entity CASCADE;
  3. CREATE MATERIALIZED VIEW locid.instance_entity AS
  4. SELECT DISTINCT it.subject_id AS instance_id, sn.node_uuid AS instance_uuid,
  5. sn.node_iri AS instance_iri
  6. FROM locid.instance_node_triples it
  7. JOIN locid.nodes sn ON (subject_id = sn.node_id)
  8. JOIN locid.nodes pn ON (pred_id = pn.node_id)
  9. WHERE pn.node_iri = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'
  10. AND object_uuid = node_uuid('http://id.loc.gov/ontologies/bibframe/Instance');
  11. CREATE UNIQUE INDEX instance_inst_id_idx ON locid.instance_entity (instance_id);
  12. CREATE UNIQUE INDEX instance_inst_uuid_idx ON locid.instance_entity (instance_uuid);
  13. CREATE INDEX instance_inst_iri_idx ON locid.instance_entity (instance_iri);
  14. --- #step Analyze instance IRIs
  15. --- #notx
  16. VACUUM ANALYZE locid.instance_entity;
  17. --- #step Extract work IRIs
  18. DROP MATERIALIZED VIEW IF EXISTS locid.work_entity CASCADE;
  19. CREATE MATERIALIZED VIEW locid.work_entity AS
  20. SELECT DISTINCT wt.subject_id AS work_id,
  21. sn.node_uuid AS work_uuid,
  22. sn.node_iri AS work_iri
  23. FROM locid.work_node_triples wt
  24. JOIN locid.nodes sn ON (subject_id = sn.node_id)
  25. JOIN locid.nodes pn ON (pred_id = pn.node_id)
  26. WHERE pn.node_iri = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'
  27. AND object_uuid = node_uuid('http://id.loc.gov/ontologies/bibframe/Work');
  28. CREATE INDEX work_inst_id_idx ON locid.work_entity (work_id);
  29. CREATE INDEX work_inst_uuid_idx ON locid.work_entity (work_uuid);
  30. CREATE INDEX work_inst_iri_idx ON locid.work_entity (work_iri);
  31. --- #step Analyze work IRIs
  32. --- #notx
  33. VACUUM ANALYZE locid.work_entity;
  34. --- #step Extract instance/work relationships
  35. DROP MATERIALIZED VIEW IF EXISTS locid.instance_work CASCADE;
  36. CREATE MATERIALIZED VIEW locid.instance_work AS
  37. SELECT DISTINCT ie.instance_id, ie.instance_uuid,
  38. we.work_id AS work_id, we.work_uuid
  39. FROM locid.instance_entity ie
  40. JOIN locid.instance_node_triples it ON (ie.instance_id = it.subject_id)
  41. JOIN locid.work_entity we ON (it.object_uuid = we.work_uuid)
  42. JOIN locid.nodes pn ON (pn.node_id = it.pred_id)
  43. WHERE pn.node_iri = 'http://id.loc.gov/ontologies/bibframe/instanceOf';
  44. CREATE INDEX instance_work_instance_idx ON locid.instance_work (instance_uuid);
  45. CREATE INDEX instance_work_work_idx ON locid.instance_work (work_uuid);
  46. ANALYZE locid.instance_work;
  47. --- #step Index instance ISBNs
  48. DROP MATERIALIZED VIEW IF EXISTS locid.instance_ext_isbn CASCADE;
  49. CREATE MATERIALIZED VIEW locid.instance_ext_isbn AS
  50. SELECT tt.subject_uuid AS subject_uuid,
  51. il.lit_value AS raw_isbn,
  52. extract_isbn(il.lit_value) AS isbn
  53. FROM locid.instance_triples tt
  54. JOIN locid.instance_literals il USING (subject_uuid)
  55. WHERE
  56. -- subject is of type ISBN
  57. tt.pred_uuid = node_uuid('http://www.w3.org/1999/02/22-rdf-syntax-ns#type')
  58. AND tt.object_uuid = node_uuid('http://id.loc.gov/ontologies/bibframe/Isbn')
  59. -- we have a literal value
  60. AND il.pred_uuid = node_uuid('http://www.w3.org/1999/02/22-rdf-syntax-ns#value');
  61. CREATE INDEX instance_ext_isbn_node_idx ON locid.instance_ext_isbn (subject_uuid);
  62. ANALYZE locid.instance_ext_isbn;
  63. --- #step Index work ISBNs
  64. DROP MATERIALIZED VIEW IF EXISTS locid.work_ext_isbn CASCADE;
  65. CREATE MATERIALIZED VIEW locid.work_ext_isbn AS
  66. SELECT tt.subject_uuid AS subject_uuid,
  67. wl.lit_value AS raw_isbn,
  68. extract_isbn(wl.lit_value) AS isbn
  69. FROM locid.work_triples tt
  70. JOIN locid.work_literals wl USING (subject_uuid)
  71. WHERE
  72. -- subject is of type ISBN
  73. tt.pred_uuid = node_uuid('http://www.w3.org/1999/02/22-rdf-syntax-ns#type')
  74. AND tt.object_uuid = node_uuid('http://id.loc.gov/ontologies/bibframe/Isbn')
  75. -- we have a literal value
  76. AND il.pred_uuid = node_uuid('http://www.w3.org/1999/02/22-rdf-syntax-ns#value');
  77. CREATE INDEX work_ext_isbn_node_idx ON locid.work_ext_isbn (subject_uuid);
  78. ANALYZE locid.work_ext_isbn;
  79. --- #step Enroll ISBNs
  80. INSERT INTO isbn_id (isbn)
  81. SELECT DISTINCT isbn
  82. FROM locid.instance_ext_isbn
  83. WHERE char_length(isbn) IN (10,13)
  84. AND isbn NOT IN (SELECT isbn FROM isbn_id);
  85. INSERT INTO isbn_id (isbn)
  86. SELECT DISTINCT isbn
  87. FROM locid.work_ext_isbn
  88. WHERE char_length(isbn) IN (10,13)
  89. AND isbn NOT IN (SELECT isbn FROM isbn_id);
  90. DROP MATERIALIZED VIEW IF EXISTS locid.instance_isbn CASCADE;
  91. CREATE MATERIALIZED VIEW locid.instance_isbn AS
  92. SELECT instance_id, instance_uuid, isbn_id
  93. FROM locid.instance_ext_isbn xi
  94. JOIN locid.instance_node_triples it ON (xi.subject_uuid = it.object_uuid)
  95. JOIN locid.instance_entity ON (it.subject_id = instance_id)
  96. JOIN locid.nodes pn ON (it.pred_id = pn.node_id)
  97. JOIN isbn_id USING (isbn)
  98. WHERE node_iri = 'http://id.loc.gov/ontologies/bibframe/identifiedBy';
  99. CREATE INDEX instance_isbn_idx ON locid.instance_isbn (instance_id);
  100. CREATE INDEX instance_isbn_node_idx ON locid.instance_isbn (instance_uuid);
  101. CREATE INDEX instance_isbn_isbn_idx ON locid.instance_isbn (isbn_id);
  102. ANALYZE locid.instance_isbn;
  103. DROP MATERIALIZED VIEW IF EXISTS locid.work_isbn CASCADE;
  104. CREATE MATERIALIZED VIEW locid.work_isbn AS
  105. SELECT work_id, work_uuid, isbn_id
  106. FROM (locid.work_ext_isbn xi
  107. JOIN locid.work_triples wt ON (xi.subject_uuid = wt.object_uuid))
  108. JOIN locid.work_entity ON (wt.subject_uuid = work_uuid)
  109. JOIN isbn_id USING (isbn)
  110. WHERE wt.pred_uuid = node_uuid('http://id.loc.gov/ontologies/bibframe/identifiedBy');
  111. CREATE INDEX work_isbn_idx ON locid.work_isbn (work_id);
  112. CREATE INDEX work_isbn_node_idx ON locid.work_isbn (work_uuid);
  113. CREATE INDEX work_isbn_isbn_idx ON locid.work_isbn (isbn_id);
  114. ANALYZE locid.work_isbn;
  115. --- #step Set up ISBN Link table
  116. DROP TABLE IF EXISTS locid.isbn_link CASCADE;
  117. CREATE TABLE locid.isbn_link (
  118. isbn_id INTEGER NOT NULL,
  119. instance_id INTEGER,
  120. work_id INTEGER,
  121. book_code INTEGER
  122. );
  123. INSERT INTO locid.isbn_link (isbn_id, work_id, book_code)
  124. SELECT isbn_id, work_id, bc_of_loc_work(work_id)
  125. FROM locid.work_isbn;
  126. INSERT INTO locid.isbn_link (isbn_id, instance_id, work_id, book_code)
  127. SELECT isbn_id, instance_id, work_id, COALESCE(bc_of_loc_work(work_id), bc_of_loc_instance(instance_id))
  128. FROM locid.instance_isbn
  129. LEFT JOIN locid.instance_work USING (instance_id);
  130. CREATE INDEX isbn_link_isbn_idx ON locid.isbn_link (isbn_id);
  131. CREATE INDEX isbn_link_work_idx ON locid.isbn_link (work_id);
  132. CREATE INDEX isbn_link_instance_idx ON locid.isbn_link (work_id);
  133. CREATE INDEX isbn_link_bc_idx ON locid.isbn_link (book_code);
Tip!

Press p or to see the previous file or, n or to see the next file

Comments

Loading...