def fromJsonObj(cls, con: Connection, context: Context, json_obj: Any) -> Any: if isinstance(json_obj, list): json_obj = json_obj[ 0] # TODO: Is it possible to have more than one element in the list?? if not isinstance(con, Connection): raise BaseError( '"con"-parameter must be an instance of Connection') if not isinstance(context, Context): raise BaseError( '"context"-parameter must be an instance of Context') rdf = context.prefixFromIri( "http://www.w3.org/1999/02/22-rdf-syntax-ns#") rdfs = context.prefixFromIri("http://www.w3.org/2000/01/rdf-schema#") owl = context.prefixFromIri("http://www.w3.org/2002/07/owl#") xsd = context.prefixFromIri("http://www.w3.org/2001/XMLSchema#") knora_api = context.prefixFromIri( "http://api.knora.org/ontology/knora-api/v2#") salsah_gui = context.prefixFromIri( "http://api.knora.org/ontology/salsah-gui/v2#") if not (json_obj.get(knora_api + ':isResourceClass') or json_obj.get(knora_api + ':isStandoffClass')): raise BaseError("This is not a resource!") if json_obj.get('@id') is None: raise BaseError('Resource class has no "@id"!') tmp_id = json_obj.get('@id').split(':') id = context.iriFromPrefix(tmp_id[0]) + '#' + tmp_id[1] ontology_id = tmp_id[0] name = tmp_id[1] superclasses_obj = json_obj.get(rdfs + ':subClassOf') if superclasses_obj is not None: supercls: List[Any] = list( filter(lambda a: a.get('@id') is not None, superclasses_obj)) superclasses: List[str] = list(map(lambda a: a['@id'], supercls)) has_props: List[Any] = list( filter(lambda a: a.get('@type') == (owl + ':Restriction'), superclasses_obj)) has_properties: Dict[HasProperty] = dict( map(lambda a: HasProperty.fromJsonObj(con, context, a), has_props)) else: superclasses = None has_properties = None label = LangString.fromJsonLdObj(json_obj.get(rdfs + ':label')) comment = LangString.fromJsonLdObj(json_obj.get(rdfs + ':comment')) return cls(con=con, context=context, name=name, id=id, ontology_id=ontology_id, superclasses=superclasses, label=label, comment=comment, has_properties=has_properties)
def fromJsonObj(cls, con: Connection, context: Context, json_obj: Any) -> Any: if isinstance(json_obj, list): json_obj = json_obj[ 0] # TODO: Is it possible to have more than one element in the list?? if not isinstance(con, Connection): raise BaseError( '"con"-parameter must be an instance of Connection') if not isinstance(context, Context): raise BaseError( '"context"-parameter must be an instance of Context') rdf = context.prefixFromIri( "http://www.w3.org/1999/02/22-rdf-syntax-ns#") rdfs = context.prefixFromIri("http://www.w3.org/2000/01/rdf-schema#") owl = context.prefixFromIri("http://www.w3.org/2002/07/owl#") xsd = context.prefixFromIri("http://www.w3.org/2001/XMLSchema#") knora_api = context.prefixFromIri( "http://api.knora.org/ontology/knora-api/v2#") salsah_gui = context.prefixFromIri( "http://api.knora.org/ontology/salsah-gui/v2#") if not (json_obj.get(knora_api + ':isResourceProperty')): raise BaseError("This is not a property!") if json_obj.get('@id') is None: raise BaseError('Property class has no "@id"!') tmp_id = json_obj.get('@id').split(':') id = context.iriFromPrefix(tmp_id[0]) + '#' + tmp_id[1] ontology_id = tmp_id[0] name = tmp_id[1] superproperties_obj = json_obj.get(rdfs + ':subPropertyOf') superproperties: List[Union[None, str]] if not isinstance(superproperties_obj, list): superproperties_obj = [superproperties_obj ] # make a list out of it if superproperties_obj is not None: superprops: List[Any] = list( filter(lambda a: a.get('@id') is not None, superproperties_obj)) superproperties = list(map(lambda a: a['@id'], superprops)) else: superproperties = None object = WithId(json_obj.get(knora_api + ':objectType')).str() subject = WithId(json_obj.get(knora_api + ':subjectType')).str() label = LangString.fromJsonLdObj(json_obj.get(rdfs + ':label')) comment = LangString.fromJsonLdObj(json_obj.get(rdfs + ':comment')) gui_element = None if json_obj.get(salsah_gui + ':guiElement') is not None: gui_element = WithId(json_obj.get(salsah_gui + ':guiElement')).str() gui_attributes_list = json_obj.get(salsah_gui + ':guiAttribute') gui_attributes: Union[None, Dict[str, str]] = None if gui_attributes_list is not None: gui_attributes = {} if not isinstance(gui_attributes_list, list): gui_attributes_list = [gui_attributes_list] for ga in gui_attributes_list: tmp = ga.split('=') if len(tmp) == 1: gui_attributes[tmp[0]] = '' else: gui_attributes[tmp[0]] = tmp[1] editable = json_obj.get(knora_api + ':isEditable') linkvalue = json_obj.get(knora_api + ':isLinkProperty') return cls(con=con, context=context, id=id, name=name, ontology_id=ontology_id, superproperties=superproperties, object=object, subject=subject, gui_element=gui_element, gui_attributes=gui_attributes, label=label, comment=comment, editable=editable, linkvalue=linkvalue)