Пример #1
0
 def test_ncname(self):
     self.assertEqual('A123', NCName('A123'))
     x = NCName('A1.B_C-')
     self.assertEqual('A1.B_C-', x)
     self.assertIsInstance(x, str)
     self.assertIsInstance(x, NCName)
     self.assertEqual(x, NCName(x))
     x = str(x)
     self.assertIsInstance(x, str)
     self.assertFalse(isinstance(x, NCName))
     with self.assertRaises(ValueError):
         NCName('1')
     with self.assertRaises(ValueError):
         NCName('A12!')
Пример #2
0
 def _fix_elements(self):
     super()._fix_elements()
     self.id_prefixes = [
         v if isinstance(v, NCName) else NCName(v) for v in self.id_prefixes
     ]
     if not isinstance(self.name, ElementName):
         self.name = ElementName(self.name)
     for k, v in self.local_names.items():
         if not isinstance(v, LocalName):
             self.local_names[k] = LocalName(k, v)
     self.mappings = [
         v if isinstance(v, URIorCURIE) else URIorCURIE(v)
         for v in self.mappings
     ]
     for k, v in self.alt_descriptions.items():
         if not isinstance(v, AltDescription):
             self.alt_descriptions[k] = AltDescription(k, v)
     self.examples = [
         v if isinstance(v, Example) else Example(**v)
         for v in self.examples
     ]
     self.in_subset = [
         v
         if isinstance(v, SubsetDefinitionName) else SubsetDefinitionName(v)
         for v in self.in_subset
     ]
     if self.from_schema is not None and not isinstance(
             self.from_schema, URI):
         self.from_schema = URI(self.from_schema)
     self.see_also = [
         v if isinstance(v, URIorCURIE) else URIorCURIE(v)
         for v in self.see_also
     ]
Пример #3
0
 def __setitem__(self, key, value):
     k = NCName(key)
     v = Namespace(str(value))
     if k in self:
         if self[k] != v:
             raise ValueError(f"Namespace {k} is already mapped to {self[k]}")
     else:
         super().__setitem__(k, v)
Пример #4
0
 def __post_init__(self, **kwargs: Dict[str, Any]):
     self.id_prefixes = [
         v if isinstance(v, NCName) else NCName(v) for v in self.id_prefixes
     ]
     if self.name is None:
         raise ValueError(f"name must be supplied")
     if not isinstance(self.name, ElementName):
         self.name = ElementName(self.name)
     if self.definition_uri is not None and not isinstance(
             self.definition_uri, URIorCURIE):
         self.definition_uri = URIorCURIE(self.definition_uri)
     for k, v in self.local_names.items():
         if not isinstance(v, LocalName):
             self.local_names[k] = LocalName(k, v)
     self.mappings = [
         v if isinstance(v, URIorCURIE) else URIorCURIE(v)
         for v in self.mappings
     ]
     for k, v in self.alt_descriptions.items():
         if not isinstance(v, AltDescription):
             self.alt_descriptions[k] = AltDescription(k, v)
     self.examples = [
         v if isinstance(v, Example) else Example(**v)
         for v in self.examples
     ]
     self.in_subset = [
         v
         if isinstance(v, SubsetDefinitionName) else SubsetDefinitionName(v)
         for v in self.in_subset
     ]
     if self.from_schema is not None and not isinstance(
             self.from_schema, URI):
         self.from_schema = URI(self.from_schema)
     self.see_also = [
         v if isinstance(v, URIorCURIE) else URIorCURIE(v)
         for v in self.see_also
     ]
     self.exact_mappings = [
         v if isinstance(v, URIorCURIE) else URIorCURIE(v)
         for v in self.exact_mappings
     ]
     self.close_mappings = [
         v if isinstance(v, URIorCURIE) else URIorCURIE(v)
         for v in self.close_mappings
     ]
     self.related_mappings = [
         v if isinstance(v, URIorCURIE) else URIorCURIE(v)
         for v in self.related_mappings
     ]
     if self.deprecated_element_has_exact_replacement is not None and not isinstance(
             self.deprecated_element_has_exact_replacement, URIorCURIE):
         self.deprecated_element_has_exact_replacement = URIorCURIE(
             self.deprecated_element_has_exact_replacement)
     if self.deprecated_element_has_possible_replacement is not None and not isinstance(
             self.deprecated_element_has_possible_replacement, URIorCURIE):
         self.deprecated_element_has_possible_replacement = URIorCURIE(
             self.deprecated_element_has_possible_replacement)
     super().__post_init__(**kwargs)
Пример #5
0
 def __post_init__(self, **kwargs: Dict[str, Any]):
     if self.id is None:
         raise ValueError(f"id must be supplied")
     if not isinstance(self.id, C1Id):
         self.id = C1Id(self.id)
     if self.hasCurie is not None and not isinstance(self.hasCurie, Curie):
         self.hasCurie = Curie(self.hasCurie)
     if self.hasURI is not None and not isinstance(self.hasURI, URI):
         self.hasURI = URI(self.hasURI)
     if self.hasNcName is not None and not isinstance(
             self.hasNcName, NCName):
         self.hasNcName = NCName(self.hasNcName)
     if self.id2 is not None and not isinstance(self.id2, NodeIdentifier):
         self.id2 = NodeIdentifier(self.id2)
     super().__post_init__(**kwargs)
