def test_boundary_setter(self): vocab.add_linked_art_boundary_check() p = model.Person() p2 = model.Person() n = model.Name() n.content = "Test" p2.identified_by = n p.exact_match = p2 # Now, Test should not appear in the resulting JSON of p factory.linked_art_boundaries = True js = factory.toJSON(p) self.assertTrue(not 'identified_by' in js['exact_match'][0]) factory.linked_art_boundaries = False js = factory.toJSON(p) self.assertTrue('identified_by' in js['exact_match'][0])
def test_procurement_boundary(self): vocab.add_linked_art_boundary_check() a = model.Activity() p = vocab.ProvenanceEntry() a.caused = p js = factory.toJSON(a) self.assertTrue(not 'classified_as' in js['caused'][0])
def generate_example(self, egtext, resource): # Yes really... exec(egtext) # Now in scope should be a top resource factory.pipe_scoped_contexts = False factory.toFile(top, compact=False) factory.pipe_scoped_contexts = True jsstr = factory.toString(top, compact=False, collapse=80) factory.pipe_scoped_contexts = False js = factory.toJSON(top) # Generate all our serializations nq = to_rdf(js, {"format": "application/nquads"}) g = ConjunctiveGraph() for ns in ['crm', 'dc', 'schema', 'dcterms', 'skos', 'la']: g.bind(ns, ctxt[ns]) g.parse(data=nq, format="nt") out = g.serialize(format="turtle") fp = js['id'][len(factory.base_url):] fp2 = fp + ".ttl" fh = open(os.path.join(factory.base_dir, fp2), 'w') fh.write(out) fh.close() # And build mermaid description mermaid = self.build_mermaid(js) # Build index references self.traverse(js, top.id, resource) # And return the JSON plus links, to be substed by the top level filter raw = top.id + ".json" self.example_list.append(raw) rawq = urllib.quote(raw).replace('/', "%2F") playground = "http://json-ld.org/playground-dev/#startTab=tab-expanded©Context=true&json-ld=%s" % rawq turtle = top.id + ".ttl" turtle_play = "http://cdn.rawgit.com/niklasl/ldtr/v0.2.2/demo/?edit=true&url=%s" % turtle egid = fp.replace('/', '_') resp = """ <a id="%s"></a> ```json %s ``` <div class="mermaid"> %s </div> Other Representations: [JSON-LD (Raw)](%s) | [JSON-LD (Playground)](%s) | [Turtle (Raw)](%s) | [Turtle (Styled)](%s) """ % (egid, jsstr, mermaid, raw, playground, turtle, turtle_play) return resp
def test_destruction(self): expect = OrderedDict([('id', u'http://lod.example.org/museum/Activity/1'), ('type', ['Destruction', 'Activity']), ('_label', "Test Destruction")]) mi.DestructionActivity._okayToUse = 1 da = mi.DestructionActivity("1") da._label = "Test Destruction" factory.context_uri = "" dajs = factory.toJSON(da) self.assertEqual(dajs, expect)
def test_payment(self): factory.context_uri = "http://example.org/context.json", expect = OrderedDict([ ('@context', factory.context_uri), \ ('id', u'http://lod.example.org/museum/Payment/1'), ('type', 'Payment'), \ ('paid_to', 'http://lod.example.org/museum/Person/1')]) p = extra.Payment('1') who = Person('1') p.paid_to = who pjs = factory.toJSON(p) self.assertEqual(pjs, expect)
def test_linguistic_object_boundary(self): vocab.add_linked_art_boundary_check() jrnl = vocab.JournalText(label="journal") issue = vocab.IssueText(label="issue") issue.part_of = jrnl issue.referred_to_by = vocab.MaterialStatement(content="Statement") js = factory.toJSON(issue) # Have not embedded journal in issue self.assertTrue(not 'classified_as' in js['part_of'][0]) # Have embedded statement in issue self.assertTrue('content' in js['referred_to_by'][0]) self.assertTrue('type' in js['referred_to_by'][0]['classified_as'][0]['classified_as'][0])
def main(ID): data_folder = os.path.abspath('../GCI_API/data') f = open(os.path.join(data_folder, "ref_col.csv"), "r") r = csv.reader(f) next(r) #Skip header headers = [ "acq_by", "acq_from", "acq_date", "add_names", "avai_data", "cat", "certified", "chem_comp", "CAS", "chem_form", "chem_name", "coll_name", "color", "CI", "name", "comp_type", "contact", "email", "experiments", "fire", "formulation", "fbarcode", "geo_org", "grid_loc", "health", "manufacturer", "mass_vol", "mix_pigment", "mix_type", "MSDS", "nat_syn", "notes", "obarcode", "org_date", "other_safe", "part_coll", "phone", "phys_form", "prep", "reactivity", "samp_type", "typ_use", "warning", "borrower", "inv_status" ] for row in r: rec = dict(zip(headers, row)) # Testing first two rows if rec['fbarcode'] == ID: s = ManMadeObject(rec['fbarcode'], label=rec['name']) # Sample Identification/General Information s.identified_by = Barcode(label="Full Barcode", value=rec['fbarcode']) s.identified_by = Barcode(label="Old Barcode", value=rec['obarcode']) s.identified_by = PrimaryName(label="Common Name", value=rec['name']) s.identified_by = Name(label="Additional Names", value=rec['add_names']) # Sample Type if rec['samp_type']: try: s.classified_as = instances[rec['samp_type'].lower()] except: s.referred_to_by = Description(label="Sample Type", value=rec['samp_type']) # Typical use if rec['typ_use']: use = rec['typ_use'].split('/') for i in range(len(use)): try: s.as_general_use = instances[use[i].lower().strip()] except: s.referred_to_by = Description(label="Typical Use", value=use[i]) # Physical Form if rec['phys_form']: pf = rec['phys_form'].split() if len(pf) < 4: l = [] for i in range(len(pf)): try: s.classified_as = instances[pf[i].lower().replace( ',', '').strip()] except: l.append(pf[i]) l_join = " ".join(l) s.referred_to_by = Description(label="Physical Form", value=l_join) else: s.referred_to_by = Description(label="Physical Form", value=rec['phys_form']) # Color if rec['color']: try: s.classified_as = instances[rec['color'].lower()] except: s.referred_to_by = Description(label="Color", value=rec['color']) # Index (CI) Color # Natural/Synthetic if rec['nat_syn']: s.classified_as = instances[rec['nat_syn'].lower()] elif rec['nat_syn'] == "Unknown": s.classified_as = Type(label="Natural/Synthetic", value="Unknown") # Preparation : go to Production # Certified Standard # Grid Location: lab shelf/storage? loc = Place() if rec['grid_loc']: loc.identified_by = Identifier(label="Grid Location", value=rec['grid_loc']) s.current_location = loc # Chemical Information # Chemical Formula if rec['chem_form']: s.identified_by = Formula(value=rec['chem_form']) if rec['chem_name']: s.identified_by = Name(label="Chemical Name", value=rec['chem_name']) if rec['CAS']: s.identified_by = Identifier(label="Chemical (CAS) No.", value=rec['CAS']) if rec['comp_type']: comp_type = rec['comp_type'].lower() try: s.classified_as = instances[comp_type] except: s.classified_as = Type(label="Compound Type", value=rec['comp_type']) if rec['mix_type']: mix_type = rec['mix_type'].split('-') for i in mix_type: s.classified_as = instances[i.lower().strip()] # Acquisition Information acq = Acquisition() s.changed_ownership_through = acq acq.transferred_title_to = v.dept['GCI'] # Acquisition Date if rec['acq_date']: adate = rec['acq_date'] tspan = TimeSpan(label=adate) if len(adate) == 4: tspan.begin_of_the_begin = str( parse(adate + 'January', settings={'PREFER_DAY_OF_MONTH': 'first'})) tspan.end_of_the_end = str( parse(adate + 'January', settings={'PREFER_DAY_OF_MONTH': 'first'}) + timedelta(days=365)) elif 'ca.' in adate or 'Spring' in adate: y = adate.split()[1] tspan.begin_of_the_begin = str( parse(y + 'January', settings={'PREFER_DAY_OF_MONTH': 'first'})) tspan.end_of_the_end = str( parse(y + 'January', settings={'PREFER_DAY_OF_MONTH': 'first'}) + timedelta(days=365)) elif '-' in adate: y = adate.split('-') start_year = y[0].strip() end_year = y[1].strip() if len(start_year) == 4: tspan.begin_of_the_begin = str( parse(start_year + 'January', settings={'PREFER_DAY_OF_MONTH': 'first'})) tspan.end_of_the_end = str( parse(end_year + 'January', settings={'PREFER_DAY_OF_MONTH': 'first'}) + timedelta(days=365)) else: tspan.begin_of_the_begin = str( parse(adate, settings={'PREFER_DAY_OF_MONTH': 'first'})) tspan.end_of_the_end = str( parse(adate, settings={'PREFER_DAY_OF_MONTH': 'last'}) + timedelta(days=1)) else: tspan.begin_of_the_begin = str( parse(adate, settings={'PREFER_DAY_OF_MONTH': 'first'})) tspan.end_of_the_end = str( parse(adate, settings={'PREFER_DAY_OF_MONTH': 'last'}) + timedelta(days=1)) acq.timespan = tspan # Acquired by if rec['acq_by']: p = rec['acq_by'].split('-') pname = p[0].split() agent = " ".join(pname) dpt = p[-1] if agent in v.person: emp = v.person[agent] else: emp = Person(label=agent) acq.carried_out_by = emp if dpt in v.dept: emp.member_of = v.dept[dpt] # Part of Collection if rec['part_coll']: s.referred_to_by = LinguisticObject(label='Part of Collection', value=rec['part_coll']) # Acquired from, debating whether it should be Actor or Group, # so info of person in contact can be linked global seller if rec['acq_from']: if rec['acq_from'] in v.sellers: seller = v.sellers[rec['acq_from'].strip()] else: seller = Actor(label=rec['acq_from'].strip()) acq.transferred_title_from = seller # Collection Name if rec['coll_name']: coll = v.collection[rec['coll_name']] s.aggregated_by = coll coll_creation = Creation() coll.created_by = coll_creation coll_creation.carried_out_by = seller # Contact name if rec['contact']: if rec['contact'] in v.contact: contact_name = v.contact[rec['contact'].strip()] else: s.related_entity = contact_name # Email if rec['email']: contact_name.contact_point = EMail(label="E-Mail", value=rec['email']) # Phone number: could be either the number of the contact person, # or of the acquired_from # if rec['phone']: prod = Production() s.produced_by = prod # Preparation if rec['prep']: prep = SamplePreparation(value=rec['prep']) prod.technique = prep if rec['formulation']: prep.referred_to_by = Formulation(value=rec['formulation']) # Geographic Origin if rec['geo_org']: origin = Place(label="Geographic Origin") origin.identified_by = Name(value=rec['geo_org']) prod.took_place_at = origin # Manufacturer if rec['manufacturer']: if rec['manufacturer'] in v.manufacturers: mfr = v.manufacturers[rec['manufacturer']] elif rec['manufacturer'] in v.sellers: mfr = v.sellers[rec['manufacturer']] else: mfr = Group(label=rec['manufacturer']) prod.carried_out_by = mfr # Catalog No. if rec['cat']: s.identified_by = CatalogNumber(label="Catalog No.", value=rec['cat']) # Miscellaneous # Origination Date # if rec['org_date']: # odate = rec['org_date'] # t_span = TimeSpan(label=odate) # if len(adate) == 4: # t_span.begin_of_the_begin = str(parse(odate + 'January', settings={'PREFER_DAY_OF_MONTH': 'first'})) # t_span.end_of_the_end = str(parse(odate + 'January', settings={'PREFER_DAY_OF_MONTH': 'first'}) + timedelta(days=365)) # elif 'ca.' in adate or 'pre' in adate: # y = odate.split()[1] # t_span.begin_of_the_begin = str(parse(y + 'January', settings={'PREFER_DAY_OF_MONTH': 'first'})) # t_span.end_of_the_end = str(parse(y + 'January', settings={'PREFER_DAY_OF_MONTH': 'first'}) + timedelta(days=365)) # elif '-' in adate: # y = odate.split('-') # start_year = y[0].strip() # end_year = y[1].strip() # if len(start_year) == 4: # t_span.begin_of_the_begin = str(parse(start_year + 'January', settings={'PREFER_DAY_OF_MONTH': 'first'})) # t_span.end_of_the_end = str(parse(end_year + 'January', settings={'PREFER_DAY_OF_MONTH': 'first'}) + timedelta(days=365)) # else: # t_span.begin_of_the_begin = str(parse(odate, settings={'PREFER_DAY_OF_MONTH': 'first'})) # t_span.end_of_the_end = str(parse(odate, settings={'PREFER_DAY_OF_MONTH': 'last'}) + timedelta(days=1)) # else: # t_span.begin_of_the_begin = str(parse(odate, settings={'PREFER_DAY_OF_MONTH': 'first'})) # t_span.end_of_the_end = str(parse(odate, settings={'PREFER_DAY_OF_MONTH': 'last'}) + timedelta(days=1)) # acq.timespan = t_span # Mass or Volume if rec['mass_vol']: mv = rec['mass_vol'].replace('appx.', '').replace('approx.', '').split() if len(mv) == 2: dim = MassVolume(value=mv[0]) s.dimension = dim dim.unit = instances[mv[1].replace('.', '')] else: try: u = instances[(mv[1] + " " + mv[2]).replace('.', '')] dim = MassVolume(value=mv[0]) s.dimension = dim dim.unit = u except: s.referred_to_by = DimensionStatement( label="Mass or Volume", value=rec['mass_vol']) # Experiments on Sample if rec['experiments']: s.referred_to_by = Description(label="Experiments on Sample", value=rec['experiments']) # Notes if rec['notes']: s.referred_to_by = Notes(value=rec['notes']) # Available Data # MSDS & Safety # Safety: classified_as or referred_to_by properties if rec['fire']: s.classified_as = FireSafety(value=rec['fire']) if rec['health']: health_safe = Safety(label="Health Safety", value=rec['health']) s.classified_as = health_safe health_safe.classified_as = instances['health'] if rec['reactivity']: react_safe = Safety(label="Reactivity Safety", value=rec['reactivity']) s.classified_as = react_safe react_safe.classified_as = instances['reactivity'] if rec['other_safe']: other_safe = Safety(label="Other Safety", value=rec['other_safe']) s.classified_as = other_safe other_safe.classified_as = instances['other'] js = factory.toJSON(s) return js
def generate_example(self, egtext, resource): # Yes really... try: exec(egtext) except Exception as e: print(">>> In %s" % resource.relative_path) print("Caught Exception from example code at %s: %r" % (sys.exc_info()[2].tb_lineno, e)) print("Failed to execute example:\n%s" % h[1]) return "" try: # Now in scope should be a top resource factory.pipe_scoped_contexts = False factory.toFile(top, compact=False) js = factory.toJSON(top) factory.pipe_scoped_contexts = True jsstr = factory.toHtml(top) factory.pipe_scoped_contexts = False # Generate all our serializations nq = to_rdf(js, {"format": "application/nquads"}) g = ConjunctiveGraph() for ns in ['crm', 'dc', 'schema', 'dcterms', 'skos', 'la']: g.bind(ns, ctxt[ns]) g.parse(data=nq, format="nt") out = g.serialize(format="turtle") fp = js['id'][len(factory.base_url):] fp2 = fp + ".ttl" fh = open(os.path.join(factory.base_dir, fp2), 'w') fh.write(out) fh.close() except Exception as e: print(">>> In %s" % resource.relative_path) print("Caught Exception from serialization code at %s: %r" % (sys.exc_info()[2].tb_lineno, e)) print("Failed to execute example:\n%s" % h[1]) return "" try: # And build mermaid description mermaid = self.build_mermaid(js) # Build index references self.traverse(js, top.id, resource) except Exception as e: print(">>> In %s" % resource.relative_path) print("Caught Exception from mermaid/indexing code at %s: %r" % (sys.exc_info()[2].tb_lineno, e)) print("Failed to execute example:\n%s" % h[1]) return "" # And return the JSON plus links, to be substed by the top level filter raw = top.id jsuri = raw + ".json" self.example_list.append(raw) rawq = urllib.quote(raw).replace('/', "%2F") playground = "http://json-ld.org/playground-dev/#startTab=tab-expanded©Context=true&json-ld=%s" % rawq turtle = raw + ".ttl" turtle_play = "http://cdn.rawgit.com/niklasl/ldtr/v0.2.2/demo/?edit=true&url=%s" % turtle egid = fp.replace('/', '_') mmid = self.uri_to_label(raw) resp = """ <a id="%s"></a> <div class="jsonld"> %s <div> <div class="mermaid" id="mermaid_%s"> %s </div> <div id="mermaid_%s_svg"></div> Other Representations: [JSON-LD (Raw)](%s) | [JSON-LD (Playground)](%s) | [Turtle (Raw)](%s) | [Turtle (Styled)](%s) """ % (egid, jsstr, mmid, mermaid, mmid, raw, playground, turtle, turtle_play) return resp