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-triple-index.sql 6.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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
  1. --- #step Index node IRIs
  2. CREATE INDEX IF NOT EXISTS node_iri_idx ON locid.nodes (node_iri);
  3. --- #step Vacuum and analyze node table
  4. --- #notx
  5. VACUUM ANALYZE locid.nodes;
  6. --- #step Index authority subjects and objects
  7. CREATE INDEX IF NOT EXISTS auth_subject_uuidx ON locid.auth_triples (subject_uuid);
  8. CREATE INDEX IF NOT EXISTS auth_object_uuidx ON locid.auth_triples (object_uuid);
  9. --- #step Analyze auth triples
  10. --- #notx
  11. VACUUM ANALYZE locid.auth_triples;
  12. --- #step Index authority literal subjects
  13. CREATE INDEX IF NOT EXISTS auth_lit_subject_uuidx ON locid.auth_literals (subject_uuid);
  14. --- #step Analyze auth literals
  15. --- #notx
  16. VACUUM ANALYZE locid.auth_literals;
  17. --- #step Index work subjects and objects
  18. CREATE INDEX IF NOT EXISTS work_subject_uuidx ON locid.work_triples (subject_uuid);
  19. CREATE INDEX IF NOT EXISTS work_object_uuidx ON locid.work_triples (object_uuid);
  20. --- #step Index work literal subjects
  21. CREATE INDEX IF NOT EXISTS work_lit_subject_uuidx ON locid.work_literals (subject_uuid);
  22. --- #step Analyze work triples
  23. --- #notx
  24. VACUUM ANALYZE locid.work_triples;
  25. --- #step Analyze work literals
  26. --- #notx
  27. VACUUM ANALYZE locid.work_literals;
  28. --- #step Index instance subjects and objects
  29. CREATE INDEX IF NOT EXISTS instance_subject_uuidx ON locid.instance_triples (subject_uuid);
  30. CREATE INDEX IF NOT EXISTS instance_object_uuidx ON locid.instance_triples (object_uuid);
  31. --- #step Index instance literal subjects
  32. CREATE INDEX IF NOT EXISTS instance_lit_subject_uuidx ON locid.instance_literals (subject_uuid);
  33. --- #step Analyze instance triples
  34. --- #notx
  35. VACUUM ANALYZE locid.instance_triples;
  36. --- #step Analyze instance literals
  37. --- #notx
  38. VACUUM ANALYZE locid.instance_literals;
  39. --- #step Extract instance node types
  40. DROP MATERIALIZED VIEW IF EXISTS locid.instances_node_type;
  41. CREATE MATERIALIZED VIEW locid.instance_node_type AS
  42. SELECT DISTINCT subject_uuid, object_uuid
  43. FROM locid.instance_triples
  44. WHERE pred_uuid = node_uuid('http://www.w3.org/1999/02/22-rdf-syntax-ns#type');
  45. CREATE INDEX int_subj_idx ON locid.instance_node_type (subject_uuid);
  46. CREATE INDEX int_obj_idx ON locid.instance_node_type (object_uuid);
  47. --- #step Analyze instance node types
  48. --- #notx
  49. VACUUM ANALYZE locid.instance_node_type;
  50. --- #step Extract work node types
  51. DROP MATERIALIZED VIEW IF EXISTS locid.work_node_type;
  52. CREATE MATERIALIZED VIEW locid.work_node_type AS
  53. SELECT DISTINCT subject_uuid, object_uuid
  54. FROM locid.work_triples
  55. WHERE pred_uuid = node_uuid('http://www.w3.org/1999/02/22-rdf-syntax-ns#type');
  56. CREATE INDEX work_subj_idx ON locid.work_node_type (subject_uuid);
  57. --- #step Analyze work node types
  58. --- #notx
  59. VACUUM ANALYZE locid.work_node_type;
  60. --- #step Extract authority node types
  61. DROP MATERIALIZED VIEW IF EXISTS locid.auth_node_type;
  62. CREATE MATERIALIZED VIEW locid.auth_node_type AS
  63. SELECT DISTINCT subject_uuid, object_uuid
  64. FROM locid.auth_triples
  65. WHERE pred_uuid = node_uuid('http://www.w3.org/1999/02/22-rdf-syntax-ns#type');
  66. CREATE INDEX auth_subj_idx ON locid.auth_node_type (subject_uuid);
  67. CREATE INDEX auth_obj_idx ON locid.auth_node_type (object_uuid);
  68. --- #step Analyze auth node types
  69. --- #notx
  70. VACUUM ANALYZE locid.auth_node_type;
  71. --- #step Index well-known nodes
  72. CREATE TABLE IF NOT EXISTS locid.node_aliases (
  73. node_alias VARCHAR UNIQUE NOT NULL,
  74. node_id INTEGER UNIQUE NOT NULL,
  75. node_uuid UUID UNIQUE NOT NULL,
  76. node_iri VARCHAR UNIQUE NOT NULL
  77. );
  78. CREATE OR REPLACE PROCEDURE locid.alias_node (alias VARCHAR, iri VARCHAR)
  79. LANGUAGE plpgsql
  80. AS $ln$
  81. BEGIN
  82. INSERT INTO locid.node_aliases (node_alias, node_id, node_uuid, node_iri)
  83. SELECT alias, node_id, node_uuid, node_iri
  84. FROM locid.nodes
  85. WHERE node_iri = iri
  86. ON CONFLICT DO NOTHING;
  87. END;
  88. $ln$;
  89. CREATE OR REPLACE FUNCTION locid.common_node(alias VARCHAR) RETURNS UUID
  90. LANGUAGE SQL STABLE PARALLEL SAFE COST 10
  91. AS $$
  92. SELECT node_uuid FROM locid.node_aliases WHERE node_alias = alias;
  93. $$;
  94. CREATE OR REPLACE FUNCTION locid.common_nodeid(alias VARCHAR) RETURNS INTEGER
  95. LANGUAGE SQL STABLE PARALLEL SAFE COST 10
  96. AS $$
  97. SELECT node_id FROM locid.node_aliases WHERE node_alias = alias;
  98. $$;
  99. CALL locid.alias_node('instance-of', 'http://id.loc.gov/ontologies/bibframe/instanceOf');
  100. CALL locid.alias_node('label', 'http://www.w3.org/2000/01/rdf-schema#label');
  101. CALL locid.alias_node('auth-label', 'http://www.loc.gov/mads/rdf/v1#authoritativeLabel');
  102. CALL locid.alias_node('gender', 'http://www.loc.gov/mads/rdf/v1#gender');
  103. CALL locid.alias_node('concept', 'http://www.w3.org/2004/02/skos/core#Concept');
  104. CALL locid.alias_node('type', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type');
  105. CALL locid.alias_node('isbn', 'http://id.loc.gov/ontologies/bibframe/Isbn');
  106. CALL locid.alias_node('value', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#value');
  107. CALL locid.alias_node('bf-id-by', 'http://id.loc.gov/ontologies/bibframe/identifiedBy');
  108. CALL locid.alias_node('work', 'http://id.loc.gov/ontologies/bibframe/Work');
  109. CALL locid.alias_node('instance', 'http://id.loc.gov/ontologies/bibframe/Instance');
  110. ANALYSE locid.node_aliases;
  111. --- #step Extract identifiable instance nodes
  112. CREATE MATERIALIZED VIEW IF NOT EXISTS locid.instance_node_triples AS
  113. SELECT sn.node_id AS subject_id, pn.node_id AS pred_id, object_uuid
  114. FROM locid.instance_triples
  115. JOIN locid.nodes sn ON (sn.node_uuid = subject_uuid)
  116. JOIN locid.nodes pn ON (pn.node_uuid = pred_uuid);
  117. CREATE INDEX IF NOT EXISTS instance_node_trip_subject_idx ON locid.instance_node_triples (subject_id);
  118. CREATE INDEX IF NOT EXISTS instance_node_trip_object_idx ON locid.instance_node_triples (object_uuid);
  119. ANALYZE locid.instance_node_triples;
  120. --- #step Extract identifiable work nodes
  121. CREATE MATERIALIZED VIEW IF NOT EXISTS locid.work_node_triples AS
  122. SELECT sn.node_id AS subject_id, pn.node_id AS pred_id, object_uuid
  123. FROM locid.work_triples
  124. JOIN locid.nodes sn ON (sn.node_uuid = subject_uuid)
  125. JOIN locid.nodes pn ON (pn.node_uuid = pred_uuid);
  126. CREATE INDEX IF NOT EXISTS work_node_trip_subject_idx ON locid.work_node_triples (subject_id);
  127. CREATE INDEX IF NOT EXISTS work_node_trip_object_idx ON locid.work_node_triples (object_uuid);
  128. ANALYZE locid.work_node_triples;
  129. --- #step Extract identifiable auth nodes
  130. CREATE MATERIALIZED VIEW IF NOT EXISTS locid.auth_node_triples AS
  131. SELECT sn.node_id AS subject_id, pn.node_id AS pred_id, object_uuid
  132. FROM locid.auth_triples
  133. JOIN locid.nodes sn ON (sn.node_uuid = subject_uuid)
  134. JOIN locid.nodes pn ON (pn.node_uuid = pred_uuid);
  135. CREATE INDEX IF NOT EXISTS auth_node_trip_subject_idx ON locid.auth_node_triples (subject_id);
  136. CREATE INDEX IF NOT EXISTS auth_node_trip_object_idx ON locid.auth_node_triples (object_uuid);
  137. ANALYZE locid.auth_node_triples;
Tip!

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

Comments

Loading...