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