source: fmts/trunk/kids/C0X_1_0_0_T6.KID@ 1281

Last change on this file since 1281 was 1281, checked in by George Lilly, 12 years ago

FILEIN C0XF2N now includes BULKLOAD experiment

File size: 78.4 KB
Line 
1KIDS Distribution saved on Nov 08, 2011@02:13:03
2includes FILEIN C0XF2N with BULKLOAD experiment
3**KIDS**:C0X*1.0*0^
4
5**INSTALL NAME**
6C0X*1.0*0
7"BLD",7881,0)
8C0X*1.0*0^^0^3111108^n
9"BLD",7881,4,0)
10^9.64PA^172.201^2
11"BLD",7881,4,172.101,0)
12172.101
13"BLD",7881,4,172.101,222)
14y^y^f^^^^n
15"BLD",7881,4,172.201,0)
16172.201
17"BLD",7881,4,172.201,222)
18y^y^f^^^^n
19"BLD",7881,4,"B",172.101,172.101)
20
21"BLD",7881,4,"B",172.201,172.201)
22
23"BLD",7881,6.3)
245
25"BLD",7881,"KRN",0)
26^9.67PA^779.2^20
27"BLD",7881,"KRN",.4,0)
28.4
29"BLD",7881,"KRN",.4,"NM",0)
30^9.68A^1^1
31"BLD",7881,"KRN",.4,"NM",1,0)
32C0X PRINT GRAPH FILE #172.101^172.101^0
33"BLD",7881,"KRN",.4,"NM","B","C0X PRINT GRAPH FILE #172.101",1)
34
35"BLD",7881,"KRN",.401,0)
36.401
37"BLD",7881,"KRN",.402,0)
38.402
39"BLD",7881,"KRN",.403,0)
40.403
41"BLD",7881,"KRN",.5,0)
42.5
43"BLD",7881,"KRN",.84,0)
44.84
45"BLD",7881,"KRN",3.6,0)
463.6
47"BLD",7881,"KRN",3.8,0)
483.8
49"BLD",7881,"KRN",9.2,0)
509.2
51"BLD",7881,"KRN",9.8,0)
529.8
53"BLD",7881,"KRN",9.8,"NM",0)
54^9.68A^3^3
55"BLD",7881,"KRN",9.8,"NM",1,0)
56C0XMAIN^^0^B115393527
57"BLD",7881,"KRN",9.8,"NM",2,0)
58C0XF2N^^0^B368065142
59"BLD",7881,"KRN",9.8,"NM",3,0)
60C0XTEST^^0^B14490662
61"BLD",7881,"KRN",9.8,"NM","B","C0XF2N",2)
62
63"BLD",7881,"KRN",9.8,"NM","B","C0XMAIN",1)
64
65"BLD",7881,"KRN",9.8,"NM","B","C0XTEST",3)
66
67"BLD",7881,"KRN",19,0)
6819
69"BLD",7881,"KRN",19.1,0)
7019.1
71"BLD",7881,"KRN",101,0)
72101
73"BLD",7881,"KRN",409.61,0)
74409.61
75"BLD",7881,"KRN",771,0)
76771
77"BLD",7881,"KRN",779.2,0)
78779.2
79"BLD",7881,"KRN",870,0)
80870
81"BLD",7881,"KRN",8989.51,0)
828989.51
83"BLD",7881,"KRN",8989.52,0)
848989.52
85"BLD",7881,"KRN",8994,0)
868994
87"BLD",7881,"KRN","B",.4,.4)
88
89"BLD",7881,"KRN","B",.401,.401)
90
91"BLD",7881,"KRN","B",.402,.402)
92
93"BLD",7881,"KRN","B",.403,.403)
94
95"BLD",7881,"KRN","B",.5,.5)
96
97"BLD",7881,"KRN","B",.84,.84)
98
99"BLD",7881,"KRN","B",3.6,3.6)
100
101"BLD",7881,"KRN","B",3.8,3.8)
102
103"BLD",7881,"KRN","B",9.2,9.2)
104
105"BLD",7881,"KRN","B",9.8,9.8)
106
107"BLD",7881,"KRN","B",19,19)
108
109"BLD",7881,"KRN","B",19.1,19.1)
110
111"BLD",7881,"KRN","B",101,101)
112
113"BLD",7881,"KRN","B",409.61,409.61)
114
115"BLD",7881,"KRN","B",771,771)
116
117"BLD",7881,"KRN","B",779.2,779.2)
118
119"BLD",7881,"KRN","B",870,870)
120
121"BLD",7881,"KRN","B",8989.51,8989.51)
122
123"BLD",7881,"KRN","B",8989.52,8989.52)
124
125"BLD",7881,"KRN","B",8994,8994)
126
127"FIA",172.101)
128C0X TRIPLE
129"FIA",172.101,0)
130^C0X(101,
131"FIA",172.101,0,0)
132172.101I
133"FIA",172.101,0,1)
134y^y^f^^^^n
135"FIA",172.101,0,10)
136
137"FIA",172.101,0,11)
138
139"FIA",172.101,0,"RLRO")
140
141"FIA",172.101,172.101)
1420
143"FIA",172.201)
144C0X STRING
145"FIA",172.201,0)
146^C0X(201,
147"FIA",172.201,0,0)
148172.201
149"FIA",172.201,0,1)
150y^y^f^^^^n
151"FIA",172.201,0,10)
152
153"FIA",172.201,0,11)
154
155"FIA",172.201,0,"RLRO")
156
157"FIA",172.201,172.201)
1580
159"FIA",172.201,172.2011)
1600
161"IX",172.101,172.101,"G",0)
162172.101^G^REGULAR INDEX OF THE GRAPH FIELD^R^^F^IR^I^172.101^^^^^LS
163"IX",172.101,172.101,"G",1)
164S ^C0X(101,"G",X,DA)=""
165"IX",172.101,172.101,"G",2)
166K ^C0X(101,"G",X,DA)
167"IX",172.101,172.101,"G",2.5)
168K ^C0X(101,"G")
169"IX",172.101,172.101,"G",11.1,0)
170^.114IA^1^1
171"IX",172.101,172.101,"G",11.1,1,0)
1721^F^172.101^.02^^1^F
173"IX",172.101,172.101,"G",11.1,1,3)
174
175"IX",172.101,172.101,"GOPS",0)
176172.101^GOPS^GRAPH ONLY OBJECT PREDICATE SUBJECT^R^^R^IR^I^172.101^^^^^LS
177"IX",172.101,172.101,"GOPS",1)
178S ^C0X(101,"GOPS",$E(X(1),1,240),$E(X(2),1,240),$E(X(3),1,240),$E(X(4),1,240),DA)=""
179"IX",172.101,172.101,"GOPS",2)
180K ^C0X(101,"GOPS",$E(X(1),1,240),$E(X(2),1,240),$E(X(3),1,240),$E(X(4),1,240),DA)
181"IX",172.101,172.101,"GOPS",2.5)
182K ^C0X(101,"GOPS")
183"IX",172.101,172.101,"GOPS",11.1,0)
184^.114IA^4^4
185"IX",172.101,172.101,"GOPS",11.1,1,0)
1861^F^172.101^.02^240^1^F
187"IX",172.101,172.101,"GOPS",11.1,1,3)
188
189"IX",172.101,172.101,"GOPS",11.1,2,0)
1902^F^172.101^.05^240^2^F
191"IX",172.101,172.101,"GOPS",11.1,2,3)
192
193"IX",172.101,172.101,"GOPS",11.1,3,0)
1943^F^172.101^.04^240^3^F
195"IX",172.101,172.101,"GOPS",11.1,3,3)
196
197"IX",172.101,172.101,"GOPS",11.1,4,0)
1984^F^172.101^.03^240^4^F
199"IX",172.101,172.101,"GOPS",11.1,4,3)
200
201"IX",172.101,172.101,"GOSP",0)
202172.101^GOSP^GRAPH ONLY OBJECT SUBJECT PREDICATE^R^^R^IR^I^172.101^^^^^LS
203"IX",172.101,172.101,"GOSP",1)
204S ^C0X(101,"GOSP",$E(X(1),1,240),$E(X(2),1,240),$E(X(3),1,240),$E(X(4),1,240),DA)=""
205"IX",172.101,172.101,"GOSP",2)
206K ^C0X(101,"GOSP",$E(X(1),1,240),$E(X(2),1,240),$E(X(3),1,240),$E(X(4),1,240),DA)
207"IX",172.101,172.101,"GOSP",2.5)
208K ^C0X(101,"GOSP")
209"IX",172.101,172.101,"GOSP",11.1,0)
210^.114IA^4^4
211"IX",172.101,172.101,"GOSP",11.1,1,0)
2121^F^172.101^.02^240^1^F
213"IX",172.101,172.101,"GOSP",11.1,1,3)
214
215"IX",172.101,172.101,"GOSP",11.1,2,0)
2162^F^172.101^.05^240^2^F
217"IX",172.101,172.101,"GOSP",11.1,2,3)
218
219"IX",172.101,172.101,"GOSP",11.1,3,0)
2203^F^172.101^.03^240^3^F
221"IX",172.101,172.101,"GOSP",11.1,3,3)
222
223"IX",172.101,172.101,"GOSP",11.1,4,0)
2244^F^172.101^.04^240^4^F
225"IX",172.101,172.101,"GOSP",11.1,4,3)
226
227"IX",172.101,172.101,"GPSO",0)
228172.101^GPSO^GRAPH ONLY PREDICATE SUBJECT OBJECT^R^^R^IR^I^172.101^^^^^LS
229"IX",172.101,172.101,"GPSO",1)
230S ^C0X(101,"GPSO",$E(X(1),1,240),$E(X(2),1,240),$E(X(3),1,240),$E(X(4),1,240),DA)=""
231"IX",172.101,172.101,"GPSO",2)
232K ^C0X(101,"GPSO",$E(X(1),1,240),$E(X(2),1,240),$E(X(3),1,240),$E(X(4),1,240),DA)
233"IX",172.101,172.101,"GPSO",2.5)
234K ^C0X(101,"GPSO")
235"IX",172.101,172.101,"GPSO",11.1,0)
236^.114IA^4^4
237"IX",172.101,172.101,"GPSO",11.1,1,0)
2381^F^172.101^.02^240^1^F
239"IX",172.101,172.101,"GPSO",11.1,1,3)
240
241"IX",172.101,172.101,"GPSO",11.1,2,0)
2422^F^172.101^.04^240^2^F
243"IX",172.101,172.101,"GPSO",11.1,2,3)
244
245"IX",172.101,172.101,"GPSO",11.1,3,0)
2463^F^172.101^.03^240^3^F
247"IX",172.101,172.101,"GPSO",11.1,3,3)
248
249"IX",172.101,172.101,"GPSO",11.1,4,0)
2504^F^172.101^.05^240^4^F
251"IX",172.101,172.101,"GPSO",11.1,4,3)
252
253"IX",172.101,172.101,"GSPO",0)
254172.101^GSPO^GROUP ONLY SUBJECT PREDICATE OBJECT^R^^R^IR^I^172.101^^^^^LS
255"IX",172.101,172.101,"GSPO",1)
256S ^C0X(101,"GSPO",$E(X(1),1,240),$E(X(2),1,240),$E(X(3),1,240),$E(X(4),1,240),DA)=""
257"IX",172.101,172.101,"GSPO",2)
258K ^C0X(101,"GSPO",$E(X(1),1,240),$E(X(2),1,240),$E(X(3),1,240),$E(X(4),1,240),DA)
259"IX",172.101,172.101,"GSPO",2.5)
260K ^C0X(101,"GSPO")
261"IX",172.101,172.101,"GSPO",11.1,0)
262^.114IA^4^4
263"IX",172.101,172.101,"GSPO",11.1,1,0)
2641^F^172.101^.02^240^1^F
265"IX",172.101,172.101,"GSPO",11.1,1,3)
266
267"IX",172.101,172.101,"GSPO",11.1,2,0)
2682^F^172.101^.03^240^2^F
269"IX",172.101,172.101,"GSPO",11.1,2,3)
270
271"IX",172.101,172.101,"GSPO",11.1,3,0)
2723^F^172.101^.04^240^3^F
273"IX",172.101,172.101,"GSPO",11.1,3,3)
274
275"IX",172.101,172.101,"GSPO",11.1,4,0)
2764^F^172.101^.05^240^4^F
277"IX",172.101,172.101,"GSPO",11.1,4,3)
278
279"IX",172.101,172.101,"OPS",0)
280172.101^OPS^REGULAR INDEX OF OBJECT PREDICATE SUBJECT^R^^R^IR^I^172.101^^^^^LS
281"IX",172.101,172.101,"OPS",1)
282S ^C0X(101,"OPS",X(1),X(2),X(3),DA)=""
283"IX",172.101,172.101,"OPS",2)
284K ^C0X(101,"OPS",X(1),X(2),X(3),DA)
285"IX",172.101,172.101,"OPS",2.5)
286K ^C0X(101,"OPS")
287"IX",172.101,172.101,"OPS",11.1,0)
288^.114IA^3^3
289"IX",172.101,172.101,"OPS",11.1,1,0)
2901^F^172.101^.05^^1^F
291"IX",172.101,172.101,"OPS",11.1,1,3)
292
293"IX",172.101,172.101,"OPS",11.1,2,0)
2942^F^172.101^.04^^2^F
295"IX",172.101,172.101,"OPS",11.1,2,3)
296
297"IX",172.101,172.101,"OPS",11.1,3,0)
2983^F^172.101^.03^^3^F
299"IX",172.101,172.101,"OPS",11.1,3,3)
300
301"IX",172.101,172.101,"OSP",0)
302172.101^OSP^REGULAR INDEX OF OBJECT SUBJECT PREDICATE^R^^R^IR^I^172.101^^^^^LS
303"IX",172.101,172.101,"OSP",1)
304S ^C0X(101,"OSP",X(1),X(2),X(3),DA)=""
305"IX",172.101,172.101,"OSP",2)
306K ^C0X(101,"OSP",X(1),X(2),X(3),DA)
307"IX",172.101,172.101,"OSP",2.5)
308K ^C0X(101,"OSP")
309"IX",172.101,172.101,"OSP",11.1,0)
310^.114IA^3^3
311"IX",172.101,172.101,"OSP",11.1,1,0)
3121^F^172.101^.05^^1^F
313"IX",172.101,172.101,"OSP",11.1,1,3)
314
315"IX",172.101,172.101,"OSP",11.1,2,0)
3162^F^172.101^.03^^2^F
317"IX",172.101,172.101,"OSP",11.1,2,3)
318
319"IX",172.101,172.101,"OSP",11.1,3,0)
3203^F^172.101^.04^^3^F
321"IX",172.101,172.101,"OSP",11.1,3,3)
322
323"IX",172.101,172.101,"PSO",0)
324172.101^PSO^REGULAR INDEX OF PREDICATE SUBJECT OBJECT^R^^R^IR^I^172.101^^^^^LS
325"IX",172.101,172.101,"PSO",1)
326S ^C0X(101,"PSO",X(1),X(2),X(3),DA)=""
327"IX",172.101,172.101,"PSO",2)
328K ^C0X(101,"PSO",X(1),X(2),X(3),DA)
329"IX",172.101,172.101,"PSO",2.5)
330K ^C0X(101,"PSO")
331"IX",172.101,172.101,"PSO",11.1,0)
332^.114IA^3^3
333"IX",172.101,172.101,"PSO",11.1,1,0)
3341^F^172.101^.04^^1^F
335"IX",172.101,172.101,"PSO",11.1,1,3)
336
337"IX",172.101,172.101,"PSO",11.1,2,0)
3382^F^172.101^.03^^2^F
339"IX",172.101,172.101,"PSO",11.1,2,3)
340
341"IX",172.101,172.101,"PSO",11.1,3,0)
3423^F^172.101^.05^^3^F
343"IX",172.101,172.101,"PSO",11.1,3,3)
344
345"IX",172.101,172.101,"SPO",0)
346172.101^SPO^REGULAR INDEX OF SUBJECT PREDICATE OBJECT^R^^R^IR^I^172.101^^^^^LS
347"IX",172.101,172.101,"SPO",1)
348S ^C0X(101,"SPO",X(1),X(2),X(3),DA)=""
349"IX",172.101,172.101,"SPO",2)
350K ^C0X(101,"SPO",X(1),X(2),X(3),DA)
351"IX",172.101,172.101,"SPO",2.5)
352K ^C0X(101,"SPO")
353"IX",172.101,172.101,"SPO",11.1,0)
354^.114IA^3^3
355"IX",172.101,172.101,"SPO",11.1,1,0)
3561^F^172.101^.03^^1^F
357"IX",172.101,172.101,"SPO",11.1,1,3)
358
359"IX",172.101,172.101,"SPO",11.1,2,0)
3602^F^172.101^.04^^2^F
361"IX",172.101,172.101,"SPO",11.1,2,3)
362
363"IX",172.101,172.101,"SPO",11.1,3,0)
3643^F^172.101^.05^^3^F
365"IX",172.101,172.101,"SPO",11.1,3,3)
366
367"IX",172.201,172.201,"B",0)
368172.201^B^regular B index for strings to support long strings^R^^F^IR^I^172.201^^^^^LS
369"IX",172.201,172.201,"B",1)
370S ^C0X(201,"B",$E(X,1,240),DA)=""
371"IX",172.201,172.201,"B",2)
372K ^C0X(201,"B",$E(X,1,240),DA)
373"IX",172.201,172.201,"B",2.5)
374K ^C0X(201,"B")
375"IX",172.201,172.201,"B",11.1,0)
376^.114IA^1^1
377"IX",172.201,172.201,"B",11.1,1,0)
3781^F^172.201^.01^240^1^F
379"KRN",.4,1492,-1)
3800^1
381"KRN",.4,1492,0)
382C0X PRINT GRAPH^3111029.121^@^172.101^^@^3111106
383"KRN",.4,1492,"F",2)
384.03;W25;S~.04;C27;W25~.05;C54;W25~
385"KRN",.4,1492,"H")
386C0X TRIPLE LIST
387"MBREQ")
3880
389"ORD",5,.4)
390.4;5;;;EDEOUT^DIFROMSO(.4,DA,"",XPDA);FPRE^DIFROMSI(.4,"",XPDA);EPRE^DIFROMSI(.4,DA,$E("N",$G(XPDNEW)),XPDA,"",OLDA);;EPOST^DIFROMSI(.4,DA,"",XPDA);DEL^DIFROMSK(.4,"",%)
391"ORD",5,.4,0)
392PRINT TEMPLATE
393"QUES","XPF1",0)
394Y
395"QUES","XPF1","??")
396^D REP^XPDH
397"QUES","XPF1","A")
398Shall I write over your |FLAG| File
399"QUES","XPF1","B")
400YES
401"QUES","XPF1","M")
402D XPF1^XPDIQ
403"QUES","XPF2",0)
404Y
405"QUES","XPF2","??")
406^D DTA^XPDH
407"QUES","XPF2","A")
408Want my data |FLAG| yours
409"QUES","XPF2","B")
410YES
411"QUES","XPF2","M")
412D XPF2^XPDIQ
413"QUES","XPI1",0)
414YO
415"QUES","XPI1","??")
416^D INHIBIT^XPDH
417"QUES","XPI1","A")
418Want KIDS to INHIBIT LOGONs during the install
419"QUES","XPI1","B")
420NO
421"QUES","XPI1","M")
422D XPI1^XPDIQ
423"QUES","XPM1",0)
424PO^VA(200,:EM
425"QUES","XPM1","??")
426^D MG^XPDH
427"QUES","XPM1","A")
428Enter the Coordinator for Mail Group '|FLAG|'
429"QUES","XPM1","B")
430
431"QUES","XPM1","M")
432D XPM1^XPDIQ
433"QUES","XPO1",0)
434Y
435"QUES","XPO1","??")
436^D MENU^XPDH
437"QUES","XPO1","A")
438Want KIDS to Rebuild Menu Trees Upon Completion of Install
439"QUES","XPO1","B")
440NO
441"QUES","XPO1","M")
442D XPO1^XPDIQ
443"QUES","XPZ1",0)
444Y
445"QUES","XPZ1","??")
446^D OPT^XPDH
447"QUES","XPZ1","A")
448Want to DISABLE Scheduled Options, Menu Options, and Protocols
449"QUES","XPZ1","B")
450NO
451"QUES","XPZ1","M")
452D XPZ1^XPDIQ
453"QUES","XPZ2",0)
454Y
455"QUES","XPZ2","??")
456^D RTN^XPDH
457"QUES","XPZ2","A")
458Want to MOVE routines to other CPUs
459"QUES","XPZ2","B")
460NO
461"QUES","XPZ2","M")
462D XPZ2^XPDIQ
463"RTN")
4643
465"RTN","C0XF2N")
4660^2^B368065142
467"RTN","C0XF2N",1,0)
468C0XMAIN ; GPL - Fileman Triples entry point routine ;10/13/11 17:05
469"RTN","C0XF2N",2,0)
470 ;;0.1;C0X;nopatch;noreleasedate;Build 5
471"RTN","C0XF2N",3,0)
472 ;Copyright 2011 George Lilly. Licensed under the terms of the GNU
473"RTN","C0XF2N",4,0)
474 ;General Public License See attached copy of the License.
475"RTN","C0XF2N",5,0)
476 ;
477"RTN","C0XF2N",6,0)
478 ;This program is free software; you can redistribute it and/or modify
479"RTN","C0XF2N",7,0)
480 ;it under the terms of the GNU General Public License as published by
481"RTN","C0XF2N",8,0)
482 ;the Free Software Foundation; either version 2 of the License, or
483"RTN","C0XF2N",9,0)
484 ;(at your option) any later version.
485"RTN","C0XF2N",10,0)
486 ;
487"RTN","C0XF2N",11,0)
488 ;This program is distributed in the hope that it will be useful,
489"RTN","C0XF2N",12,0)
490 ;but WITHOUT ANY WARRANTY; without even the implied warranty of
491"RTN","C0XF2N",13,0)
492 ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
493"RTN","C0XF2N",14,0)
494 ;GNU General Public License for more details.
495"RTN","C0XF2N",15,0)
496 ;
497"RTN","C0XF2N",16,0)
498 ;You should have received a copy of the GNU General Public License along
499"RTN","C0XF2N",17,0)
500 ;with this program; if not, write to the Free Software Foundation, Inc.,
501"RTN","C0XF2N",18,0)
502 ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
503"RTN","C0XF2N",19,0)
504 ;
505"RTN","C0XF2N",20,0)
506 Q
507"RTN","C0XF2N",21,0)
508 ;
509"RTN","C0XF2N",22,0)
510 ; This is based on C0XMAIN but experiments with a fast load for triples
511"RTN","C0XF2N",23,0)
512 ; that will write directly to the fileman global
513"RTN","C0XF2N",24,0)
514 ; The file 172.101 is a F2N design style for triples, which means
515"RTN","C0XF2N",25,0)
516 ; that it is a Flat file with no subfiles, all fields at the root
517"RTN","C0XF2N",26,0)
518 ; ... it is a "2" file solution which means all strings are stored in
519"RTN","C0XF2N",27,0)
520 ; ... strings file and pointed to by the triples file
521"RTN","C0XF2N",28,0)
522 ; ... it is an N file because it has generated Node IDs instead of
523"RTN","C0XF2N",29,0)
524 ; ... DINUM which would use the IEN for the Node ID.
525"RTN","C0XF2N",30,0)
526 ; gpl 11/04/2011
527"RTN","C0XF2N",31,0)
528 ;
529"RTN","C0XF2N",32,0)
530INITFARY(ZFARY) ; INITIALIZE FILE NUMBERS AND OTHER USEFUL THINGS
531"RTN","C0XF2N",33,0)
532 ; FOR THE DEFAULT TRIPLE STORE. USE OTHER VALUES FOR SUPPORTING ADDITIONAL
533"RTN","C0XF2N",34,0)
534 ; TRIPLE STORES
535"RTN","C0XF2N",35,0)
536 S @ZFARY@("C0XTFN")=172.101 ; TRIPLES FILE NUMBER
537"RTN","C0XF2N",36,0)
538 S @ZFARY@("C0XSFN")=172.201 ; TRIPLES STRINGS FILE NUMBER
539"RTN","C0XF2N",37,0)
540 S @ZFARY@("C0XTN")=$NA(^C0X(101)) ; TRIPLES GLOBAL NAME
541"RTN","C0XF2N",38,0)
542 S @ZFARY@("C0XSN")=$NA(^C0X(201)) ; STRING FILE GLOBAL NAME
543"RTN","C0XF2N",39,0)
544 S @ZFARY@("C0XDIR")="/home/glilly/fmts/trunk/samples/qds/"
545"RTN","C0XF2N",40,0)
546 S @ZFARY@("BLKLOAD")=0 ; this file supports block load
547"RTN","C0XF2N",41,0)
548 S @ZFARY@("FMTSSTYLE")="F2N" ; fileman style
549"RTN","C0XF2N",42,0)
550 D USEFARY(ZFARY)
551"RTN","C0XF2N",43,0)
552 Q
553"RTN","C0XF2N",44,0)
554 ;
555"RTN","C0XF2N",45,0)
556USEFARY(ZFARY) ; INITIALIZES VARIABLES SAVED IN ARRAY ZFARY
557"RTN","C0XF2N",46,0)
558 N ZI S ZI=""
559"RTN","C0XF2N",47,0)
560 F S ZI=$O(@ZFARY@(ZI)) Q:ZI="" D
561"RTN","C0XF2N",48,0)
562 . ;N ZX
563"RTN","C0XF2N",49,0)
564 . S ZX="S "_ZI_"="""_@ZFARY@(ZI)_""""
565"RTN","C0XF2N",50,0)
566 . ;W !,ZX
567"RTN","C0XF2N",51,0)
568 . X ZX
569"RTN","C0XF2N",52,0)
570 Q
571"RTN","C0XF2N",53,0)
572 ;
573"RTN","C0XF2N",54,0)
574FILEIN ; INTERACTIVE ENTRY POINT FOR OPTION TO READ IN A FILE
575"RTN","C0XF2N",55,0)
576 I '$D(C0XFARY) D INITFARY("C0XFARY")
577"RTN","C0XF2N",56,0)
578 D USEFARY("C0XFARY")
579"RTN","C0XF2N",57,0)
580 S DIR(0)="F^3:240"
581"RTN","C0XF2N",58,0)
582 S DIR("A")="File Directory"
583"RTN","C0XF2N",59,0)
584 S DIR("B")=C0XDIR
585"RTN","C0XF2N",60,0)
586 D ^DIR
587"RTN","C0XF2N",61,0)
588 I Y="^" Q ;
589"RTN","C0XF2N",62,0)
590 S C0XDIR=Y
591"RTN","C0XF2N",63,0)
592 S C0XFARY("C0XDIR")=Y
593"RTN","C0XF2N",64,0)
594 S DIR(0)="F^3:240"
595"RTN","C0XF2N",65,0)
596 S DIR("A")="File Name"
597"RTN","C0XF2N",66,0)
598 I '$D(C0XFN) S DIR("B")="qds.rdf"
599"RTN","C0XF2N",67,0)
600 E S DIR("B")=C0XFN
601"RTN","C0XF2N",68,0)
602 D ^DIR
603"RTN","C0XF2N",69,0)
604 I Y="" Q ;
605"RTN","C0XF2N",70,0)
606 I Y="^" Q ;
607"RTN","C0XF2N",71,0)
608 S C0XFN=Y
609"RTN","C0XF2N",72,0)
610 D IMPORT(C0XFN,C0XDIR,,"C0XFARY")
611"RTN","C0XF2N",73,0)
612 Q
613"RTN","C0XF2N",74,0)
614 ;
615"RTN","C0XF2N",75,0)
616IMPORT(FNAME,FDIR,FURL,FARY) ; EXTRINSIC THAT READS A FILE FROM THE STANDARD
617"RTN","C0XF2N",76,0)
618 ; DIRECTORY, LOADS IT INTO THE TRIPLESTORE AS TEXT, AND RETURNS THE
619"RTN","C0XF2N",77,0)
620 ; NODE NAME OF THE TEXT TRIPLE
621"RTN","C0XF2N",78,0)
622 ; FDIR IS THE OPTIONAL DIRECTORY (DEFAUTS TO STANDARD DIR)
623"RTN","C0XF2N",79,0)
624 ; FURL IS THE OPTIONAL URI FOR ACCESSING THE FILE FROM THE TRIPLE STORE
625"RTN","C0XF2N",80,0)
626 ; FARY IS THE OPTIONAL FILE ARRAY OF THE TRIPLE STORE TO USE
627"RTN","C0XF2N",81,0)
628 I '$D(FARY) D ;
629"RTN","C0XF2N",82,0)
630 . D INITFARY("C0XFARY")
631"RTN","C0XF2N",83,0)
632 . S FARY="C0XFARY"
633"RTN","C0XF2N",84,0)
634 D USEFARY(FARY)
635"RTN","C0XF2N",85,0)
636 N ZD,ZTMP
637"RTN","C0XF2N",86,0)
638 I '$D(FDIR) S FDIR=C0XDIR ; DIRECTORY OF THE RDF FILE
639"RTN","C0XF2N",87,0)
640 I '$D(FURL) D ;
641"RTN","C0XF2N",88,0)
642 . N ZN2 S ZN2=$TR(FNAME,".","_") ; REMOVE THE DOT FROM THE NAME
643"RTN","C0XF2N",89,0)
644 . S FURL=FDIR_ZN2
645"RTN","C0XF2N",90,0)
646 N ZTMP
647"RTN","C0XF2N",91,0)
648 S ZTMP=$NA(^TMP("C0X",$J,"FILEIN",1)) ; WHERE TO PUT THE INCOMING FILE
649"RTN","C0XF2N",92,0)
650 K @ZTMP ; MAKE SURE IT'S CLEAR
651"RTN","C0XF2N",93,0)
652 S C0XSTART=$$NOW^XLFDT
653"RTN","C0XF2N",94,0)
654 W !,"STARTED: ",C0XSTART
655"RTN","C0XF2N",95,0)
656 W !,"READING IN: ",FNAME
657"RTN","C0XF2N",96,0)
658 I '$$FILEREAD(ZTMP,FDIR,FNAME,4) D Q ; QUIT IF NO SUCCESS
659"RTN","C0XF2N",97,0)
660 . W !,"ERROR READING FILE: ",FDIR,FNAME
661"RTN","C0XF2N",98,0)
662 S ZRDF=$NA(^TMP("C0X",$J,"FILEIN")) ; WITHOUT THE SUBSCRIPT
663"RTN","C0XF2N",99,0)
664 W !,$O(@ZRDF@(""),-1)," LINES READ"
665"RTN","C0XF2N",100,0)
666 D INSRDF(ZRDF,FURL,FARY) ; IMPORT AND PROCESS THE RDF
667"RTN","C0XF2N",101,0)
668 Q
669"RTN","C0XF2N",102,0)
670 ;
671"RTN","C0XF2N",103,0)
672WGET(ZURL,FARY) ; GET FROM THE INTERNET AN RDF FILE AND INSERT IT
673"RTN","C0XF2N",104,0)
674 ;
675"RTN","C0XF2N",105,0)
676 I '$D(FARY) D ;
677"RTN","C0XF2N",106,0)
678 . D INITFARY("C0XFARY")
679"RTN","C0XF2N",107,0)
680 . S FARY="C0XFARY"
681"RTN","C0XF2N",108,0)
682 D USEFARY(FARY)
683"RTN","C0XF2N",109,0)
684 ;N ZLOC,ZTMP
685"RTN","C0XF2N",110,0)
686 K ZTMP
687"RTN","C0XF2N",111,0)
688 S ZLOC=$NA(^TMP("C0X","WGET",$J))
689"RTN","C0XF2N",112,0)
690 K @ZLOC
691"RTN","C0XF2N",113,0)
692 S C0XSTART=$$NOW^XLFDT
693"RTN","C0XF2N",114,0)
694 W !,"STARTED: ",C0XSTART
695"RTN","C0XF2N",115,0)
696 W !,"DOWNLOADING: ",ZURL
697"RTN","C0XF2N",116,0)
698 S OK=$$httpGET^%zewdGTM(ZURL,.ZTMP)
699"RTN","C0XF2N",117,0)
700 M @ZLOC=ZTMP
701"RTN","C0XF2N",118,0)
702 S C0XLINES=$O(@ZLOC@(""),-1)
703"RTN","C0XF2N",119,0)
704 W !,C0XLINES," LINES READ"
705"RTN","C0XF2N",120,0)
706 S C0XDLC=$$NOW^XLFDT ; DOWNLOAD COMPLETE
707"RTN","C0XF2N",121,0)
708 W !,"DOWNLOAD COMPLETE AT ",C0XDLC
709"RTN","C0XF2N",122,0)
710 S C0XDIFF=$$FMDIFF^XLFDT(C0XDLC,C0XSTART,2)
711"RTN","C0XF2N",123,0)
712 W !," ELAPSED TIME: ",C0XDIFF," SECONDS"
713"RTN","C0XF2N",124,0)
714 I C0XDIFF'=0 W !," APPROXIMATELY ",$P(C0XLINES/C0XDIFF,".")," LINES PER SEC"
715"RTN","C0XF2N",125,0)
716 D INSRDF(ZLOC,ZURL,FARY)
717"RTN","C0XF2N",126,0)
718 Q
719"RTN","C0XF2N",127,0)
720 ;
721"RTN","C0XF2N",128,0)
722INSRDF(ZRDF,ZNAME,FARY) ; INSERT AN RDF FILE INTO THE STORE AND PROCESS
723"RTN","C0XF2N",129,0)
724 ; ZRDF IS PASSED BY NAME
725"RTN","C0XF2N",130,0)
726 I '$D(FARY) D ;
727"RTN","C0XF2N",131,0)
728 . D INITFARY("C0XFARY")
729"RTN","C0XF2N",132,0)
730 . S FARY="C0XFARY"
731"RTN","C0XF2N",133,0)
732 D USEFARY(FARY)
733"RTN","C0XF2N",134,0)
734 N ZGRAPH,ZSUBJECT
735"RTN","C0XF2N",135,0)
736 S ZGRAPH="_:G"_$$LKY9 ; RANDOM GRAPH NAME
737"RTN","C0XF2N",136,0)
738 S ZSUBJECT=$$ANONS ; RANDOM ANOYMOUS SUBJECT
739"RTN","C0XF2N",137,0)
740 D ADD(ZGRAPH,ZSUBJECT,"fmts:url",ZNAME,FARY)
741"RTN","C0XF2N",138,0)
742 N ZTXTNM
743"RTN","C0XF2N",139,0)
744 S ZTXTNM="_TXT_INCOMING_RDF_FILE_"_ZNAME_"_"_$$LKY9 ; NAME FOR TEXT NODE
745"RTN","C0XF2N",140,0)
746 D ADD(ZGRAPH,ZSUBJECT,"fmts:rdfSource",ZTXTNM,FARY)
747"RTN","C0XF2N",141,0)
748 D UPDIE(.C0XFDA) ; TRY IT OUT
749"RTN","C0XF2N",142,0)
750 K C0XCNT ;RESET FOR NEXT TIME
751"RTN","C0XF2N",143,0)
752 D STORETXT(ZRDF,ZTXTNM,FARY)
753"RTN","C0XF2N",144,0)
754 W !,"ADDED: ",ZGRAPH," ",ZSUBJECT," fmts:rdfSource ",ZTXTNM
755"RTN","C0XF2N",145,0)
756 D PROCESS2(.G,ZRDF,ZNAME,ZGRAPH,FARY) ; PARSE AND INSERT THE RDF
757"RTN","C0XF2N",146,0)
758 Q
759"RTN","C0XF2N",147,0)
760 ;
761"RTN","C0XF2N",148,0)
762STORETXT(ZTXT,ZNAME,FARY) ; STORE TEXT IN THE TRIPLESTORE AT ZNAME
763"RTN","C0XF2N",149,0)
764 ;
765"RTN","C0XF2N",150,0)
766 I '$D(FARY) D ;
767"RTN","C0XF2N",151,0)
768 . D INITFARY("C0XFARY")
769"RTN","C0XF2N",152,0)
770 . S FARY="C0XFARY"
771"RTN","C0XF2N",153,0)
772 D USEFARY(FARY)
773"RTN","C0XF2N",154,0)
774 N ZIEN
775"RTN","C0XF2N",155,0)
776 S ZIEN=$$IENOF(ZNAME,FARY) ; GET THE IEN
777"RTN","C0XF2N",156,0)
778 D CLEAN^DILF
779"RTN","C0XF2N",157,0)
780 K ZERR
781"RTN","C0XF2N",158,0)
782 D WP^DIE(C0XSFN,ZIEN_",",1,,ZTXT,"ZERR")
783"RTN","C0XF2N",159,0)
784 I $D(ZERR) D ;
785"RTN","C0XF2N",160,0)
786 . ZWR ZERR
787"RTN","C0XF2N",161,0)
788 Q
789"RTN","C0XF2N",162,0)
790 ;
791"RTN","C0XF2N",163,0)
792GETTXT(ZRTN,ZNAME,FARY) ; RETURNS RDF SOURCE OR OTHER TEXT
793"RTN","C0XF2N",164,0)
794 ; ZRTN IS PASSED BY REFERENCE
795"RTN","C0XF2N",165,0)
796 I '$D(FARY) D ;
797"RTN","C0XF2N",166,0)
798 . D INITFARY("C0XFARY")
799"RTN","C0XF2N",167,0)
800 . S FARY="C0XFARY"
801"RTN","C0XF2N",168,0)
802 D USEFARY(FARY)
803"RTN","C0XF2N",169,0)
804 N ZIEN
805"RTN","C0XF2N",170,0)
806 S ZIEN=$$IENOF(ZNAME)
807"RTN","C0XF2N",171,0)
808 S OK=$$GET1^DIQ(C0XSFN,ZIEN_",",1,,"ZRTN")
809"RTN","C0XF2N",172,0)
810 Q
811"RTN","C0XF2N",173,0)
812 ;
813"RTN","C0XF2N",174,0)
814WHERETXT(ZNAME,FARY) ; EXTRINSIC WHICH RETURNS THE NAME OF THE GLOBAL
815"RTN","C0XF2N",175,0)
816 ; WHERE THE TEXT IS LOCATED. NAME IS THE NAME OF THE STRING
817"RTN","C0XF2N",176,0)
818 I '$D(FARY) D ;
819"RTN","C0XF2N",177,0)
820 . D INITFARY("C0XFARY")
821"RTN","C0XF2N",178,0)
822 . S FARY="C0XFARY"
823"RTN","C0XF2N",179,0)
824 D USEFARY(FARY)
825"RTN","C0XF2N",180,0)
826 N ZIEN
827"RTN","C0XF2N",181,0)
828 S ZIEN=$$IENOF(ZNAME)
829"RTN","C0XF2N",182,0)
830 Q $NA(@C0XSN@(ZIEN,1))
831"RTN","C0XF2N",183,0)
832 ;
833"RTN","C0XF2N",184,0)
834FILEREAD(ZINTMP,ZDIR,ZFNAME,ZLVL) ; READS A FILE INTO ZINTMP USING FTG^%ZISH
835"RTN","C0XF2N",185,0)
836 ; ZINTMP IS PASSED BY NAME AND INCLUDES THE NEW SUBSCRIPT
837"RTN","C0XF2N",186,0)
838 ; IE ^TMP("C0X","FILEIN",1)
839"RTN","C0XF2N",187,0)
840 ; ZLVL IN THIS CASE WOULD BE 3 INCREMENTING THE 1
841"RTN","C0XF2N",188,0)
842 ; EXTRINSIC WHICH RETURNS THE RESULT OF FTG^%ZISH
843"RTN","C0XF2N",189,0)
844 S OK=$$FTG^%ZISH(ZDIR,FNAME,ZINTMP,ZLVL)
845"RTN","C0XF2N",190,0)
846 Q OK
847"RTN","C0XF2N",191,0)
848 ;
849"RTN","C0XF2N",192,0)
850TESTPROC ; TEST PROCESS WITH EXISTING SMALL RDF FILE
851"RTN","C0XF2N",193,0)
852 S ZIN=$NA(^TMP("C0X",12226,"FILEIN"))
853"RTN","C0XF2N",194,0)
854 S ZGRAPH="/test/rdfFile"
855"RTN","C0XF2N",195,0)
856 S ZM="/test/rdfFile/meta"
857"RTN","C0XF2N",196,0)
858 D PROCESS(.G,ZIN,ZGRAPH,ZM)
859"RTN","C0XF2N",197,0)
860 Q
861"RTN","C0XF2N",198,0)
862 ;
863"RTN","C0XF2N",199,0)
864PROCESS(ZRTN,ZRDF,ZGRF,ZMETA,FARY) ; PROCESS AN INCOMING RDF FILE
865"RTN","C0XF2N",200,0)
866 ; ZRTN IS PASS BY REFERENCE AND RETURNS MESSAGES ABOUT THE PROCESSING
867"RTN","C0XF2N",201,0)
868 ; ZRDF IS PASSED BY NAME AND IS THE GLOBAL CONTAINING THE RDF FILE
869"RTN","C0XF2N",202,0)
870 ; ZGRF IS THE NAME OF THE GRAPH TO USE IN THE TRIPLE STORE FOR RESULTS
871"RTN","C0XF2N",203,0)
872 ; ZMETA IS OPTIONAL AND IS THE NAME OF THE GRAPH TO STORE METADATA
873"RTN","C0XF2N",204,0)
874 ;
875"RTN","C0XF2N",205,0)
876 I '$D(FARY) D ;
877"RTN","C0XF2N",206,0)
878 . D INITFARY("C0XFARY")
879"RTN","C0XF2N",207,0)
880 . S FARY="C0XFARY"
881"RTN","C0XF2N",208,0)
882 D USEFARY(FARY)
883"RTN","C0XF2N",209,0)
884 ; -- first parse the rdf file with the MXML parser
885"RTN","C0XF2N",210,0)
886 ;S C0XDOCID=$$PARSE^C0CNHIN(ZRDF,"C0XARRAY") ; PARSE WITH MXML
887"RTN","C0XF2N",211,0)
888 S C0XDOCID=$$EN^MXMLDOM(ZRDF,"W")
889"RTN","C0XF2N",212,0)
890 ; -- assign the MXLM dom global name to ZDOM
891"RTN","C0XF2N",213,0)
892 S ZDOM=$NA(^TMP("MXMLDOM",$J,C0XDOCID))
893"RTN","C0XF2N",214,0)
894 W !,$O(@ZDOM@(""),-1)," XML NODES PARSED"
895"RTN","C0XF2N",215,0)
896 ; -- populate the metagraph to point to the graph with status unfinished
897"RTN","C0XF2N",216,0)
898 S METAS=$$ANONS ; GET AN ANONOMOUS RANDOM SUBJECT
899"RTN","C0XF2N",217,0)
900 I '$D(ZMETA) S ZMETA="_:G"_$$LKY9 ; RANDOM GRAPH NAME FOR METAGRAPH
901"RTN","C0XF2N",218,0)
902 D ADD(ZMETA,METAS,"fmts:about",ZGRF,FARY) ; POINT THE META TO THE GRAPH
903"RTN","C0XF2N",219,0)
904 D ADD(ZMETA,METAS,"fmts:status","unfinished",FARY) ; mark as unfinished
905"RTN","C0XF2N",220,0)
906 ;S C0XDATE=$$FMDTOUTC^C0CUTIL($$NOW^XLFDT,"DT")
907"RTN","C0XF2N",221,0)
908 S C0XDATE=$$NOW^XLFDT
909"RTN","C0XF2N",222,0)
910 D ADD(ZMETA,METAS,"fmts:dateTime",C0XDATE,FARY)
911"RTN","C0XF2N",223,0)
912 D UPDIE(.C0XFDA) ; commit the metagraph changes to the triple store
913"RTN","C0XF2N",224,0)
914 ; --
915"RTN","C0XF2N",225,0)
916 ; -- pull out the vocabularies in the RDF statement. marked with xmlns:
917"RTN","C0XF2N",226,0)
918 ; -- put them in a local variable for quick reference
919"RTN","C0XF2N",227,0)
920 ; -- TODO: create a graph for vocabularies and validate incoming against it
921"RTN","C0XF2N",228,0)
922 ;
923"RTN","C0XF2N",229,0)
924 S C0XVOC=""
925"RTN","C0XF2N",230,0)
926 N ZI,ZJ,ZK S ZI=""
927"RTN","C0XF2N",231,0)
928 F S ZI=$O(@ZDOM@(1,"A",ZI)) Q:ZI="" D ; FOR EACH xmlns
929"RTN","C0XF2N",232,0)
930 . S ZVOC=$P(ZI,"xmlns:",2)
931"RTN","C0XF2N",233,0)
932 . I ZVOC'="" S C0XVOC(ZVOC)=$G(@ZDOM@(1,"A",ZI))
933"RTN","C0XF2N",234,0)
934 ;W !,"VOCABS:" ZWR C0XVOC
935"RTN","C0XF2N",235,0)
936 ;
937"RTN","C0XF2N",236,0)
938 ; -- look for children called rdf:Description. quit if none. not an rdf file
939"RTN","C0XF2N",237,0)
940 ;
941"RTN","C0XF2N",238,0)
942 S ZI=$O(@ZDOM@(1,"C",""))
943"RTN","C0XF2N",239,0)
944 I $G(@ZDOM@(1,"C",ZI))'="rdf:Description" D Q ; not an rdf file
945"RTN","C0XF2N",240,0)
946 . W !,"Error. Not an RDF file. Cannot process."
947"RTN","C0XF2N",241,0)
948 ;
949"RTN","C0XF2N",242,0)
950 ; -- now process the rdf description children
951"RTN","C0XF2N",243,0)
952 ;
953"RTN","C0XF2N",244,0)
954 S ZI=""
955"RTN","C0XF2N",245,0)
956 S (C0XSUB,C0XPRE,C0XOBJ)="" ; INITIALIZE subject, object and predicate
957"RTN","C0XF2N",246,0)
958 F S ZI=$O(@ZDOM@(1,"C",ZI)) Q:ZI="" D ;
959"RTN","C0XF2N",247,0)
960 . ; -- we are skipping any child that is not rdf:Description
961"RTN","C0XF2N",248,0)
962 . ; -- TODO: check to see if this is right in general
963"RTN","C0XF2N",249,0)
964 . ;
965"RTN","C0XF2N",250,0)
966 . IF $G(@ZDOM@(1,"C",ZI))'="rdf:Description" D Q ;
967"RTN","C0XF2N",251,0)
968 . . W !,"SKIPPING NODE: ",ZI
969"RTN","C0XF2N",252,0)
970 . ; -- now looking for the subject for the triples
971"RTN","C0XF2N",253,0)
972 . S ZX=$G(@ZDOM@(ZI,"A","rdf:about"))
973"RTN","C0XF2N",254,0)
974 . I ZX'="" D ; we have the subject
975"RTN","C0XF2N",255,0)
976 . . ;W " about: ",ZX
977"RTN","C0XF2N",256,0)
978 . . S C0XSUB=ZX
979"RTN","C0XF2N",257,0)
980 . E D ;
981"RTN","C0XF2N",258,0)
982 . . S ZX=$G(@ZDOM@(ZI,"A","rdf:nodeID")) ; node id is another style of subject
983"RTN","C0XF2N",259,0)
984 . . I ZX'="" D ;
985"RTN","C0XF2N",260,0)
986 . . . S C0XSUB=ZX
987"RTN","C0XF2N",261,0)
988 . I C0XSUB="" S C0XSUB=$$ANONS ; DEFAULT TO BLANK SUBJECT
989"RTN","C0XF2N",262,0)
990 . ;
991"RTN","C0XF2N",263,0)
992 . ; -- we now have the subject. the children of this node have the rest
993"RTN","C0XF2N",264,0)
994 . ;
995"RTN","C0XF2N",265,0)
996 . S ZJ="" ; for the children of the rdf:Description nodes
997"RTN","C0XF2N",266,0)
998 . F S ZJ=$O(@ZDOM@(ZI,"C",ZJ)) Q:ZJ="" D ; for each child
999"RTN","C0XF2N",267,0)
1000 . . S C0XPRE=@ZDOM@(ZJ) ; the predicate without a prefix
1001"RTN","C0XF2N",268,0)
1002 . . S ZX=$G(@ZDOM@(ZJ,"A","xmlns")) ; name space
1003"RTN","C0XF2N",269,0)
1004 . . I ZX'="" S C0XPRE=ZX_C0XPRE ; add the namespace prefix
1005"RTN","C0XF2N",270,0)
1006 . . I C0XPRE[":" D ; expand using vocabulary
1007"RTN","C0XF2N",271,0)
1008 . . . N ZB,ZA
1009"RTN","C0XF2N",272,0)
1010 . . . S ZB=$P(C0XPRE,":",1)
1011"RTN","C0XF2N",273,0)
1012 . . . S ZA=$P(C0XPRE,":",2)
1013"RTN","C0XF2N",274,0)
1014 . . . I $G(C0XVOC(ZB))'="" D ;
1015"RTN","C0XF2N",275,0)
1016 . . . . S C0XPRE=C0XVOC(ZB)_ZA ; expanded
1017"RTN","C0XF2N",276,0)
1018 . . S ZY=$G(@ZDOM@(ZJ,"A","rdf:resource")) ; potential object
1019"RTN","C0XF2N",277,0)
1020 . . I ZY'="" D Q ;
1021"RTN","C0XF2N",278,0)
1022 . . . S C0XOBJ=ZY ; object
1023"RTN","C0XF2N",279,0)
1024 . . . D ADD(ZGRF,C0XSUB,C0XPRE,C0XOBJ) ; finally. our first real triple
1025"RTN","C0XF2N",280,0)
1026 . . ; -- this is an else because of the quit above
1027"RTN","C0XF2N",281,0)
1028 . . S ZX=$G(@ZDOM@(ZJ,"A","rdf:nodeID")) ; fishing for nodeId object
1029"RTN","C0XF2N",282,0)
1030 . . I ZX'="" D Q ; got one
1031"RTN","C0XF2N",283,0)
1032 . . . S C0XOBJ=ZX ; we are using the incoming nodeIDs as object/subject
1033"RTN","C0XF2N",284,0)
1034 . . . ; without change... this could be foolish .. look at it again later
1035"RTN","C0XF2N",285,0)
1036 . . . D ADD(ZGRF,C0XSUB,C0XPRE,C0XOBJ) ; go for it and add a node
1037"RTN","C0XF2N",286,0)
1038 . . S C0XOBJ=$G(@ZDOM@(ZJ,"T",1)) ; hopefully an object is here
1039"RTN","C0XF2N",287,0)
1040 . . I C0XOBJ="" D Q ; not a happy situation
1041"RTN","C0XF2N",288,0)
1042 . . . W !,"ERROR, NO OBJECT FOUND FOR NODE: ",ZJ
1043"RTN","C0XF2N",289,0)
1044 . . D ADD(ZGRF,C0XSUB,C0XPRE,C0XOBJ) ; go for it and add a node
1045"RTN","C0XF2N",290,0)
1046 W !,"INSERTING ",C0XCNT," TRIPLES"
1047"RTN","C0XF2N",291,0)
1048 D UPDIE(.C0XFDA) ; commit the updates to the file
1049"RTN","C0XF2N",292,0)
1050 ; next, mark the graph as finished
1051"RTN","C0XF2N",293,0)
1052 S C0XEND=$$NOW^XLFDT
1053"RTN","C0XF2N",294,0)
1054 W !," ENDED AT: ",C0XEND
1055"RTN","C0XF2N",295,0)
1056 S C0XDIFF=$$FMDIFF^XLFDT(C0XEND,C0XSTART,2)
1057"RTN","C0XF2N",296,0)
1058 W !," ELAPSED TIME: ",C0XDIFF," SECONDS"
1059"RTN","C0XF2N",297,0)
1060 I C0XDIFF'=0 D ;
1061"RTN","C0XF2N",298,0)
1062 . W !," APPROXIMATELY ",$P(C0XCNT/C0XDIFF,".")," TRIPLES PER SECOND"
1063"RTN","C0XF2N",299,0)
1064 Q
1065"RTN","C0XF2N",300,0)
1066 ;
1067"RTN","C0XF2N",301,0)
1068PROCESS2(ZRTN,ZRDF,ZGRF,ZMETA,FARY) ; PROCESS AN INCOMING RDF FILE
1069"RTN","C0XF2N",302,0)
1070 ; ZRTN IS PASS BY REFERENCE AND RETURNS MESSAGES ABOUT THE PROCESSING
1071"RTN","C0XF2N",303,0)
1072 ; ZRDF IS PASSED BY NAME AND IS THE GLOBAL CONTAINING THE RDF FILE
1073"RTN","C0XF2N",304,0)
1074 ; ZGRF IS THE NAME OF THE GRAPH TO USE IN THE TRIPLE STORE FOR RESULTS
1075"RTN","C0XF2N",305,0)
1076 ; ZMETA IS OPTIONAL AND IS THE NAME OF THE GRAPH TO STORE METADATA
1077"RTN","C0XF2N",306,0)
1078 ;
1079"RTN","C0XF2N",307,0)
1080 I '$D(FARY) D ;
1081"RTN","C0XF2N",308,0)
1082 . D INITFARY("C0XFARY")
1083"RTN","C0XF2N",309,0)
1084 . S FARY="C0XFARY"
1085"RTN","C0XF2N",310,0)
1086 D USEFARY(FARY)
1087"RTN","C0XF2N",311,0)
1088 ;N BATCNT
1089"RTN","C0XF2N",312,0)
1090 ;N BATMAX
1091"RTN","C0XF2N",313,0)
1092 S BATCNT=0 ; BATCH COUNTER
1093"RTN","C0XF2N",314,0)
1094 S BATMAX=10000 ; TRY BATCHES OF THIS SIZE
1095"RTN","C0XF2N",315,0)
1096 ; -- first parse the rdf file with the MXML parser
1097"RTN","C0XF2N",316,0)
1098 ;S C0XDOCID=$$PARSE^C0CNHIN(ZRDF,"C0XARRAY") ; PARSE WITH MXML
1099"RTN","C0XF2N",317,0)
1100 S C0XDLC2=$$NOW^XLFDT ; START OF PARSE
1101"RTN","C0XF2N",318,0)
1102 S C0XDOCID=$$EN^MXMLDOM(ZRDF,"W")
1103"RTN","C0XF2N",319,0)
1104 ; -- assign the MXLM dom global name to ZDOM
1105"RTN","C0XF2N",320,0)
1106 S ZDOM=$NA(^TMP("MXMLDOM",$J,C0XDOCID))
1107"RTN","C0XF2N",321,0)
1108 S C0XNODE=$O(@ZDOM@(""),-1)
1109"RTN","C0XF2N",322,0)
1110 W !,C0XNODE," XML NODES PARSED"
1111"RTN","C0XF2N",323,0)
1112 S C0XPRS=$$NOW^XLFDT ; PARSE COMPLETE
1113"RTN","C0XF2N",324,0)
1114 W !,"PARSE COMPLETE AT ",C0XPRS
1115"RTN","C0XF2N",325,0)
1116 S C0XDIFF=$$FMDIFF^XLFDT(C0XPRS,C0XDLC2,2)
1117"RTN","C0XF2N",326,0)
1118 W !," ELAPSED TIME: ",C0XDIFF," SECONDS"
1119"RTN","C0XF2N",327,0)
1120 I C0XDIFF'=0 D ;
1121"RTN","C0XF2N",328,0)
1122 . W !," APPROXIMATELY ",$P(C0XNODE/C0XDIFF,".")," NODES PER SECOND"
1123"RTN","C0XF2N",329,0)
1124 ; -- populate the metagraph to point to the graph with status unfinished
1125"RTN","C0XF2N",330,0)
1126 S METAS=$$ANONS ; GET AN ANONOMOUS RANDOM SUBJECT
1127"RTN","C0XF2N",331,0)
1128 I '$D(ZMETA) S ZMETA="_:G"_$$LKY9 ; RANDOM GRAPH NAME FOR METAGRAPH
1129"RTN","C0XF2N",332,0)
1130 D ADD(ZMETA,METAS,"fmts:about",ZGRF,FARY) ; POINT THE META TO THE GRAPH
1131"RTN","C0XF2N",333,0)
1132 D ADD(ZMETA,METAS,"fmts:status","unfinished",FARY) ; mark as unfinished
1133"RTN","C0XF2N",334,0)
1134 ;S C0XDATE=$$FMDTOUTC^C0CUTIL($$NOW^XLFDT,"DT")
1135"RTN","C0XF2N",335,0)
1136 S C0XDATE=$$NOW^XLFDT
1137"RTN","C0XF2N",336,0)
1138 D ADD(ZMETA,METAS,"fmts:dateTime",C0XDATE,FARY)
1139"RTN","C0XF2N",337,0)
1140 D UPDIE(.C0XFDA) ; commit the metagraph changes to the triple store
1141"RTN","C0XF2N",338,0)
1142 ; --
1143"RTN","C0XF2N",339,0)
1144 ; -- pull out the vocabularies in the RDF statement. marked with xmlns:
1145"RTN","C0XF2N",340,0)
1146 ; -- put them in a local variable for quick reference
1147"RTN","C0XF2N",341,0)
1148 ; -- TODO: create a graph for vocabularies and validate incoming against it
1149"RTN","C0XF2N",342,0)
1150 ;
1151"RTN","C0XF2N",343,0)
1152 S C0XVOC=""
1153"RTN","C0XF2N",344,0)
1154 N ZI,ZJ,ZK S ZI=""
1155"RTN","C0XF2N",345,0)
1156 F S ZI=$O(@ZDOM@(1,"A",ZI)) Q:ZI="" D ; FOR EACH xmlns
1157"RTN","C0XF2N",346,0)
1158 . S ZVOC=$P(ZI,"xmlns:",2)
1159"RTN","C0XF2N",347,0)
1160 . I ZVOC'="" S C0XVOC(ZVOC)=$G(@ZDOM@(1,"A",ZI))
1161"RTN","C0XF2N",348,0)
1162 ;W !,"VOCABS:" ZWR C0XVOC
1163"RTN","C0XF2N",349,0)
1164 ;
1165"RTN","C0XF2N",350,0)
1166 ; -- look for children called rdf:Description. quit if none. not an rdf file
1167"RTN","C0XF2N",351,0)
1168 ;
1169"RTN","C0XF2N",352,0)
1170 S ZI=$O(@ZDOM@(1,"C",""))
1171"RTN","C0XF2N",353,0)
1172 I $G(@ZDOM@(1,"C",ZI))'="rdf:Description" D Q ; not an rdf file
1173"RTN","C0XF2N",354,0)
1174 . W !,"Error. Not an RDF file. Cannot process."
1175"RTN","C0XF2N",355,0)
1176 ;
1177"RTN","C0XF2N",356,0)
1178 ; -- now process the rdf description children
1179"RTN","C0XF2N",357,0)
1180 ;
1181"RTN","C0XF2N",358,0)
1182 S ZI=""
1183"RTN","C0XF2N",359,0)
1184 S (C0XSUB,C0XPRE,C0XOBJ)="" ; INITIALIZE subject, object and predicate
1185"RTN","C0XF2N",360,0)
1186 F S ZI=$O(@ZDOM@(1,"C",ZI)) Q:ZI="" D ;
1187"RTN","C0XF2N",361,0)
1188 . ; -- we are skipping any child that is not rdf:Description
1189"RTN","C0XF2N",362,0)
1190 . ; -- TODO: check to see if this is right in general
1191"RTN","C0XF2N",363,0)
1192 . ;
1193"RTN","C0XF2N",364,0)
1194 . IF $G(@ZDOM@(1,"C",ZI))'="rdf:Description" D Q ;
1195"RTN","C0XF2N",365,0)
1196 . . W !,"SKIPPING NODE: ",ZI
1197"RTN","C0XF2N",366,0)
1198 . ; -- now looking for the subject for the triples
1199"RTN","C0XF2N",367,0)
1200 . S ZX=$G(@ZDOM@(ZI,"A","rdf:about"))
1201"RTN","C0XF2N",368,0)
1202 . I ZX'="" D ; we have the subject
1203"RTN","C0XF2N",369,0)
1204 . . ;W " about: ",ZX
1205"RTN","C0XF2N",370,0)
1206 . . S C0XSUB=ZX
1207"RTN","C0XF2N",371,0)
1208 . E D ;
1209"RTN","C0XF2N",372,0)
1210 . . S ZX=$G(@ZDOM@(ZI,"A","rdf:nodeID")) ; node id is another style of subject
1211"RTN","C0XF2N",373,0)
1212 . . I ZX'="" D ;
1213"RTN","C0XF2N",374,0)
1214 . . . S C0XSUB=ZX
1215"RTN","C0XF2N",375,0)
1216 . I C0XSUB="" S C0XSUB=$$ANONS ; DEFAULT TO BLANK SUBJECT
1217"RTN","C0XF2N",376,0)
1218 . ;
1219"RTN","C0XF2N",377,0)
1220 . ; -- we now have the subject. the children of this node have the rest
1221"RTN","C0XF2N",378,0)
1222 . ;
1223"RTN","C0XF2N",379,0)
1224 . S ZJ="" ; for the children of the rdf:Description nodes
1225"RTN","C0XF2N",380,0)
1226 . F S ZJ=$O(@ZDOM@(ZI,"C",ZJ)) Q:ZJ="" D ; for each child
1227"RTN","C0XF2N",381,0)
1228 . . S C0XPRE=@ZDOM@(ZJ) ; the predicate without a prefix
1229"RTN","C0XF2N",382,0)
1230 . . S ZX=$G(@ZDOM@(ZJ,"A","xmlns")) ; name space
1231"RTN","C0XF2N",383,0)
1232 . . I ZX'="" S C0XPRE=ZX_C0XPRE ; add the namespace prefix
1233"RTN","C0XF2N",384,0)
1234 . . I C0XPRE[":" D ; expand using vocabulary
1235"RTN","C0XF2N",385,0)
1236 . . . N ZB,ZA
1237"RTN","C0XF2N",386,0)
1238 . . . S ZB=$P(C0XPRE,":",1)
1239"RTN","C0XF2N",387,0)
1240 . . . S ZA=$P(C0XPRE,":",2)
1241"RTN","C0XF2N",388,0)
1242 . . . I $G(C0XVOC(ZB))'="" D ;
1243"RTN","C0XF2N",389,0)
1244 . . . . S C0XPRE=C0XVOC(ZB)_ZA ; expanded
1245"RTN","C0XF2N",390,0)
1246 . . S ZY=$G(@ZDOM@(ZJ,"A","rdf:resource")) ; potential object
1247"RTN","C0XF2N",391,0)
1248 . . I ZY'="" D Q ;
1249"RTN","C0XF2N",392,0)
1250 . . . S C0XOBJ=ZY ; object
1251"RTN","C0XF2N",393,0)
1252 . . . D ADD2(ZGRF,C0XSUB,C0XPRE,C0XOBJ) ; finally. our first real triple
1253"RTN","C0XF2N",394,0)
1254 . . ; -- this is an else because of the quit above
1255"RTN","C0XF2N",395,0)
1256 . . S ZX=$G(@ZDOM@(ZJ,"A","rdf:nodeID")) ; fishing for nodeId object
1257"RTN","C0XF2N",396,0)
1258 . . I ZX'="" D Q ; got one
1259"RTN","C0XF2N",397,0)
1260 . . . S C0XOBJ=ZX ; we are using the incoming nodeIDs as object/subject
1261"RTN","C0XF2N",398,0)
1262 . . . ; without change... this could be foolish .. look at it again later
1263"RTN","C0XF2N",399,0)
1264 . . . D ADD2(ZGRF,C0XSUB,C0XPRE,C0XOBJ) ; go for it and add a node
1265"RTN","C0XF2N",400,0)
1266 . . S C0XOBJ=$G(@ZDOM@(ZJ,"T",1)) ; hopefully an object is here
1267"RTN","C0XF2N",401,0)
1268 . . I C0XOBJ="" D Q ; not a happy situation
1269"RTN","C0XF2N",402,0)
1270 . . . W !,"ERROR, NO OBJECT FOUND FOR NODE: ",ZJ
1271"RTN","C0XF2N",403,0)
1272 . . D ADD2(ZGRF,C0XSUB,C0XPRE,C0XOBJ) ; go for it and add a node
1273"RTN","C0XF2N",404,0)
1274 S C0XTRP=$$NOW^XLFDT ; PARSE COMPLETE
1275"RTN","C0XF2N",405,0)
1276 W !,"TRIPLES COMPLETE AT ",C0XTRP
1277"RTN","C0XF2N",406,0)
1278 S C0XDIFF=$$FMDIFF^XLFDT(C0XTRP,C0XPRS,2)
1279"RTN","C0XF2N",407,0)
1280 W !," ELAPSED TIME: ",C0XDIFF," SECONDS"
1281"RTN","C0XF2N",408,0)
1282 I C0XDIFF'=0 D ;
1283"RTN","C0XF2N",409,0)
1284 . W !," APPROXIMATELY ",$P(C0XCNT/C0XDIFF,".")," TRIPLES PER SECOND"
1285"RTN","C0XF2N",410,0)
1286 W !,"INSERTING ",C0XCNT," TRIPLES"
1287"RTN","C0XF2N",411,0)
1288 I $D(C0XFDA) D ;
1289"RTN","C0XF2N",412,0)
1290 . I $G(BLKLOAD) D ;
1291"RTN","C0XF2N",413,0)
1292 . . D BULKLOAD(.C0XFDA)
1293"RTN","C0XF2N",414,0)
1294 . E D ;
1295"RTN","C0XF2N",415,0)
1296 . . D UPDIE(.C0XFDA) ; commit the updates to the file
1297"RTN","C0XF2N",416,0)
1298 ; next, mark the graph as finished
1299"RTN","C0XF2N",417,0)
1300 S C0XINS=$$NOW^XLFDT ; PARSE COMPLETE
1301"RTN","C0XF2N",418,0)
1302 W !,"INSERTION COMPLETE AT ",C0XPRS
1303"RTN","C0XF2N",419,0)
1304 S C0XDIFF=$$FMDIFF^XLFDT(C0XINS,C0XTRP,2)
1305"RTN","C0XF2N",420,0)
1306 W !," ELAPSED TIME: ",C0XDIFF," SECONDS"
1307"RTN","C0XF2N",421,0)
1308 I C0XDIFF'=0 W !," APPROXIMATELY ",$P(C0XCNT/C0XDIFF,".")," NODES PER SECOND"
1309"RTN","C0XF2N",422,0)
1310 S C0XEND=$$NOW^XLFDT
1311"RTN","C0XF2N",423,0)
1312 W !," ENDED AT: ",C0XEND
1313"RTN","C0XF2N",424,0)
1314 S C0XDIFF=$$FMDIFF^XLFDT(C0XEND,C0XSTART,2)
1315"RTN","C0XF2N",425,0)
1316 W !," ELAPSED TIME: ",C0XDIFF," SECONDS"
1317"RTN","C0XF2N",426,0)
1318 I C0XDIFF'=0 W !," APPROXIMATELY ",$P(C0XCNT/C0XDIFF,".")," TRIPLES PER SECOND"
1319"RTN","C0XF2N",427,0)
1320 Q
1321"RTN","C0XF2N",428,0)
1322 ;
1323"RTN","C0XF2N",429,0)
1324SHOW(ZN) ;
1325"RTN","C0XF2N",430,0)
1326 ZWR ^TMP("MXMLDOM",$J,1,ZN,*)
1327"RTN","C0XF2N",431,0)
1328 Q
1329"RTN","C0XF2N",432,0)
1330 ;
1331"RTN","C0XF2N",433,0)
1332ANONS() ; RETURNS AN ANONOMOUS SUBJECT
1333"RTN","C0XF2N",434,0)
1334 Q "_S:"_$$LKY9
1335"RTN","C0XF2N",435,0)
1336 ;
1337"RTN","C0XF2N",436,0)
1338NEWG(NGRAPH,NMETA) ; CREATES A NEW META GRAPH, MARKS IT AS UNFINISHED
1339"RTN","C0XF2N",437,0)
1340 ; THEN CREATES A NEW GRAPH AND POINTS THE METAGRAPH TO IT
1341"RTN","C0XF2N",438,0)
1342 ; NGRAPH AND NMETA ARE PASSED BY REFERENCE AND ARE THE RETURN
1343"RTN","C0XF2N",439,0)
1344 S NGRAPH="G"_$$LKY9
1345"RTN","C0XF2N",440,0)
1346 S NMETA=NGRAPH_"A"
1347"RTN","C0XF2N",441,0)
1348 Q
1349"RTN","C0XF2N",442,0)
1350 ;
1351"RTN","C0XF2N",443,0)
1352ADD(ZG,ZS,ZP,ZO,FARY) ; ADD A TRIPLE TO THE TRIPLESTORE. ALL VALUES ARE TEXT
1353"RTN","C0XF2N",444,0)
1354 ; THE FDA IS SET UP BUT THE FILES ARE NOT UPDATED. CALL UPDIE TO COMPLETE
1355"RTN","C0XF2N",445,0)
1356 I '$D(FARY) D ;
1357"RTN","C0XF2N",446,0)
1358 . D INITFARY("C0XFARY")
1359"RTN","C0XF2N",447,0)
1360 . S FARY="C0XFARY"
1361"RTN","C0XF2N",448,0)
1362 D USEFARY(FARY)
1363"RTN","C0XF2N",449,0)
1364 I '$D(C0XCNT) S C0XCNT=0
1365"RTN","C0XF2N",450,0)
1366 N ZNODE
1367"RTN","C0XF2N",451,0)
1368 S ZNODE="N"_$$LKY17
1369"RTN","C0XF2N",452,0)
1370 N ZNARY ; GET READY TO CALL IENOFA
1371"RTN","C0XF2N",453,0)
1372 S ZNARY("ZG",ZG)=""
1373"RTN","C0XF2N",454,0)
1374 S ZNARY("ZS",ZS)=""
1375"RTN","C0XF2N",455,0)
1376 S ZNARY("ZP",ZP)=""
1377"RTN","C0XF2N",456,0)
1378 S ZNARY("ZO",ZO)=""
1379"RTN","C0XF2N",457,0)
1380 D IENOFA(.ZIENS,.ZNARY,FARY) ; RESOLVE/ADD STRINGS
1381"RTN","C0XF2N",458,0)
1382 ;S ZGIEN=$$IENOF(ZG) ; LAYGO TO GET IEN
1383"RTN","C0XF2N",459,0)
1384 ;S ZSIEN=$$IENOF(ZS)
1385"RTN","C0XF2N",460,0)
1386 ;S ZPIEN=$$IENOF(ZP)
1387"RTN","C0XF2N",461,0)
1388 ;S ZOIEN=$$IENOF(ZO)
1389"RTN","C0XF2N",462,0)
1390 ;I $D(C0XFDA) D UPDIE ; ADD THE STRINGS IF NEEDED
1391"RTN","C0XF2N",463,0)
1392 S C0XCNT=C0XCNT+1
1393"RTN","C0XF2N",464,0)
1394 S C0XFDA(C0XTFN,"?+"_C0XCNT_",",.01)=ZNODE
1395"RTN","C0XF2N",465,0)
1396 S C0XFDA(C0XTFN,"?+"_C0XCNT_",",.02)=$O(ZIENS("IEN","ZG",""))
1397"RTN","C0XF2N",466,0)
1398 S C0XFDA(C0XTFN,"?+"_C0XCNT_",",.03)=$O(ZIENS("IEN","ZS",""))
1399"RTN","C0XF2N",467,0)
1400 S C0XFDA(C0XTFN,"?+"_C0XCNT_",",.04)=$O(ZIENS("IEN","ZP",""))
1401"RTN","C0XF2N",468,0)
1402 S C0XFDA(C0XTFN,"?+"_C0XCNT_",",.05)=$O(ZIENS("IEN","ZO",""))
1403"RTN","C0XF2N",469,0)
1404 ; REMEMBER TO CALL UPDIE WHEN YOU'RE DONE
1405"RTN","C0XF2N",470,0)
1406 Q
1407"RTN","C0XF2N",471,0)
1408 ;
1409"RTN","C0XF2N",472,0)
1410ADD2(ZG,ZS,ZP,ZO,FARY) ; ADD A TRIPLE TO THE TRIPLESTORE. ALL VALUES ARE TEXT
1411"RTN","C0XF2N",473,0)
1412 ; THE FDA IS SET UP BUT THE FILES ARE NOT UPDATED. CALL UPDIE TO COMPLETE
1413"RTN","C0XF2N",474,0)
1414 I '$D(FARY) D ;
1415"RTN","C0XF2N",475,0)
1416 . D INITFARY("C0XFARY")
1417"RTN","C0XF2N",476,0)
1418 . S FARY="C0XFARY"
1419"RTN","C0XF2N",477,0)
1420 D USEFARY(FARY)
1421"RTN","C0XF2N",478,0)
1422 I '$D(C0XCNT) S C0XCNT=0
1423"RTN","C0XF2N",479,0)
1424 N ZNODE
1425"RTN","C0XF2N",480,0)
1426 S ZNODE="N"_$$LKY17
1427"RTN","C0XF2N",481,0)
1428 N ZNARY ; GET READY TO CALL IENOFA
1429"RTN","C0XF2N",482,0)
1430 S ZNARY("ZG",ZG)=""
1431"RTN","C0XF2N",483,0)
1432 S ZNARY("ZS",ZS)=""
1433"RTN","C0XF2N",484,0)
1434 S ZNARY("ZP",ZP)=""
1435"RTN","C0XF2N",485,0)
1436 S ZNARY("ZO",ZO)=""
1437"RTN","C0XF2N",486,0)
1438 D IENOFA(.ZIENS,.ZNARY,FARY) ; RESOLVE/ADD STRINGS
1439"RTN","C0XF2N",487,0)
1440 ;S ZGIEN=$$IENOF(ZG) ; LAYGO TO GET IEN
1441"RTN","C0XF2N",488,0)
1442 ;S ZSIEN=$$IENOF(ZS)
1443"RTN","C0XF2N",489,0)
1444 ;S ZPIEN=$$IENOF(ZP)
1445"RTN","C0XF2N",490,0)
1446 ;S ZOIEN=$$IENOF(ZO)
1447"RTN","C0XF2N",491,0)
1448 ;I $D(C0XFDA) D UPDIE ; ADD THE STRINGS IF NEEDED
1449"RTN","C0XF2N",492,0)
1450 S BATCNT=BATCNT+1
1451"RTN","C0XF2N",493,0)
1452 S C0XCNT=C0XCNT+1
1453"RTN","C0XF2N",494,0)
1454 I $G(BLKLOAD)=1 D ; we are using bulk load
1455"RTN","C0XF2N",495,0)
1456 . S C0XFDA(C0XTFN,BATCNT,.01)=ZNODE
1457"RTN","C0XF2N",496,0)
1458 . S C0XFDA(C0XTFN,BATCNT,.02)=$O(ZIENS("IEN","ZG",""))
1459"RTN","C0XF2N",497,0)
1460 . S C0XFDA(C0XTFN,BATCNT,.03)=$O(ZIENS("IEN","ZS",""))
1461"RTN","C0XF2N",498,0)
1462 . S C0XFDA(C0XTFN,BATCNT,.04)=$O(ZIENS("IEN","ZP",""))
1463"RTN","C0XF2N",499,0)
1464 . S C0XFDA(C0XTFN,BATCNT,.05)=$O(ZIENS("IEN","ZO",""))
1465"RTN","C0XF2N",500,0)
1466 E D ;
1467"RTN","C0XF2N",501,0)
1468 . S C0XFDA(C0XTFN,"?+"_BATCNT_",",.01)=ZNODE
1469"RTN","C0XF2N",502,0)
1470 . S C0XFDA(C0XTFN,"?+"_BATCNT_",",.02)=$O(ZIENS("IEN","ZG",""))
1471"RTN","C0XF2N",503,0)
1472 . S C0XFDA(C0XTFN,"?+"_BATCNT_",",.03)=$O(ZIENS("IEN","ZS",""))
1473"RTN","C0XF2N",504,0)
1474 . S C0XFDA(C0XTFN,"?+"_BATCNT_",",.04)=$O(ZIENS("IEN","ZP",""))
1475"RTN","C0XF2N",505,0)
1476 . S C0XFDA(C0XTFN,"?+"_BATCNT_",",.05)=$O(ZIENS("IEN","ZO",""))
1477"RTN","C0XF2N",506,0)
1478 I BATCNT=BATMAX D ; BATCH IS DONE
1479"RTN","C0XF2N",507,0)
1480 . I $G(BLKLOAD) D ; bulk load
1481"RTN","C0XF2N",508,0)
1482 . . D BULKLOAD(.C0XFDA) ; bulk load the batch
1483"RTN","C0XF2N",509,0)
1484 . E D ; no bulk load
1485"RTN","C0XF2N",510,0)
1486 . . D UPDIE(.C0XFDA)
1487"RTN","C0XF2N",511,0)
1488 . K C0XFDA
1489"RTN","C0XF2N",512,0)
1490 . S BATCNT=0 ; RESET COUNTER
1491"RTN","C0XF2N",513,0)
1492 ; REMEMBER TO CALL UPDIE WHEN YOU'RE DONE
1493"RTN","C0XF2N",514,0)
1494 Q
1495"RTN","C0XF2N",515,0)
1496 ;
1497"RTN","C0XF2N",516,0)
1498LKY9() ;EXTRINIC THAT RETURNS A RANDOM 9 DIGIT NUMBER. USED FOR GENERATING
1499"RTN","C0XF2N",517,0)
1500 ; UNIQUE NODE AND GRAPH NAMES
1501"RTN","C0XF2N",518,0)
1502 N ZN,ZI
1503"RTN","C0XF2N",519,0)
1504 S ZN=""
1505"RTN","C0XF2N",520,0)
1506 F ZI=1:1:9 D ;
1507"RTN","C0XF2N",521,0)
1508 . S ZN=ZN_$R(10)
1509"RTN","C0XF2N",522,0)
1510 Q ZN
1511"RTN","C0XF2N",523,0)
1512 ;
1513"RTN","C0XF2N",524,0)
1514LKY17() ;EXTRINIC THAT RETURNS A RANDOM 9 DIGIT NUMBER. USED FOR GENERATING
1515"RTN","C0XF2N",525,0)
1516 ; UNIQUE NODE AND GRAPH NAMES
1517"RTN","C0XF2N",526,0)
1518 N ZN,ZI
1519"RTN","C0XF2N",527,0)
1520 S ZN=""
1521"RTN","C0XF2N",528,0)
1522 F ZI=1:1:17 D ;
1523"RTN","C0XF2N",529,0)
1524 . S ZN=ZN_$R(10)
1525"RTN","C0XF2N",530,0)
1526 Q ZN
1527"RTN","C0XF2N",531,0)
1528 ;
1529"RTN","C0XF2N",532,0)
1530IENOF(ZSTRING,FARY) ; EXTRINSIC WHICH RETURNS THE IEN OF ZS IN THE STRINGS FILE
1531"RTN","C0XF2N",533,0)
1532 I '$D(FARY) D ;
1533"RTN","C0XF2N",534,0)
1534 . D INITFARY("C0XFARY")
1535"RTN","C0XF2N",535,0)
1536 . S FARY="C0XFARY"
1537"RTN","C0XF2N",536,0)
1538 N ZIEN
1539"RTN","C0XF2N",537,0)
1540 S ZIEN=$O(@C0XSN@("B",ZSTRING,""))
1541"RTN","C0XF2N",538,0)
1542 I ZIEN="" D ;
1543"RTN","C0XF2N",539,0)
1544 . S C0XFDA2(C0XSFN,"+1,",.01)=ZSTRING
1545"RTN","C0XF2N",540,0)
1546 . D UPDIE(.C0XFDA2)
1547"RTN","C0XF2N",541,0)
1548 . S ZIEN=$O(@C0XSN@("B",ZSTRING,""))
1549"RTN","C0XF2N",542,0)
1550 . K C0XFDA2
1551"RTN","C0XF2N",543,0)
1552 Q ZIEN
1553"RTN","C0XF2N",544,0)
1554 ;
1555"RTN","C0XF2N",545,0)
1556IENOFA(ZOUTARY,ZINARY,FARY) ; RESOLVE STRINGS TO IEN IN STRINGS FILE
1557"RTN","C0XF2N",546,0)
1558 ; OR ADD THEM IF
1559"RTN","C0XF2N",547,0)
1560 ; MISSING. ZINARY AND ZOUTARY ARE PASSED BY REFERENCE
1561"RTN","C0XF2N",548,0)
1562 ; ZINARY LOOKS LIKE ZINARY("VAR","VAL")=""
1563"RTN","C0XF2N",549,0)
1564 ; RETURNS IN ZOUTARY OF THE FORM ZOUTARY("IEN","VAR",IEN)=""
1565"RTN","C0XF2N",550,0)
1566 I '$D(FARY) D ;
1567"RTN","C0XF2N",551,0)
1568 . D INITFARY("C0XFARY")
1569"RTN","C0XF2N",552,0)
1570 . S FARY="C0XFARY"
1571"RTN","C0XF2N",553,0)
1572 K ZOUTARY ; START WITH CLEAN RESULTS
1573"RTN","C0XF2N",554,0)
1574 K C0XFDA2 ; USE A SEPARATE FDA FOR THIS
1575"RTN","C0XF2N",555,0)
1576 N ZI S ZI=""
1577"RTN","C0XF2N",556,0)
1578 N ZV,ZIEN
1579"RTN","C0XF2N",557,0)
1580 N ZCNT S ZCNT=0
1581"RTN","C0XF2N",558,0)
1582 F S ZI=$O(ZINARY(ZI)) Q:ZI="" D ; LOOK FOR MISSING STRINGS
1583"RTN","C0XF2N",559,0)
1584 . S ZV=$O(ZINARY(ZI,""))
1585"RTN","C0XF2N",560,0)
1586 . I $O(@C0XSN@("B",ZV,""))="" D ;
1587"RTN","C0XF2N",561,0)
1588 . . S ZCNT=ZCNT+1
1589"RTN","C0XF2N",562,0)
1590 . . S C0XFDA2(C0XSFN,"+"_ZCNT_",",.01)=ZV
1591"RTN","C0XF2N",563,0)
1592 I $D(C0XFDA2) D ;
1593"RTN","C0XF2N",564,0)
1594 . D UPDIE(.C0XFDA2) ; ADD MISSING STRINGS
1595"RTN","C0XF2N",565,0)
1596 . K C0XFDA2 ; CLEAN UP
1597"RTN","C0XF2N",566,0)
1598 F S ZI=$O(ZINARY(ZI)) Q:ZI="" D ; NOT GET ALL IENS
1599"RTN","C0XF2N",567,0)
1600 . S ZV=$O(ZINARY(ZI,""))
1601"RTN","C0XF2N",568,0)
1602 . S ZIEN=$O(@C0XSN@("B",ZV,"")) ; THEY SHOULD BE THERE NOW
1603"RTN","C0XF2N",569,0)
1604 . I ZIEN="" D ;
1605"RTN","C0XF2N",570,0)
1606 . . W !,"ERROR ADDING STRING: ",ZV
1607"RTN","C0XF2N",571,0)
1608 . . B
1609"RTN","C0XF2N",572,0)
1610 . S ZOUTARY("IEN",ZI,ZIEN)=""
1611"RTN","C0XF2N",573,0)
1612 Q
1613"RTN","C0XF2N",574,0)
1614 ;
1615"RTN","C0XF2N",575,0)
1616BULKLOAD(ZBFDA) ; BULK LOADER FOR LOADING TRIPLES INTO FILE 172.101
1617"RTN","C0XF2N",576,0)
1618 ; USING GLOBAL SETS INSTEAD OF UPDATE^DIE
1619"RTN","C0XF2N",577,0)
1620 ; QUITS IF FILE IS NOT 172.101
1621"RTN","C0XF2N",578,0)
1622 ; EXPECTS AN FDA WITHOUT STRINGS FOR THE IENS, STARTING AT 1
1623"RTN","C0XF2N",579,0)
1624 ; QUITS IF FIRST ENTRY IS NOT IENS 1
1625"RTN","C0XF2N",580,0)
1626 ; ASSUMES THAT THE LAST IENS IS THE COUNT OF ENTRIES
1627"RTN","C0XF2N",581,0)
1628 ; ZBFDA IS PASSED BY REFERENCE
1629"RTN","C0XF2N",582,0)
1630 ;
1631"RTN","C0XF2N",583,0)
1632 ; -- reserves a block of iens from file 172.101 by locking the zero node
1633"RTN","C0XF2N",584,0)
1634 ; -- ^C0X(101,0) and adding the count of entries to piece 2 and 3
1635"RTN","C0XF2N",585,0)
1636 ; -- then unlocking to minimize the duration of the lock
1637"RTN","C0XF2N",586,0)
1638 ;
1639"RTN","C0XF2N",587,0)
1640 W !,"USING BULKLOAD"
1641"RTN","C0XF2N",588,0)
1642 I '$D(ZBFDA) Q ; EMPTY FDA
1643"RTN","C0XF2N",589,0)
1644 I $O(ZBFDA(""))'=172.101 Q ; WRONG FILE
1645"RTN","C0XF2N",590,0)
1646 N ZCNT,ZP3,ZP4
1647"RTN","C0XF2N",591,0)
1648 ; -- find the number of nodes to insert
1649"RTN","C0XF2N",592,0)
1650 S ZCNT=$O(ZBFDA(172.101,""),-1)
1651"RTN","C0XF2N",593,0)
1652 I ZCNT="" D Q ;
1653"RTN","C0XF2N",594,0)
1654 . W !,"ERROR IN BULK LOAD - INVALID NODE COUNT"
1655"RTN","C0XF2N",595,0)
1656 . B
1657"RTN","C0XF2N",596,0)
1658 ; -- lock the zero node and reserve a block of iens to insert
1659"RTN","C0XF2N",597,0)
1660 W !,"LOCKING ZERO NODE"
1661"RTN","C0XF2N",598,0)
1662 LOCK +^C0X(101,0)
1663"RTN","C0XF2N",599,0)
1664 S ZP3=$P(^C0X(101,0),U,3)
1665"RTN","C0XF2N",600,0)
1666 S ZP4=$P(^C0X(101,0),U,4)
1667"RTN","C0XF2N",601,0)
1668 S $P(^C0X(101,0),U,3)=ZP3+ZCNT+1
1669"RTN","C0XF2N",602,0)
1670 S $P(^C0X(101,0),U,4)=ZP4+ZCNT+1
1671"RTN","C0XF2N",603,0)
1672 LOCK -^C0X(101,0)
1673"RTN","C0XF2N",604,0)
1674 N ZI,ZN,ZG,ZS,ZP,ZO,ZIEN,ZBASE
1675"RTN","C0XF2N",605,0)
1676 S ZBASE=ZP3 ; the last ien in the file
1677"RTN","C0XF2N",606,0)
1678 W !,"ZERO NODE UNLOCKED, IENS RESERVED=",ZCNT
1679"RTN","C0XF2N",607,0)
1680 W !,$$NOW^XLFDT
1681"RTN","C0XF2N",608,0)
1682 S ZI=""
1683"RTN","C0XF2N",609,0)
1684 F S ZI=$O(ZBFDA(172.101,ZI)) Q:ZI="" D ;
1685"RTN","C0XF2N",610,0)
1686 . S ZN=$G(ZBFDA(172.101,ZI,.01)) ; node name
1687"RTN","C0XF2N",611,0)
1688 . I ZN="" D BLKERR Q ;
1689"RTN","C0XF2N",612,0)
1690 . S ZG=$G(ZBFDA(172.101,ZI,.02)) ; graph pointer
1691"RTN","C0XF2N",613,0)
1692 . I ZG="" D BLKERR Q ;
1693"RTN","C0XF2N",614,0)
1694 . S ZS=$G(ZBFDA(172.101,ZI,.03)) ; subject pointer
1695"RTN","C0XF2N",615,0)
1696 . I ZS="" D BLKERR Q ;
1697"RTN","C0XF2N",616,0)
1698 . S ZP=$G(ZBFDA(172.101,ZI,.04)) ; predicate pointer
1699"RTN","C0XF2N",617,0)
1700 . I ZP="" D BLKERR Q ;
1701"RTN","C0XF2N",618,0)
1702 . S ZO=$G(ZBFDA(172.101,ZI,.05)) ; object pointer
1703"RTN","C0XF2N",619,0)
1704 . I ZO="" D BLKERR Q ;
1705"RTN","C0XF2N",620,0)
1706 . S ZIEN=ZI+ZBASE ; the new ien
1707"RTN","C0XF2N",621,0)
1708 . S ^C0X(101,ZIEN,0)=ZN_U_ZG_U_ZS_U_ZP_U_ZO ; set the zero node
1709"RTN","C0XF2N",622,0)
1710 . S ^C0X(101,"B",ZN,ZIEN)="" ; the B index
1711"RTN","C0XF2N",623,0)
1712 . S ^C0X(101,"G",ZG,ZIEN)="" ; the G for Graph index
1713"RTN","C0XF2N",624,0)
1714 . S ^C0X(101,"SPO",ZS,ZP,ZO)=""
1715"RTN","C0XF2N",625,0)
1716 . S ^C0X(101,"SOP",ZS,ZO,ZP)=""
1717"RTN","C0XF2N",626,0)
1718 . S ^C0X(101,"OPS",ZO,ZP,ZS)=""
1719"RTN","C0XF2N",627,0)
1720 . S ^C0X(101,"OSP",ZO,ZS,ZP)=""
1721"RTN","C0XF2N",628,0)
1722 . S ^C0X(101,"GOPS",ZG,ZO,ZP,ZS)=""
1723"RTN","C0XF2N",629,0)
1724 . S ^C0X(101,"GOSP",ZG,ZO,ZS,ZP)=""
1725"RTN","C0XF2N",630,0)
1726 . S ^C0X(101,"GPSO",ZG,ZP,ZS,ZO)=""
1727"RTN","C0XF2N",631,0)
1728 . S ^C0X(101,"GSPO",ZG,ZS,ZP,ZO)=""
1729"RTN","C0XF2N",632,0)
1730 Q
1731"RTN","C0XF2N",633,0)
1732 ;
1733"RTN","C0XF2N",634,0)
1734BLKERR ;
1735"RTN","C0XF2N",635,0)
1736 W !,"ERROR IN BULK LOAD",! ZWR ZBFDA(ZI)
1737"RTN","C0XF2N",636,0)
1738 B
1739"RTN","C0XF2N",637,0)
1740 Q
1741"RTN","C0XF2N",638,0)
1742 ;
1743"RTN","C0XF2N",639,0)
1744UPDIE(ZFDA) ; INTERNAL ROUTINE TO CALL UPDATE^DIE AND CHECK FOR ERRORS
1745"RTN","C0XF2N",640,0)
1746 ; ZFDA IS PASSED BY REFERENCE
1747"RTN","C0XF2N",641,0)
1748 ;ZWR ZFDA
1749"RTN","C0XF2N",642,0)
1750 ;B
1751"RTN","C0XF2N",643,0)
1752 K ZERR
1753"RTN","C0XF2N",644,0)
1754 D CLEAN^DILF
1755"RTN","C0XF2N",645,0)
1756 D UPDATE^DIE("","ZFDA","","ZERR")
1757"RTN","C0XF2N",646,0)
1758 I $D(ZERR) S ZZERR=ZZERR ; ZZERR DOESN'T EXIST,
1759"RTN","C0XF2N",647,0)
1760 ; INVOKE THE ERROR TRAP IF TASKED
1761"RTN","C0XF2N",648,0)
1762 ;. W "ERROR",!
1763"RTN","C0XF2N",649,0)
1764 ;. ZWR ZERR
1765"RTN","C0XF2N",650,0)
1766 ;. B
1767"RTN","C0XF2N",651,0)
1768 K ZFDA
1769"RTN","C0XF2N",652,0)
1770 Q
1771"RTN","C0XF2N",653,0)
1772 ;
1773"RTN","C0XMAIN")
17740^1^B115393527
1775"RTN","C0XMAIN",1,0)
1776C0XMAIN ; GPL - Fileman Triples entry point routine ;10/13/11 17:05
1777"RTN","C0XMAIN",2,0)
1778 ;;0.1;C0X;nopatch;noreleasedate;Build 5
1779"RTN","C0XMAIN",3,0)
1780 ;Copyright 2011 George Lilly. Licensed under the terms of the GNU
1781"RTN","C0XMAIN",4,0)
1782 ;General Public License See attached copy of the License.
1783"RTN","C0XMAIN",5,0)
1784 ;
1785"RTN","C0XMAIN",6,0)
1786 ;This program is free software; you can redistribute it and/or modify
1787"RTN","C0XMAIN",7,0)
1788 ;it under the terms of the GNU General Public License as published by
1789"RTN","C0XMAIN",8,0)
1790 ;the Free Software Foundation; either version 2 of the License, or
1791"RTN","C0XMAIN",9,0)
1792 ;(at your option) any later version.
1793"RTN","C0XMAIN",10,0)
1794 ;
1795"RTN","C0XMAIN",11,0)
1796 ;This program is distributed in the hope that it will be useful,
1797"RTN","C0XMAIN",12,0)
1798 ;but WITHOUT ANY WARRANTY; without even the implied warranty of
1799"RTN","C0XMAIN",13,0)
1800 ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1801"RTN","C0XMAIN",14,0)
1802 ;GNU General Public License for more details.
1803"RTN","C0XMAIN",15,0)
1804 ;
1805"RTN","C0XMAIN",16,0)
1806 ;You should have received a copy of the GNU General Public License along
1807"RTN","C0XMAIN",17,0)
1808 ;with this program; if not, write to the Free Software Foundation, Inc.,
1809"RTN","C0XMAIN",18,0)
1810 ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
1811"RTN","C0XMAIN",19,0)
1812 ;
1813"RTN","C0XMAIN",20,0)
1814 Q
1815"RTN","C0XMAIN",21,0)
1816 ;
1817"RTN","C0XMAIN",22,0)
1818INITFARY(ZFARY) ; INITIALIZE FILE NUMBERS AND OTHER USEFUL THINGS
1819"RTN","C0XMAIN",23,0)
1820 ; FOR THE DEFAULT TRIPLE STORE. USE OTHER VALUES FOR SUPPORTING ADDITIONAL
1821"RTN","C0XMAIN",24,0)
1822 ; TRIPLE STORES
1823"RTN","C0XMAIN",25,0)
1824 S @ZFARY@("C0XTFN")=172.101 ; TRIPLES FILE NUMBER
1825"RTN","C0XMAIN",26,0)
1826 S @ZFARY@("C0XSFN")=172.201 ; TRIPLES STRINGS FILE NUMBER
1827"RTN","C0XMAIN",27,0)
1828 S @ZFARY@("C0XTN")=$NA(^C0X(101)) ; TRIPLES GLOBAL NAME
1829"RTN","C0XMAIN",28,0)
1830 S @ZFARY@("C0XSN")=$NA(^C0X(201)) ; STRING FILE GLOBAL NAME
1831"RTN","C0XMAIN",29,0)
1832 ;S @ZFARY@("C0XDIR")="/home/glilly/all_smart_patient_data/smart-rdf/"
1833"RTN","C0XMAIN",30,0)
1834 S @ZFARY@("C0XDIR")="/home/george/fmts/trunk/samples/"
1835"RTN","C0XMAIN",31,0)
1836 D USEFARY(ZFARY)
1837"RTN","C0XMAIN",32,0)
1838 Q
1839"RTN","C0XMAIN",33,0)
1840 ;
1841"RTN","C0XMAIN",34,0)
1842USEFARY(ZFARY) ; INITIALIZES VARIABLES SAVED IN ARRAY ZFARY
1843"RTN","C0XMAIN",35,0)
1844 N ZI S ZI=""
1845"RTN","C0XMAIN",36,0)
1846 F S ZI=$O(@ZFARY@(ZI)) Q:ZI="" D
1847"RTN","C0XMAIN",37,0)
1848 . ;N ZX
1849"RTN","C0XMAIN",38,0)
1850 . S ZX="S "_ZI_"="""_@ZFARY@(ZI)_""""
1851"RTN","C0XMAIN",39,0)
1852 . ;W !,ZX
1853"RTN","C0XMAIN",40,0)
1854 . X ZX
1855"RTN","C0XMAIN",41,0)
1856 Q
1857"RTN","C0XMAIN",42,0)
1858 ;
1859"RTN","C0XMAIN",43,0)
1860IMPORT(FNAME,FDIR,FURL,FARY) ; EXTRINSIC THAT READS A FILE FROM THE STANDARD
1861"RTN","C0XMAIN",44,0)
1862 ; DIRECTORY, LOADS IT INTO THE TRIPLESTORE AS TEXT, AND RETURNS THE
1863"RTN","C0XMAIN",45,0)
1864 ; NODE NAME OF THE TEXT TRIPLE
1865"RTN","C0XMAIN",46,0)
1866 ; FDIR IS THE OPTIONAL DIRECTORY (DEFAUTS TO STANDARD DIR)
1867"RTN","C0XMAIN",47,0)
1868 ; FURL IS THE OPTIONAL URI FOR ACCESSING THE FILE FROM THE TRIPLE STORE
1869"RTN","C0XMAIN",48,0)
1870 ; FARY IS THE OPTIONAL FILE ARRAY OF THE TRIPLE STORE TO USE
1871"RTN","C0XMAIN",49,0)
1872 I '$D(FARY) D ;
1873"RTN","C0XMAIN",50,0)
1874 . D INITFARY("C0XFARY")
1875"RTN","C0XMAIN",51,0)
1876 . S FARY="C0XFARY"
1877"RTN","C0XMAIN",52,0)
1878 D USEFARY(FARY)
1879"RTN","C0XMAIN",53,0)
1880 N ZD,ZTMP
1881"RTN","C0XMAIN",54,0)
1882 I '$D(FDIR) S FDIR=C0XDIR ; DIRECTORY OF THE RDF FILE
1883"RTN","C0XMAIN",55,0)
1884 I '$D(FURL) D ;
1885"RTN","C0XMAIN",56,0)
1886 . N ZN2 S ZN2=$TR(FNAME,".","_") ; REMOVE THE DOT FROM THE NAME
1887"RTN","C0XMAIN",57,0)
1888 . S FURL=FDIR_ZN2
1889"RTN","C0XMAIN",58,0)
1890 N ZTMP
1891"RTN","C0XMAIN",59,0)
1892 S ZTMP=$NA(^TMP("C0X",$J,"FILEIN",1)) ; WHERE TO PUT THE INCOMING FILE
1893"RTN","C0XMAIN",60,0)
1894 K @ZTMP ; MAKE SURE IT'S CLEAR
1895"RTN","C0XMAIN",61,0)
1896 S C0XSTART=$$NOW^XLFDT
1897"RTN","C0XMAIN",62,0)
1898 W !,"STARTED: ",C0XSTART
1899"RTN","C0XMAIN",63,0)
1900 W !,"READING IN: ",FNAME
1901"RTN","C0XMAIN",64,0)
1902 I '$$FILEIN(ZTMP,FDIR,FNAME,4) D Q ; QUIT IF NO SUCCESS
1903"RTN","C0XMAIN",65,0)
1904 . W !,"ERROR READING FILE: ",FDIR,FNAME
1905"RTN","C0XMAIN",66,0)
1906 S ZRDF=$NA(^TMP("C0X",$J,"FILEIN")) ; WITHOUT THE SUBSCRIPT
1907"RTN","C0XMAIN",67,0)
1908 W !,$O(@ZRDF@(""),-1)," LINES READ"
1909"RTN","C0XMAIN",68,0)
1910 D INSRDF(ZRDF,FURL,FARY) ; IMPORT AND PROCESS THE RDF
1911"RTN","C0XMAIN",69,0)
1912 Q
1913"RTN","C0XMAIN",70,0)
1914 ;
1915"RTN","C0XMAIN",71,0)
1916WGET(ZURL,FARY) ; GET FROM THE INTERNET AN RDF FILE AND INSERT IT
1917"RTN","C0XMAIN",72,0)
1918 ;
1919"RTN","C0XMAIN",73,0)
1920 I '$D(FARY) D ;
1921"RTN","C0XMAIN",74,0)
1922 . D INITFARY("C0XFARY")
1923"RTN","C0XMAIN",75,0)
1924 . S FARY="C0XFARY"
1925"RTN","C0XMAIN",76,0)
1926 D USEFARY(FARY)
1927"RTN","C0XMAIN",77,0)
1928 ;N ZLOC,ZTMP
1929"RTN","C0XMAIN",78,0)
1930 K ZTMP
1931"RTN","C0XMAIN",79,0)
1932 S ZLOC=$NA(^TMP("C0X","WGET",$J))
1933"RTN","C0XMAIN",80,0)
1934 S C0XSTART=$$NOW^XLFDT
1935"RTN","C0XMAIN",81,0)
1936 W !,"STARTED: ",C0XSTART
1937"RTN","C0XMAIN",82,0)
1938 W !,"DOWNLOADING: ",ZURL
1939"RTN","C0XMAIN",83,0)
1940 S OK=$$httpGET^%zewdGTM(ZURL,.ZTMP)
1941"RTN","C0XMAIN",84,0)
1942 M @ZLOC=ZTMP
1943"RTN","C0XMAIN",85,0)
1944 W !,$O(@ZLOC@(""),-1)," LINES READ"
1945"RTN","C0XMAIN",86,0)
1946 D INSRDF(ZLOC,ZURL,FARY)
1947"RTN","C0XMAIN",87,0)
1948 Q
1949"RTN","C0XMAIN",88,0)
1950 ;
1951"RTN","C0XMAIN",89,0)
1952INSRDF(ZRDF,ZNAME,FARY) ; INSERT AN RDF FILE INTO THE STORE AND PROCESS
1953"RTN","C0XMAIN",90,0)
1954 ; ZRDF IS PASSED BY NAME
1955"RTN","C0XMAIN",91,0)
1956 I '$D(FARY) D ;
1957"RTN","C0XMAIN",92,0)
1958 . D INITFARY("C0XFARY")
1959"RTN","C0XMAIN",93,0)
1960 . S FARY="C0XFARY"
1961"RTN","C0XMAIN",94,0)
1962 D USEFARY(FARY)
1963"RTN","C0XMAIN",95,0)
1964 N ZGRAPH,ZSUBJECT
1965"RTN","C0XMAIN",96,0)
1966 S ZGRAPH="_:G"_$$LKY9 ; RANDOM GRAPH NAME
1967"RTN","C0XMAIN",97,0)
1968 S ZSUBJECT=$$ANONS ; RANDOM ANOYMOUS SUBJECT
1969"RTN","C0XMAIN",98,0)
1970 D ADD(ZGRAPH,ZSUBJECT,"fmts:url",ZNAME,FARY)
1971"RTN","C0XMAIN",99,0)
1972 N ZTXTNM
1973"RTN","C0XMAIN",100,0)
1974 S ZTXTNM="_TXT_INCOMING_RDF_FILE_"_ZNAME_"_"_$$LKY9 ; NAME FOR TEXT NODE
1975"RTN","C0XMAIN",101,0)
1976 D ADD(ZGRAPH,ZSUBJECT,"fmts:rdfSource",ZTXTNM,FARY)
1977"RTN","C0XMAIN",102,0)
1978 D UPDIE(.C0XFDA) ; TRY IT OUT
1979"RTN","C0XMAIN",103,0)
1980 K C0XCNT ;RESET FOR NEXT TIME
1981"RTN","C0XMAIN",104,0)
1982 D STORETXT(ZRDF,ZTXTNM,FARY)
1983"RTN","C0XMAIN",105,0)
1984 W !,"ADDED: ",ZGRAPH," ",ZSUBJECT," fmts:rdfSource ",ZTXTNM
1985"RTN","C0XMAIN",106,0)
1986 D PROCESS(.G,ZRDF,ZNAME,ZGRAPH,FARY) ; PARSE AND INSERT THE RDF
1987"RTN","C0XMAIN",107,0)
1988 Q
1989"RTN","C0XMAIN",108,0)
1990 ;
1991"RTN","C0XMAIN",109,0)
1992STORETXT(ZTXT,ZNAME,FARY) ; STORE TEXT IN THE TRIPLESTORE AT ZNAME
1993"RTN","C0XMAIN",110,0)
1994 ;
1995"RTN","C0XMAIN",111,0)
1996 I '$D(FARY) D ;
1997"RTN","C0XMAIN",112,0)
1998 . D INITFARY("C0XFARY")
1999"RTN","C0XMAIN",113,0)
2000 . S FARY="C0XFARY"
2001"RTN","C0XMAIN",114,0)
2002 D USEFARY(FARY)
2003"RTN","C0XMAIN",115,0)
2004 N ZIEN
2005"RTN","C0XMAIN",116,0)
2006 S ZIEN=$$IENOF(ZNAME,FARY) ; GET THE IEN
2007"RTN","C0XMAIN",117,0)
2008 D CLEAN^DILF
2009"RTN","C0XMAIN",118,0)
2010 K ZERR
2011"RTN","C0XMAIN",119,0)
2012 D WP^DIE(C0XSFN,ZIEN_",",1,,ZTXT,"ZERR")
2013"RTN","C0XMAIN",120,0)
2014 I $D(ZERR) D ;
2015"RTN","C0XMAIN",121,0)
2016 . ZWR ZERR
2017"RTN","C0XMAIN",122,0)
2018 Q
2019"RTN","C0XMAIN",123,0)
2020 ;
2021"RTN","C0XMAIN",124,0)
2022GETTXT(ZRTN,ZNAME,FARY) ; RETURNS RDF SOURCE OR OTHER TEXT
2023"RTN","C0XMAIN",125,0)
2024 ; ZRTN IS PASSED BY REFERENCE
2025"RTN","C0XMAIN",126,0)
2026 I '$D(FARY) D ;
2027"RTN","C0XMAIN",127,0)
2028 . D INITFARY("C0XFARY")
2029"RTN","C0XMAIN",128,0)
2030 . S FARY="C0XFARY"
2031"RTN","C0XMAIN",129,0)
2032 D USEFARY(FARY)
2033"RTN","C0XMAIN",130,0)
2034 N ZIEN
2035"RTN","C0XMAIN",131,0)
2036 S ZIEN=$$IENOF(ZNAME)
2037"RTN","C0XMAIN",132,0)
2038 S OK=$$GET1^DIQ(C0XSFN,ZIEN_",",1,,"ZRTN")
2039"RTN","C0XMAIN",133,0)
2040 Q
2041"RTN","C0XMAIN",134,0)
2042 ;
2043"RTN","C0XMAIN",135,0)
2044WHERETXT(ZNAME,FARY) ; EXTRINSIC WHICH RETURNS THE NAME OF THE GLOBAL
2045"RTN","C0XMAIN",136,0)
2046 ; WHERE THE TEXT IS LOCATED. NAME IS THE NAME OF THE STRING
2047"RTN","C0XMAIN",137,0)
2048 I '$D(FARY) D ;
2049"RTN","C0XMAIN",138,0)
2050 . D INITFARY("C0XFARY")
2051"RTN","C0XMAIN",139,0)
2052 . S FARY="C0XFARY"
2053"RTN","C0XMAIN",140,0)
2054 D USEFARY(FARY)
2055"RTN","C0XMAIN",141,0)
2056 N ZIEN
2057"RTN","C0XMAIN",142,0)
2058 S ZIEN=$$IENOF(ZNAME)
2059"RTN","C0XMAIN",143,0)
2060 Q $NA(@C0XSN@(ZIEN,1))
2061"RTN","C0XMAIN",144,0)
2062 ;
2063"RTN","C0XMAIN",145,0)
2064FILEIN(ZINTMP,ZDIR,ZFNAME,ZLVL) ; READS A FILE INTO ZINTMP USING FTG^%ZISH
2065"RTN","C0XMAIN",146,0)
2066 ; ZINTMP IS PASSED BY NAME AND INCLUDES THE NEW SUBSCRIPT
2067"RTN","C0XMAIN",147,0)
2068 ; IE ^TMP("C0X","FILEIN",1)
2069"RTN","C0XMAIN",148,0)
2070 ; ZLVL IN THIS CASE WOULD BE 3 INCREMENTING THE 1
2071"RTN","C0XMAIN",149,0)
2072 ; EXTRINSIC WHICH RETURNS THE RESULT OF FTG^%ZISH
2073"RTN","C0XMAIN",150,0)
2074 S OK=$$FTG^%ZISH(ZDIR,FNAME,ZINTMP,ZLVL)
2075"RTN","C0XMAIN",151,0)
2076 Q OK
2077"RTN","C0XMAIN",152,0)
2078 ;
2079"RTN","C0XMAIN",153,0)
2080TESTPROC ; TEST PROCESS WITH EXISTING SMALL RDF FILE
2081"RTN","C0XMAIN",154,0)
2082 S ZIN=$NA(^TMP("C0X",12226,"FILEIN"))
2083"RTN","C0XMAIN",155,0)
2084 S ZGRAPH="/test/rdfFile"
2085"RTN","C0XMAIN",156,0)
2086 S ZM="/test/rdfFile/meta"
2087"RTN","C0XMAIN",157,0)
2088 D PROCESS(.G,ZIN,ZGRAPH,ZM)
2089"RTN","C0XMAIN",158,0)
2090 Q
2091"RTN","C0XMAIN",159,0)
2092 ;
2093"RTN","C0XMAIN",160,0)
2094PROCESS(ZRTN,ZRDF,ZGRF,ZMETA,FARY) ; PROCESS AN INCOMING RDF FILE
2095"RTN","C0XMAIN",161,0)
2096 ; ZRTN IS PASS BY REFERENCE AND RETURNS MESSAGES ABOUT THE PROCESSING
2097"RTN","C0XMAIN",162,0)
2098 ; ZRDF IS PASSED BY NAME AND IS THE GLOBAL CONTAINING THE RDF FILE
2099"RTN","C0XMAIN",163,0)
2100 ; ZGRF IS THE NAME OF THE GRAPH TO USE IN THE TRIPLE STORE FOR RESULTS
2101"RTN","C0XMAIN",164,0)
2102 ; ZMETA IS OPTIONAL AND IS THE NAME OF THE GRAPH TO STORE METADATA
2103"RTN","C0XMAIN",165,0)
2104 ;
2105"RTN","C0XMAIN",166,0)
2106 I '$D(FARY) D ;
2107"RTN","C0XMAIN",167,0)
2108 . D INITFARY("C0XFARY")
2109"RTN","C0XMAIN",168,0)
2110 . S FARY="C0XFARY"
2111"RTN","C0XMAIN",169,0)
2112 D USEFARY(FARY)
2113"RTN","C0XMAIN",170,0)
2114 ; -- first parse the rdf file with the MXML parser
2115"RTN","C0XMAIN",171,0)
2116 ;S C0XDOCID=$$PARSE^C0CNHIN(ZRDF,"C0XARRAY") ; PARSE WITH MXML
2117"RTN","C0XMAIN",172,0)
2118 S C0XDOCID=$$EN^MXMLDOM(ZRDF,"W")
2119"RTN","C0XMAIN",173,0)
2120 ; -- assign the MXLM dom global name to ZDOM
2121"RTN","C0XMAIN",174,0)
2122 S ZDOM=$NA(^TMP("MXMLDOM",$J,C0XDOCID))
2123"RTN","C0XMAIN",175,0)
2124 W !,$O(@ZDOM@(""),-1)," XML NODES PARSED"
2125"RTN","C0XMAIN",176,0)
2126 ; -- populate the metagraph to point to the graph with status unfinished
2127"RTN","C0XMAIN",177,0)
2128 S METAS=$$ANONS ; GET AN ANONOMOUS RANDOM SUBJECT
2129"RTN","C0XMAIN",178,0)
2130 I '$D(ZMETA) S ZMETA="_:G"_$$LKY9 ; RANDOM GRAPH NAME FOR METAGRAPH
2131"RTN","C0XMAIN",179,0)
2132 D ADD(ZMETA,METAS,"fmts:about",ZGRF,FARY) ; POINT THE META TO THE GRAPH
2133"RTN","C0XMAIN",180,0)
2134 D ADD(ZMETA,METAS,"fmts:status","unfinished",FARY) ; mark as unfinished
2135"RTN","C0XMAIN",181,0)
2136 ;S C0XDATE=$$FMDTOUTC^C0CUTIL($$NOW^XLFDT,"DT")
2137"RTN","C0XMAIN",182,0)
2138 S C0XDATE=$$NOW^XLFDT
2139"RTN","C0XMAIN",183,0)
2140 D ADD(ZMETA,METAS,"fmts:dateTime",C0XDATE,FARY)
2141"RTN","C0XMAIN",184,0)
2142 D UPDIE(.C0XFDA) ; commit the metagraph changes to the triple store
2143"RTN","C0XMAIN",185,0)
2144 ; --
2145"RTN","C0XMAIN",186,0)
2146 ; -- pull out the vocabularies in the RDF statement. marked with xmlns:
2147"RTN","C0XMAIN",187,0)
2148 ; -- put them in a local variable for quick reference
2149"RTN","C0XMAIN",188,0)
2150 ; -- TODO: create a graph for vocabularies and validate incoming against it
2151"RTN","C0XMAIN",189,0)
2152 ;
2153"RTN","C0XMAIN",190,0)
2154 S C0XVOC=""
2155"RTN","C0XMAIN",191,0)
2156 N ZI,ZJ,ZK S ZI=""
2157"RTN","C0XMAIN",192,0)
2158 F S ZI=$O(@ZDOM@(1,"A",ZI)) Q:ZI="" D ; FOR EACH xmlns
2159"RTN","C0XMAIN",193,0)
2160 . S ZVOC=$P(ZI,"xmlns:",2)
2161"RTN","C0XMAIN",194,0)
2162 . I ZVOC'="" S C0XVOC(ZVOC)=$G(@ZDOM@(1,"A",ZI))
2163"RTN","C0XMAIN",195,0)
2164 ;W !,"VOCABS:" ZWR C0XVOC
2165"RTN","C0XMAIN",196,0)
2166 ;
2167"RTN","C0XMAIN",197,0)
2168 ; -- look for children called rdf:Description. quit if none. not an rdf file
2169"RTN","C0XMAIN",198,0)
2170 ;
2171"RTN","C0XMAIN",199,0)
2172 S ZI=$O(@ZDOM@(1,"C",""))
2173"RTN","C0XMAIN",200,0)
2174 I $G(@ZDOM@(1,"C",ZI))'="rdf:Description" D Q ; not an rdf file
2175"RTN","C0XMAIN",201,0)
2176 . W !,"Error. Not an RDF file. Cannot process."
2177"RTN","C0XMAIN",202,0)
2178 ;
2179"RTN","C0XMAIN",203,0)
2180 ; -- now process the rdf description children
2181"RTN","C0XMAIN",204,0)
2182 ;
2183"RTN","C0XMAIN",205,0)
2184 S ZI=""
2185"RTN","C0XMAIN",206,0)
2186 S (C0XSUB,C0XPRE,C0XOBJ)="" ; INITIALIZE subject, object and predicate
2187"RTN","C0XMAIN",207,0)
2188 F S ZI=$O(@ZDOM@(1,"C",ZI)) Q:ZI="" D ;
2189"RTN","C0XMAIN",208,0)
2190 . ; -- we are skipping any child that is not rdf:Description
2191"RTN","C0XMAIN",209,0)
2192 . ; -- TODO: check to see if this is right in general
2193"RTN","C0XMAIN",210,0)
2194 . ;
2195"RTN","C0XMAIN",211,0)
2196 . IF $G(@ZDOM@(1,"C",ZI))'="rdf:Description" D Q ;
2197"RTN","C0XMAIN",212,0)
2198 . . W !,"SKIPPING NODE: ",ZI
2199"RTN","C0XMAIN",213,0)
2200 . ; -- now looking for the subject for the triples
2201"RTN","C0XMAIN",214,0)
2202 . S ZX=$G(@ZDOM@(ZI,"A","rdf:about"))
2203"RTN","C0XMAIN",215,0)
2204 . I ZX'="" D ; we have the subject
2205"RTN","C0XMAIN",216,0)
2206 . . ;W " about: ",ZX
2207"RTN","C0XMAIN",217,0)
2208 . . S C0XSUB=ZX
2209"RTN","C0XMAIN",218,0)
2210 . E D ;
2211"RTN","C0XMAIN",219,0)
2212 . . S ZX=$G(@ZDOM@(ZI,"A","rdf:nodeID")) ; node id is another style of subject
2213"RTN","C0XMAIN",220,0)
2214 . . I ZX'="" D ;
2215"RTN","C0XMAIN",221,0)
2216 . . . S C0XSUB=ZX
2217"RTN","C0XMAIN",222,0)
2218 . I C0XSUB="" S C0XSUB=$$ANONS ; DEFAULT TO BLANK SUBJECT
2219"RTN","C0XMAIN",223,0)
2220 . ;
2221"RTN","C0XMAIN",224,0)
2222 . ; -- we now have the subject. the children of this node have the rest
2223"RTN","C0XMAIN",225,0)
2224 . ;
2225"RTN","C0XMAIN",226,0)
2226 . S ZJ="" ; for the children of the rdf:Description nodes
2227"RTN","C0XMAIN",227,0)
2228 . F S ZJ=$O(@ZDOM@(ZI,"C",ZJ)) Q:ZJ="" D ; for each child
2229"RTN","C0XMAIN",228,0)
2230 . . S C0XPRE=@ZDOM@(ZJ) ; the predicate without a prefix
2231"RTN","C0XMAIN",229,0)
2232 . . S ZX=$G(@ZDOM@(ZJ,"A","xmlns")) ; name space
2233"RTN","C0XMAIN",230,0)
2234 . . I ZX'="" S C0XPRE=ZX_C0XPRE ; add the namespace prefix
2235"RTN","C0XMAIN",231,0)
2236 . . I C0XPRE[":" D ; expand using vocabulary
2237"RTN","C0XMAIN",232,0)
2238 . . . N ZB,ZA
2239"RTN","C0XMAIN",233,0)
2240 . . . S ZB=$P(C0XPRE,":",1)
2241"RTN","C0XMAIN",234,0)
2242 . . . S ZA=$P(C0XPRE,":",2)
2243"RTN","C0XMAIN",235,0)
2244 . . . I $G(C0XVOC(ZB))'="" D ;
2245"RTN","C0XMAIN",236,0)
2246 . . . . S C0XPRE=C0XVOC(ZB)_ZA ; expanded
2247"RTN","C0XMAIN",237,0)
2248 . . S ZY=$G(@ZDOM@(ZJ,"A","rdf:resource")) ; potential object
2249"RTN","C0XMAIN",238,0)
2250 . . I ZY'="" D Q ;
2251"RTN","C0XMAIN",239,0)
2252 . . . S C0XOBJ=ZY ; object
2253"RTN","C0XMAIN",240,0)
2254 . . . D ADD(ZGRF,C0XSUB,C0XPRE,C0XOBJ) ; finally. our first real triple
2255"RTN","C0XMAIN",241,0)
2256 . . ; -- this is an else because of the quit above
2257"RTN","C0XMAIN",242,0)
2258 . . S ZX=$G(@ZDOM@(ZJ,"A","rdf:nodeID")) ; fishing for nodeId object
2259"RTN","C0XMAIN",243,0)
2260 . . I ZX'="" D Q ; got one
2261"RTN","C0XMAIN",244,0)
2262 . . . S C0XOBJ=ZX ; we are using the incoming nodeIDs as object/subject
2263"RTN","C0XMAIN",245,0)
2264 . . . ; without change... this could be foolish .. look at it again later
2265"RTN","C0XMAIN",246,0)
2266 . . . D ADD(ZGRF,C0XSUB,C0XPRE,C0XOBJ) ; go for it and add a node
2267"RTN","C0XMAIN",247,0)
2268 . . S C0XOBJ=$G(@ZDOM@(ZJ,"T",1)) ; hopefully an object is here
2269"RTN","C0XMAIN",248,0)
2270 . . I C0XOBJ="" D Q ; not a happy situation
2271"RTN","C0XMAIN",249,0)
2272 . . . W !,"ERROR, NO OBJECT FOUND FOR NODE: ",ZJ
2273"RTN","C0XMAIN",250,0)
2274 . . D ADD(ZGRF,C0XSUB,C0XPRE,C0XOBJ) ; go for it and add a node
2275"RTN","C0XMAIN",251,0)
2276 W !,"INSERTING ",C0XCNT," TRIPLES"
2277"RTN","C0XMAIN",252,0)
2278 D UPDIE(.C0XFDA) ; commit the updates to the file
2279"RTN","C0XMAIN",253,0)
2280 ; next, mark the graph as finished
2281"RTN","C0XMAIN",254,0)
2282 S C0XEND=$$NOW^XLFDT
2283"RTN","C0XMAIN",255,0)
2284 W !," ENDED AT: ",C0XEND
2285"RTN","C0XMAIN",256,0)
2286 S C0XDIFF=$$FMDIFF^XLFDT(C0XEND,C0XSTART,2)
2287"RTN","C0XMAIN",257,0)
2288 W !," ELAPSED TIME: ",C0XDIFF," SECONDS"
2289"RTN","C0XMAIN",258,0)
2290 W !," APPROXIMATELY ",$P(C0XCNT/C0XDIFF,".")," TRIPLES PER SECOND"
2291"RTN","C0XMAIN",259,0)
2292 Q
2293"RTN","C0XMAIN",260,0)
2294 ;
2295"RTN","C0XMAIN",261,0)
2296SHOW(ZN) ;
2297"RTN","C0XMAIN",262,0)
2298 ZWR ^TMP("MXMLDOM",$J,1,ZN,*)
2299"RTN","C0XMAIN",263,0)
2300 Q
2301"RTN","C0XMAIN",264,0)
2302 ;
2303"RTN","C0XMAIN",265,0)
2304ANONS() ; RETURNS AN ANONOMOUS SUBJECT
2305"RTN","C0XMAIN",266,0)
2306 Q "_S:"_$$LKY9
2307"RTN","C0XMAIN",267,0)
2308 ;
2309"RTN","C0XMAIN",268,0)
2310NEWG(NGRAPH,NMETA) ; CREATES A NEW META GRAPH, MARKS IT AS UNFINISHED
2311"RTN","C0XMAIN",269,0)
2312 ; THEN CREATES A NEW GRAPH AND POINTS THE METAGRAPH TO IT
2313"RTN","C0XMAIN",270,0)
2314 ; NGRAPH AND NMETA ARE PASSED BY REFERENCE AND ARE THE RETURN
2315"RTN","C0XMAIN",271,0)
2316 S NGRAPH="G"_$$LKY9
2317"RTN","C0XMAIN",272,0)
2318 S NMETA=NGRAPH_"A"
2319"RTN","C0XMAIN",273,0)
2320 Q
2321"RTN","C0XMAIN",274,0)
2322 ;
2323"RTN","C0XMAIN",275,0)
2324ADD(ZG,ZS,ZP,ZO,FARY) ; ADD A TRIPLE TO THE TRIPLESTORE. ALL VALUES ARE TEXT
2325"RTN","C0XMAIN",276,0)
2326 ; THE FDA IS SET UP BUT THE FILES ARE NOT UPDATED. CALL UPDIE TO COMPLETE
2327"RTN","C0XMAIN",277,0)
2328 I '$D(FARY) D ;
2329"RTN","C0XMAIN",278,0)
2330 . D INITFARY("C0XFARY")
2331"RTN","C0XMAIN",279,0)
2332 . S FARY="C0XFARY"
2333"RTN","C0XMAIN",280,0)
2334 D USEFARY(FARY)
2335"RTN","C0XMAIN",281,0)
2336 I '$D(C0XCNT) S C0XCNT=0
2337"RTN","C0XMAIN",282,0)
2338 N ZNODE
2339"RTN","C0XMAIN",283,0)
2340 S ZNODE="N"_$$LKY17
2341"RTN","C0XMAIN",284,0)
2342 N ZNARY ; GET READY TO CALL IENOFA
2343"RTN","C0XMAIN",285,0)
2344 S ZNARY("ZG",ZG)=""
2345"RTN","C0XMAIN",286,0)
2346 S ZNARY("ZS",ZS)=""
2347"RTN","C0XMAIN",287,0)
2348 S ZNARY("ZP",ZP)=""
2349"RTN","C0XMAIN",288,0)
2350 S ZNARY("ZO",ZO)=""
2351"RTN","C0XMAIN",289,0)
2352 D IENOFA(.ZIENS,.ZNARY,FARY) ; RESOLVE/ADD STRINGS
2353"RTN","C0XMAIN",290,0)
2354 ;S ZGIEN=$$IENOF(ZG) ; LAYGO TO GET IEN
2355"RTN","C0XMAIN",291,0)
2356 ;S ZSIEN=$$IENOF(ZS)
2357"RTN","C0XMAIN",292,0)
2358 ;S ZPIEN=$$IENOF(ZP)
2359"RTN","C0XMAIN",293,0)
2360 ;S ZOIEN=$$IENOF(ZO)
2361"RTN","C0XMAIN",294,0)
2362 ;I $D(C0XFDA) D UPDIE ; ADD THE STRINGS IF NEEDED
2363"RTN","C0XMAIN",295,0)
2364 S C0XCNT=C0XCNT+1
2365"RTN","C0XMAIN",296,0)
2366 S C0XFDA(C0XTFN,"?+"_C0XCNT_",",.01)=ZNODE
2367"RTN","C0XMAIN",297,0)
2368 S C0XFDA(C0XTFN,"?+"_C0XCNT_",",.02)=$O(ZIENS("IEN","ZG",""))
2369"RTN","C0XMAIN",298,0)
2370 S C0XFDA(C0XTFN,"?+"_C0XCNT_",",.03)=$O(ZIENS("IEN","ZS",""))
2371"RTN","C0XMAIN",299,0)
2372 S C0XFDA(C0XTFN,"?+"_C0XCNT_",",.04)=$O(ZIENS("IEN","ZP",""))
2373"RTN","C0XMAIN",300,0)
2374 S C0XFDA(C0XTFN,"?+"_C0XCNT_",",.05)=$O(ZIENS("IEN","ZO",""))
2375"RTN","C0XMAIN",301,0)
2376 ; REMEMBER TO CALL UPDIE WHEN YOU'RE DONE
2377"RTN","C0XMAIN",302,0)
2378 Q
2379"RTN","C0XMAIN",303,0)
2380 ;
2381"RTN","C0XMAIN",304,0)
2382LKY9() ;EXTRINIC THAT RETURNS A RANDOM 9 DIGIT NUMBER. USED FOR GENERATING
2383"RTN","C0XMAIN",305,0)
2384 ; UNIQUE NODE AND GRAPH NAMES
2385"RTN","C0XMAIN",306,0)
2386 N ZN,ZI
2387"RTN","C0XMAIN",307,0)
2388 S ZN=""
2389"RTN","C0XMAIN",308,0)
2390 F ZI=1:1:9 D ;
2391"RTN","C0XMAIN",309,0)
2392 . S ZN=ZN_$R(10)
2393"RTN","C0XMAIN",310,0)
2394 Q ZN
2395"RTN","C0XMAIN",311,0)
2396 ;
2397"RTN","C0XMAIN",312,0)
2398LKY17() ;EXTRINIC THAT RETURNS A RANDOM 9 DIGIT NUMBER. USED FOR GENERATING
2399"RTN","C0XMAIN",313,0)
2400 ; UNIQUE NODE AND GRAPH NAMES
2401"RTN","C0XMAIN",314,0)
2402 N ZN,ZI
2403"RTN","C0XMAIN",315,0)
2404 S ZN=""
2405"RTN","C0XMAIN",316,0)
2406 F ZI=1:1:17 D ;
2407"RTN","C0XMAIN",317,0)
2408 . S ZN=ZN_$R(10)
2409"RTN","C0XMAIN",318,0)
2410 Q ZN
2411"RTN","C0XMAIN",319,0)
2412 ;
2413"RTN","C0XMAIN",320,0)
2414IENOF(ZSTRING,FARY) ; EXTRINSIC WHICH RETURNS THE IEN OF ZS IN THE STRINGS FILE
2415"RTN","C0XMAIN",321,0)
2416 I '$D(FARY) D ;
2417"RTN","C0XMAIN",322,0)
2418 . D INITFARY("C0XFARY")
2419"RTN","C0XMAIN",323,0)
2420 . S FARY="C0XFARY"
2421"RTN","C0XMAIN",324,0)
2422 N ZIEN
2423"RTN","C0XMAIN",325,0)
2424 S ZIEN=$O(@C0XSN@("B",ZSTRING,""))
2425"RTN","C0XMAIN",326,0)
2426 I ZIEN="" D ;
2427"RTN","C0XMAIN",327,0)
2428 . S C0XFDA2(C0XSFN,"+1,",.01)=ZSTRING
2429"RTN","C0XMAIN",328,0)
2430 . D UPDIE(.C0XFDA2)
2431"RTN","C0XMAIN",329,0)
2432 . S ZIEN=$O(@C0XSN@("B",ZSTRING,""))
2433"RTN","C0XMAIN",330,0)
2434 . K C0XFDA2
2435"RTN","C0XMAIN",331,0)
2436 Q ZIEN
2437"RTN","C0XMAIN",332,0)
2438 ;
2439"RTN","C0XMAIN",333,0)
2440IENOFA(ZOUTARY,ZINARY,FARY) ; RESOLVE STRINGS TO IEN IN STRINGS FILE
2441"RTN","C0XMAIN",334,0)
2442 ; OR ADD THEM IF
2443"RTN","C0XMAIN",335,0)
2444 ; MISSING. ZINARY AND ZOUTARY ARE PASSED BY REFERENCE
2445"RTN","C0XMAIN",336,0)
2446 ; ZINARY LOOKS LIKE ZINARY("VAR","VAL")=""
2447"RTN","C0XMAIN",337,0)
2448 ; RETURNS IN ZOUTARY OF THE FORM ZOUTARY("IEN","VAR",IEN)=""
2449"RTN","C0XMAIN",338,0)
2450 I '$D(FARY) D ;
2451"RTN","C0XMAIN",339,0)
2452 . D INITFARY("C0XFARY")
2453"RTN","C0XMAIN",340,0)
2454 . S FARY="C0XFARY"
2455"RTN","C0XMAIN",341,0)
2456 K ZOUTARY ; START WITH CLEAN RESULTS
2457"RTN","C0XMAIN",342,0)
2458 K C0XFDA2 ; USE A SEPARATE FDA FOR THIS
2459"RTN","C0XMAIN",343,0)
2460 N ZI S ZI=""
2461"RTN","C0XMAIN",344,0)
2462 N ZV,ZIEN
2463"RTN","C0XMAIN",345,0)
2464 N ZCNT S ZCNT=0
2465"RTN","C0XMAIN",346,0)
2466 F S ZI=$O(ZINARY(ZI)) Q:ZI="" D ; LOOK FOR MISSING STRINGS
2467"RTN","C0XMAIN",347,0)
2468 . S ZV=$O(ZINARY(ZI,""))
2469"RTN","C0XMAIN",348,0)
2470 . I $O(@C0XSN@("B",ZV,""))="" D ;
2471"RTN","C0XMAIN",349,0)
2472 . . S ZCNT=ZCNT+1
2473"RTN","C0XMAIN",350,0)
2474 . . S C0XFDA2(C0XSFN,"+"_ZCNT_",",.01)=ZV
2475"RTN","C0XMAIN",351,0)
2476 I $D(C0XFDA2) D ;
2477"RTN","C0XMAIN",352,0)
2478 . D UPDIE(.C0XFDA2) ; ADD MISSING STRINGS
2479"RTN","C0XMAIN",353,0)
2480 . K C0XFDA2 ; CLEAN UP
2481"RTN","C0XMAIN",354,0)
2482 F S ZI=$O(ZINARY(ZI)) Q:ZI="" D ; NOT GET ALL IENS
2483"RTN","C0XMAIN",355,0)
2484 . S ZV=$O(ZINARY(ZI,""))
2485"RTN","C0XMAIN",356,0)
2486 . S ZIEN=$O(@C0XSN@("B",ZV,"")) ; THEY SHOULD BE THERE NOW
2487"RTN","C0XMAIN",357,0)
2488 . I ZIEN="" D ;
2489"RTN","C0XMAIN",358,0)
2490 . . W !,"ERROR ADDING STRING: ",ZV
2491"RTN","C0XMAIN",359,0)
2492 . . B
2493"RTN","C0XMAIN",360,0)
2494 . S ZOUTARY("IEN",ZI,ZIEN)=""
2495"RTN","C0XMAIN",361,0)
2496 Q
2497"RTN","C0XMAIN",362,0)
2498 ;
2499"RTN","C0XMAIN",363,0)
2500UPDIE(ZFDA) ; INTERNAL ROUTINE TO CALL UPDATE^DIE AND CHECK FOR ERRORS
2501"RTN","C0XMAIN",364,0)
2502 ; ZFDA IS PASSED BY REFERENCE
2503"RTN","C0XMAIN",365,0)
2504 ;ZWR ZFDA
2505"RTN","C0XMAIN",366,0)
2506 ;B
2507"RTN","C0XMAIN",367,0)
2508 K ZERR
2509"RTN","C0XMAIN",368,0)
2510 D CLEAN^DILF
2511"RTN","C0XMAIN",369,0)
2512 D UPDATE^DIE("","ZFDA","","ZERR")
2513"RTN","C0XMAIN",370,0)
2514 I $D(ZERR) S ZZERR=ZZERR ; ZZERR DOESN'T EXIST,
2515"RTN","C0XMAIN",371,0)
2516 ; INVOKE THE ERROR TRAP IF TASKED
2517"RTN","C0XMAIN",372,0)
2518 ;. W "ERROR",!
2519"RTN","C0XMAIN",373,0)
2520 ;. ZWR ZERR
2521"RTN","C0XMAIN",374,0)
2522 ;. B
2523"RTN","C0XMAIN",375,0)
2524 K ZFDA
2525"RTN","C0XMAIN",376,0)
2526 Q
2527"RTN","C0XMAIN",377,0)
2528 ;
2529"RTN","C0XTEST")
25300^3^B14490662
2531"RTN","C0XTEST",1,0)
2532C0XTEST ; GPL - Fileman Triples bulk load tester ;11/6/11 17:05
2533"RTN","C0XTEST",2,0)
2534 ;;0.1;C0X;nopatch;noreleasedate;Build 5
2535"RTN","C0XTEST",3,0)
2536 ;Copyright 2011 George Lilly. Licensed under the terms of the GNU
2537"RTN","C0XTEST",4,0)
2538 ;General Public License See attached copy of the License.
2539"RTN","C0XTEST",5,0)
2540 ;
2541"RTN","C0XTEST",6,0)
2542 ;This program is free software; you can redistribute it and/or modify
2543"RTN","C0XTEST",7,0)
2544 ;it under the terms of the GNU General Public License as published by
2545"RTN","C0XTEST",8,0)
2546 ;the Free Software Foundation; either version 2 of the License, or
2547"RTN","C0XTEST",9,0)
2548 ;(at your option) any later version.
2549"RTN","C0XTEST",10,0)
2550 ;
2551"RTN","C0XTEST",11,0)
2552 ;This program is distributed in the hope that it will be useful,
2553"RTN","C0XTEST",12,0)
2554 ;but WITHOUT ANY WARRANTY; without even the implied warranty of
2555"RTN","C0XTEST",13,0)
2556 ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2557"RTN","C0XTEST",14,0)
2558 ;GNU General Public License for more details.
2559"RTN","C0XTEST",15,0)
2560 ;
2561"RTN","C0XTEST",16,0)
2562 ;You should have received a copy of the GNU General Public License along
2563"RTN","C0XTEST",17,0)
2564 ;with this program; if not, write to the Free Software Foundation, Inc.,
2565"RTN","C0XTEST",18,0)
2566 ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
2567"RTN","C0XTEST",19,0)
2568 ;
2569"RTN","C0XTEST",20,0)
2570 Q
2571"RTN","C0XTEST",21,0)
2572 ;
2573"RTN","C0XTEST",22,0)
2574EN ; run the test
2575"RTN","C0XTEST",23,0)
2576 ;
2577"RTN","C0XTEST",24,0)
2578 k C0XFDA ; clear the node variable
2579"RTN","C0XTEST",25,0)
2580 i '$d(^C0X(101,0)) d ; global doesn't exist
2581"RTN","C0XTEST",26,0)
2582 . s ^C0X(101,0)="C0X TRIPLE^172.101^1^1"
2583"RTN","C0XTEST",27,0)
2584 n zg
2585"RTN","C0XTEST",28,0)
2586 S zg="_:G"_$$LKY9 ; all nodes are in the same graph
2587"RTN","C0XTEST",29,0)
2588 n zi
2589"RTN","C0XTEST",30,0)
2590 f zi=1:1:100000 d ; try a test of 10000 nodes
2591"RTN","C0XTEST",31,0)
2592 . s C0XFDA(172.101,zi,.01)="N"_$$LKY17 ; node name
2593"RTN","C0XTEST",32,0)
2594 . s C0XFDA(172.101,zi,.02)=zg
2595"RTN","C0XTEST",33,0)
2596 . s C0XFDA(172.101,zi,.03)=$R(100000)
2597"RTN","C0XTEST",34,0)
2598 . s C0XFDA(172.101,zi,.04)=$R(100000)
2599"RTN","C0XTEST",35,0)
2600 . s C0XFDA(172.101,zi,.05)=$R(100000)
2601"RTN","C0XTEST",36,0)
2602 S C0XST=$$NOW^XLFDT ; start of the insertion test
2603"RTN","C0XTEST",37,0)
2604 W !,"INSERTION STARTS AT ",C0XST,!
2605"RTN","C0XTEST",38,0)
2606 d BULKLOAD(.C0XFDA)
2607"RTN","C0XTEST",39,0)
2608 s C0XEND=$$NOW^XLFDT ; end of the insertion test
2609"RTN","C0XTEST",40,0)
2610 W !,"INSERTION ENDS AT ",C0XEND
2611"RTN","C0XTEST",41,0)
2612 S C0XDIFF=$$FMDIFF^XLFDT(C0XEND,C0XST,2)
2613"RTN","C0XTEST",42,0)
2614 W !," ELAPSED TIME: ",C0XDIFF," SECONDS"
2615"RTN","C0XTEST",43,0)
2616 I C0XDIFF>0 W !," APPROXIMATELY ",$P(100000/C0XDIFF,".")," NODES PER SECOND"
2617"RTN","C0XTEST",44,0)
2618 q
2619"RTN","C0XTEST",45,0)
2620 ;
2621"RTN","C0XTEST",46,0)
2622LKY9() ;EXTRINIC THAT RETURNS A RANDOM 9 DIGIT NUMBER. USED FOR GENERATING
2623"RTN","C0XTEST",47,0)
2624 ; UNIQUE NODE AND GRAPH NAMES
2625"RTN","C0XTEST",48,0)
2626 N ZN,ZI
2627"RTN","C0XTEST",49,0)
2628 S ZN=""
2629"RTN","C0XTEST",50,0)
2630 F ZI=1:1:9 D ;
2631"RTN","C0XTEST",51,0)
2632 . S ZN=ZN_$R(10)
2633"RTN","C0XTEST",52,0)
2634 Q ZN
2635"RTN","C0XTEST",53,0)
2636 ;
2637"RTN","C0XTEST",54,0)
2638LKY17() ;EXTRINIC THAT RETURNS A RANDOM 9 DIGIT NUMBER. USED FOR GENERATING
2639"RTN","C0XTEST",55,0)
2640 ; UNIQUE NODE AND GRAPH NAMES
2641"RTN","C0XTEST",56,0)
2642 N ZN,ZI
2643"RTN","C0XTEST",57,0)
2644 S ZN=""
2645"RTN","C0XTEST",58,0)
2646 F ZI=1:1:17 D ;
2647"RTN","C0XTEST",59,0)
2648 . S ZN=ZN_$R(10)
2649"RTN","C0XTEST",60,0)
2650 Q ZN
2651"RTN","C0XTEST",61,0)
2652 ;
2653"RTN","C0XTEST",62,0)
2654BULKLOAD(ZBFDA) ; BULK LOADER FOR LOADING TRIPLES INTO FILE 172.101
2655"RTN","C0XTEST",63,0)
2656 ; USING GLOBAL SETS INSTEAD OF UPDATE^DIE
2657"RTN","C0XTEST",64,0)
2658 ; QUITS IF FILE IS NOT 172.101
2659"RTN","C0XTEST",65,0)
2660 ; EXPECTS AN FDA WITHOUT STRINGS FOR THE IENS, STARTING AT 1
2661"RTN","C0XTEST",66,0)
2662 ; QUITS IF FIRST ENTRY IS NOT IENS 1
2663"RTN","C0XTEST",67,0)
2664 ; ASSUMES THAT THE LAST IENS IS THE COUNT OF ENTRIES
2665"RTN","C0XTEST",68,0)
2666 ; ZBFDA IS PASSED BY REFERENCE
2667"RTN","C0XTEST",69,0)
2668 ;
2669"RTN","C0XTEST",70,0)
2670 ; -- reserves a block of iens from file 172.101 by locking the zero node
2671"RTN","C0XTEST",71,0)
2672 ; -- ^C0X(101,0) and adding the count of entries to piece 2 and 3
2673"RTN","C0XTEST",72,0)
2674 ; -- then unlocking to minimize the duration of the lock
2675"RTN","C0XTEST",73,0)
2676 ;
2677"RTN","C0XTEST",74,0)
2678 W !,"USING BULKLOAD"
2679"RTN","C0XTEST",75,0)
2680 I '$D(ZBFDA) Q ; EMPTY FDA
2681"RTN","C0XTEST",76,0)
2682 I $O(ZBFDA(""))'=172.101 Q ; WRONG FILE
2683"RTN","C0XTEST",77,0)
2684 N ZCNT,ZP3,ZP4
2685"RTN","C0XTEST",78,0)
2686 ; -- find the number of nodes to insert
2687"RTN","C0XTEST",79,0)
2688 S ZCNT=$O(ZBFDA(172.101,""),-1)
2689"RTN","C0XTEST",80,0)
2690 I ZCNT="" D Q ;
2691"RTN","C0XTEST",81,0)
2692 . W !,"ERROR IN BULK LOAD - INVALID NODE COUNT"
2693"RTN","C0XTEST",82,0)
2694 . B
2695"RTN","C0XTEST",83,0)
2696 ; -- lock the zero node and reserve a block of iens to insert
2697"RTN","C0XTEST",84,0)
2698 W !,"LOCKING ZERO NODE"
2699"RTN","C0XTEST",85,0)
2700 LOCK +^C0X(101,0)
2701"RTN","C0XTEST",86,0)
2702 S ZP3=$P(^C0X(101,0),U,3)
2703"RTN","C0XTEST",87,0)
2704 S ZP4=$P(^C0X(101,0),U,4)
2705"RTN","C0XTEST",88,0)
2706 S $P(^C0X(101,0),U,3)=ZP3+ZCNT+1
2707"RTN","C0XTEST",89,0)
2708 S $P(^C0X(101,0),U,4)=ZP4+ZCNT+1
2709"RTN","C0XTEST",90,0)
2710 LOCK -^C0X(101,0)
2711"RTN","C0XTEST",91,0)
2712 N ZI,ZN,ZG,ZS,ZP,ZO,ZIEN,ZBASE
2713"RTN","C0XTEST",92,0)
2714 S ZBASE=ZP3 ; the last ien in the file
2715"RTN","C0XTEST",93,0)
2716 W !,"ZERO NODE UNLOCKED, IENS RESERVED=",ZCNT
2717"RTN","C0XTEST",94,0)
2718 W !,$$NOW^XLFDT
2719"RTN","C0XTEST",95,0)
2720 S ZI=""
2721"RTN","C0XTEST",96,0)
2722 F S ZI=$O(ZBFDA(172.101,ZI)) Q:ZI="" D ;
2723"RTN","C0XTEST",97,0)
2724 . S ZN=$G(ZBFDA(172.101,ZI,.01)) ; node name
2725"RTN","C0XTEST",98,0)
2726 . I ZN="" D BLKERR Q ;
2727"RTN","C0XTEST",99,0)
2728 . S ZG=$G(ZBFDA(172.101,ZI,.02)) ; graph pointer
2729"RTN","C0XTEST",100,0)
2730 . I ZG="" D BLKERR Q ;
2731"RTN","C0XTEST",101,0)
2732 . S ZS=$G(ZBFDA(172.101,ZI,.03)) ; subject pointer
2733"RTN","C0XTEST",102,0)
2734 . I ZS="" D BLKERR Q ;
2735"RTN","C0XTEST",103,0)
2736 . S ZP=$G(ZBFDA(172.101,ZI,.04)) ; predicate pointer
2737"RTN","C0XTEST",104,0)
2738 . I ZP="" D BLKERR Q ;
2739"RTN","C0XTEST",105,0)
2740 . S ZO=$G(ZBFDA(172.101,ZI,.05)) ; object pointer
2741"RTN","C0XTEST",106,0)
2742 . I ZO="" D BLKERR Q ;
2743"RTN","C0XTEST",107,0)
2744 . S ZIEN=ZI+ZBASE ; the new ien
2745"RTN","C0XTEST",108,0)
2746 . S ^C0X(101,ZIEN,0)=ZN_U_ZG_U_ZS_U_ZP_U_ZO ; set the zero node
2747"RTN","C0XTEST",109,0)
2748 . S ^C0X(101,"B",ZN,ZIEN)="" ; the B index
2749"RTN","C0XTEST",110,0)
2750 . S ^C0X(101,"G",ZG,ZIEN)="" ; the G for Graph index
2751"RTN","C0XTEST",111,0)
2752 . S ^C0X(101,"SPO",ZS,ZP,ZO)=""
2753"RTN","C0XTEST",112,0)
2754 . S ^C0X(101,"SOP",ZS,ZO,ZP)=""
2755"RTN","C0XTEST",113,0)
2756 . S ^C0X(101,"OPS",ZO,ZP,ZS)=""
2757"RTN","C0XTEST",114,0)
2758 . S ^C0X(101,"OSP",ZO,ZS,ZP)=""
2759"RTN","C0XTEST",115,0)
2760 . S ^C0X(101,"GOPS",ZG,ZO,ZP,ZS)=""
2761"RTN","C0XTEST",116,0)
2762 . S ^C0X(101,"GOSP",ZG,ZO,ZS,ZP)=""
2763"RTN","C0XTEST",117,0)
2764 . S ^C0X(101,"GPSO",ZG,ZP,ZS,ZO)=""
2765"RTN","C0XTEST",118,0)
2766 . S ^C0X(101,"GSPO",ZG,ZS,ZP,ZO)=""
2767"RTN","C0XTEST",119,0)
2768 Q
2769"RTN","C0XTEST",120,0)
2770 ;
2771"RTN","C0XTEST",121,0)
2772BLKERR ;
2773"RTN","C0XTEST",122,0)
2774 W !,"ERROR IN BULK LOAD",! ZWR ZBFDA(ZI)
2775"RTN","C0XTEST",123,0)
2776 B
2777"RTN","C0XTEST",124,0)
2778 Q
2779"RTN","C0XTEST",125,0)
2780 ;
2781"SEC","^DIC",172.101,172.101,0,"AUDIT")
2782@
2783"SEC","^DIC",172.101,172.101,0,"DD")
2784@
2785"SEC","^DIC",172.101,172.101,0,"DEL")
2786@
2787"SEC","^DIC",172.101,172.101,0,"LAYGO")
2788@
2789"SEC","^DIC",172.101,172.101,0,"RD")
2790@
2791"SEC","^DIC",172.101,172.101,0,"WR")
2792@
2793"SEC","^DIC",172.201,172.201,0,"AUDIT")
2794@
2795"SEC","^DIC",172.201,172.201,0,"DD")
2796@
2797"SEC","^DIC",172.201,172.201,0,"DEL")
2798@
2799"SEC","^DIC",172.201,172.201,0,"LAYGO")
2800@
2801"SEC","^DIC",172.201,172.201,0,"RD")
2802@
2803"SEC","^DIC",172.201,172.201,0,"WR")
2804@
2805"VER")
28068.0^22.0
2807"^DD",172.101,172.101,0)
2808FIELD^^.05^5
2809"^DD",172.101,172.101,0,"DDA")
2810N
2811"^DD",172.101,172.101,0,"DT")
28123111013
2813"^DD",172.101,172.101,0,"ID",.02)
2814S %I=Y,Y=$S('$D(^(0)):"",$D(^C0X(201,+$P(^(0),U,2),0))#2:$P(^(0),U,1),1:""),C=$P(^DD(172.201,.01,0),U,2) D Y^DIQ:Y]"" W " ",Y,@("$E("_DIC_"%I,0),0)") S Y=%I K %I
2815"^DD",172.101,172.101,0,"ID",.03)
2816S %I=Y,Y=$S('$D(^(0)):"",$D(^C0X(201,+$P(^(0),U,3),0))#2:$P(^(0),U,1),1:""),C=$P(^DD(172.201,.01,0),U,2) D Y^DIQ:Y]"" W " ",Y,@("$E("_DIC_"%I,0),0)") S Y=%I K %I
2817"^DD",172.101,172.101,0,"ID",.04)
2818S %I=Y,Y=$S('$D(^(0)):"",$D(^C0X(201,+$P(^(0),U,4),0))#2:$P(^(0),U,1),1:""),C=$P(^DD(172.201,.01,0),U,2) D Y^DIQ:Y]"" W " ",Y,@("$E("_DIC_"%I,0),0)") S Y=%I K %I
2819"^DD",172.101,172.101,0,"ID",.05)
2820S %I=Y,Y=$S('$D(^(0)):"",$D(^C0X(201,+$P(^(0),U,5),0))#2:$P(^(0),U,1),1:""),C=$P(^DD(172.201,.01,0),U,2) D Y^DIQ:Y]"" W " ",Y,@("$E("_DIC_"%I,0),0)") S Y=%I K %I
2821"^DD",172.101,172.101,0,"IX","B",172.101,.01)
2822
2823"^DD",172.101,172.101,0,"NM","C0X TRIPLE")
2824
2825"^DD",172.101,172.101,.01,0)
2826NODEID^RF^^0;1^K:$L(X)>30!($L(X)<3)!'(X'?1P.E) X
2827"^DD",172.101,172.101,.01,.1)
2828TRIPLE NODE ID
2829"^DD",172.101,172.101,.01,1,0)
2830^.1
2831"^DD",172.101,172.101,.01,1,1,0)
2832172.101^B
2833"^DD",172.101,172.101,.01,1,1,1)
2834S ^C0X(101,"B",$E(X,1,30),DA)=""
2835"^DD",172.101,172.101,.01,1,1,2)
2836K ^C0X(101,"B",$E(X,1,30),DA)
2837"^DD",172.101,172.101,.01,3)
2838Answer must be 3-30 characters in length
2839"^DD",172.101,172.101,.01,"DT")
28403111013
2841"^DD",172.101,172.101,.02,0)
2842GRAPH^P172.201^C0X(201,^0;2^Q
2843"^DD",172.101,172.101,.02,.1)
2844TRIPLE GRAPH
2845"^DD",172.101,172.101,.02,3)
2846Answer must be 3-240 characters in length
2847"^DD",172.101,172.101,.02,"DT")
28483111030
2849"^DD",172.101,172.101,.03,0)
2850SUBJECT^P172.201^C0X(201,^0;3^Q
2851"^DD",172.101,172.101,.03,.1)
2852TRIPLE SUBJECT
2853"^DD",172.101,172.101,.03,"DT")
28543111030
2855"^DD",172.101,172.101,.04,0)
2856PREDICATE^P172.201^C0X(201,^0;4^Q
2857"^DD",172.101,172.101,.04,.1)
2858TRIPLE PREDICATE
2859"^DD",172.101,172.101,.04,"DT")
28603111030
2861"^DD",172.101,172.101,.05,0)
2862OBJECT^P172.201^C0X(201,^0;5^Q
2863"^DD",172.101,172.101,.05,.1)
2864TRIPLE OBJECT
2865"^DD",172.101,172.101,.05,"DT")
28663111030
2867"^DD",172.201,172.201,0)
2868FIELD^^1^2
2869"^DD",172.201,172.201,0,"DDA")
2870N
2871"^DD",172.201,172.201,0,"DT")
28723111013
2873"^DD",172.201,172.201,0,"NM","C0X STRING")
2874
2875"^DD",172.201,172.201,0,"PT",172.101,.02)
2876
2877"^DD",172.201,172.201,0,"PT",172.101,.03)
2878
2879"^DD",172.201,172.201,0,"PT",172.101,.04)
2880
2881"^DD",172.201,172.201,0,"PT",172.101,.05)
2882
2883"^DD",172.201,172.201,.01,0)
2884STRING^RF^^0;1^K:$L(X)>240!($L(X)<1)!'(X=X) X
2885"^DD",172.201,172.201,.01,.1)
2886TRIPLE STRING
2887"^DD",172.201,172.201,.01,1,0)
2888^.1^^0
2889"^DD",172.201,172.201,.01,3)
2890Answer must be 1-240 characters in length
2891"^DD",172.201,172.201,.01,"DT")
28923111028
2893"^DD",172.201,172.201,1,0)
2894TEXT^172.2011^^1;0
2895"^DD",172.201,172.2011,0)
2896TEXT SUB-FIELD^^.01^1
2897"^DD",172.201,172.2011,0,"DT")
28983111013
2899"^DD",172.201,172.2011,0,"NM","TEXT")
2900
2901"^DD",172.201,172.2011,0,"UP")
2902172.201
2903"^DD",172.201,172.2011,.01,0)
2904TEXT^Wx^^0;1
2905"^DD",172.201,172.2011,.01,.1)
2906LONGER TEXT
2907"^DD",172.201,172.2011,.01,"DT")
29083111013
2909"^DIC",172.101,172.101,0)
2910C0X TRIPLE^172.101
2911"^DIC",172.101,172.101,0,"GL")
2912^C0X(101,
2913"^DIC",172.101,"B","C0X TRIPLE",172.101)
2914
2915"^DIC",172.201,172.201,0)
2916C0X STRING^172.201
2917"^DIC",172.201,172.201,0,"GL")
2918^C0X(201,
2919"^DIC",172.201,"B","C0X STRING",172.201)
2920
2921**END**
2922**END**
Note: See TracBrowser for help on using the repository browser.