def add_shex(self, schema: str) -> "PrefixLibrary": """ Add a ShExC schema to the library :param schema: ShExC schema text, URL or file name :return: prefix library object """ if '\n' in schema or '\r' in schema or ' ' in schema: shex = schema else: shex = load_shex_file(schema) for line in shex.split('\n'): line = line.strip() m = re.match(r'PREFIX\s+(\S+):\s+<(\S+)>', line) if not m: m = re.match(r"@prefix\s+(\S+):\s+<(\S+)>\s+\.", line) if m: setattr(self, m.group(1).upper(), Namespace(m.group(2))) return self
def load(self, schema_file: Union[str, TextIO], schema_location: Optional[str] = None) -> ShExJ.Schema: """ Load a ShEx Schema from schema_location :param schema_file: name or file-like object to deserialize :param schema_location: URL or file name of schema. Used to create the base_location :return: ShEx Schema represented by schema_location """ if isinstance(schema_file, str): schema_file = self.location_rewrite(schema_file) self.schema_text = load_shex_file(schema_file) else: self.schema_text = schema_file.read() if self.base_location: self.root_location = self.base_location elif schema_location: self.root_location = os.path.dirname(schema_location) + '/' else: self.root_location = None return self.loads(self.schema_text)