Пример #6
0
 def __post_init__(self, **kwargs: Dict[str, Any]):
     if self.default_prefix is None:
         self.default_prefix = sfx(str(self.id))
     if self.name is None:
         raise ValueError(f"name must be supplied")
     if not isinstance(self.name, SchemaDefinitionName):
         self.name = SchemaDefinitionName(self.name)
     if self.id is None:
         raise ValueError(f"id must be supplied")
     if not isinstance(self.id, URI):
         self.id = URI(self.id)
     self.imports = [
         v if isinstance(v, URIorCURIE) else URIorCURIE(v)
         for v in self.imports
     ]
     for k, v in self.prefixes.items():
         if not isinstance(v, Prefix):
             self.prefixes[k] = Prefix(k, v)
     self.emit_prefixes = [
         v if isinstance(v, NCName) else NCName(v)
         for v in self.emit_prefixes
     ]
     if self.default_range is not None and not isinstance(
             self.default_range, TypeDefinitionName):
         self.default_range = TypeDefinitionName(self.default_range)
     for k, v in self.subsets.items():
         if not isinstance(v, SubsetDefinition):
             self.subsets[k] = SubsetDefinition(name=k,
                                                **({} if v is None else v))
     for k, v in self.types.items():
         if not isinstance(v, TypeDefinition):
             self.types[k] = TypeDefinition(name=k,
                                            **({} if v is None else v))
     for k, v in self.slots.items():
         if not isinstance(v, SlotDefinition):
             self.slots[k] = SlotDefinition(name=k,
                                            **({} if v is None else v))
     for k, v in self.classes.items():
         if not isinstance(v, ClassDefinition):
             self.classes[k] = ClassDefinition(name=k,
                                               **({} if v is None else v))
     if self.source_file_date is not None and not isinstance(
             self.source_file_date, XSDDateTime):
         self.source_file_date = XSDDateTime(self.source_file_date)
     if self.generation_date is not None and not isinstance(
             self.generation_date, XSDDateTime):
         self.generation_date = XSDDateTime(self.generation_date)
     super().__post_init__(**kwargs)
Пример #7
0
    def add_prefixmap(self, map_name: str, include_defaults: bool= True) -> None:
        """
        Add a prefixcommons map.  Only prefixes that have not been previously defined are added.

        :param map_name: prefixcommons map name
        :param include_defaults: if True, take defaults from the map.
        :return:
        """
        for k, v in curie_util.read_biocontext(map_name).items():
            if not k:
                if include_defaults and not self._default:
                    self._default = v
            elif k not in self:
                if NCName.is_valid(k):
                    self[k] = v
                else:
                    print(f"Warning: biocontext map {map_name} has illegal prefix: {k}", file=sys.stderr)
Пример #8
0
 def _fix_elements(self):
     super()._fix_elements()
     if self.name is not None and not isinstance(self.name,
                                                 SchemaDefinitionName):
         self.name = SchemaDefinitionName(self.name)
     if self.id is not None and not isinstance(self.id, URI):
         self.id = URI(self.id)
     self.imports = [
         v if isinstance(v, URI) else URI(v) for v in self.imports
     ]
     for k, v in self.prefixes.items():
         if not isinstance(v, Prefix):
             self.prefixes[k] = Prefix(k, v)
     self.emit_prefixes = [
         v if isinstance(v, NCName) else NCName(v)
         for v in self.emit_prefixes
     ]
     if self.default_range is not None and not isinstance(
             self.default_range, DefinitionName):
         self.default_range = DefinitionName(self.default_range)
     for k, v in self.subsets.items():
         if not isinstance(v, SubsetDefinition):
             self.subsets[k] = SubsetDefinition(name=k,
                                                **({} if v is None else v))
     for k, v in self.types.items():
         if not isinstance(v, TypeDefinition):
             self.types[k] = TypeDefinition(name=k,
                                            **({} if v is None else v))
     for k, v in self.slots.items():
         if not isinstance(v, SlotDefinition):
             self.slots[k] = SlotDefinition(name=k,
                                            **({} if v is None else v))
     for k, v in self.classes.items():
         if not isinstance(v, ClassDefinition):
             self.classes[k] = ClassDefinition(name=k,
                                               **({} if v is None else v))
     if self.source_file_date is not None and not isinstance(
             self.source_file_date, XSDDate):
         self.source_file_date = XSDDate(self.source_file_date)
     if self.generation_date is not None and not isinstance(
             self.generation_date, XSDDate):
         self.generation_date = XSDDate(self.generation_date)
Пример #9
0
    def uri_for(self, uri_or_curie: Any) -> URIRef:
        """
        Map a curie or URI into a full URIRef.

        :param uri_or_curie: "NCNAME ':' suffix" or plain URI
        :return: Corresponding URI
        """
        uri_or_curie = str(uri_or_curie)
        if '://' in uri_or_curie:
            return URIRef(uri_or_curie)
        if ':' in uri_or_curie:
            prefix, local = str(uri_or_curie).split(':', 1)
            if not prefix:
                prefix = self._default_key
            elif not NCName.is_valid(prefix):
                raise ValueError(f"Not a valid CURIE: {uri_or_curie}")
        else:
            prefix, local = self._base_key, uri_or_curie

        if prefix not in self:
            raise ValueError(f"Unknown CURIE prefix: {prefix}")
        return URIRef(self.join(self[prefix], local))