def _count_num_items_in_filename(self, item, filename): schema = etree.XMLSchema(file=nrml_schema_file()) parser = etree.XMLParser(schema=schema) root = etree.parse(filename, parser=parser).getroot() exp = etree.XPath('count(//n:%s)' % item, namespaces={'n': NRML_NS}) num_items = exp(root) return num_items
def jvm(): """ Return the jpype module, after guaranteeing the JVM is running and the classpath has been loaded properly. """ jarpaths = (os.path.abspath( os.path.join(os.path.dirname(__file__), "../dist")), '/usr/share/java') if not jpype.isJVMStarted(): max_mem = get_jvm_max_mem() jpype.startJVM(jpype.getDefaultJVMPath(), "-Xmx%sM" % max_mem, "-Djava.ext.dirs=%s:%s" % jarpaths, # setting Schema path here is ugly, but it's better than # doing it before all XML parsing calls "-Dopenquake.nrml.schema=%s" % nrml_utils.nrml_schema_file(), # force the default Xerces parser configuration, otherwise # some random system-installed JAR might override it "-Dorg.apache.xerces.xni.parser.XMLParserConfiguration=" \ "org.apache.xerces.parsers.XIncludeAwareParserConfiguration") _init_logs() return jpype
def _get(self, filename, xpath): schema = etree.XMLSchema(file=nrml_schema_file()) parser = etree.XMLParser(schema=schema) tree = etree.parse(filename, parser=parser) return tree.getroot().find(xpath % {'ns': NRML_NS}).text
def _parse_bcr_map(self, filename): self.assertTrue(os.path.exists(filename)) schema = etree.XMLSchema(file=nrml_schema_file()) parser = etree.XMLParser(schema=schema) tree = etree.parse(filename, parser=parser) bcrnodes = tree.getroot().findall( '{%(ns)s}riskResult/{%(ns)s}benefitCostRatioMap/{%(ns)s}BCRNode' % {'ns': NRML} ) result = {} for bcrnode in bcrnodes: [site] = bcrnode.findall('{%s}site/{%s}Point/{%s}pos' % (NRML, GML, GML)) assets = {} valuenodes = bcrnode.findall('{%s}benefitCostRatioValue' % NRML) for valuenode in valuenodes: values = [] for tag in ('expectedAnnualLossOriginal', 'expectedAnnualLossRetrofitted', 'benefitCostRatio'): [node] = valuenode.findall('{%s}%s' % (NRML, tag)) values.append(float(node.text)) assets[valuenode.attrib['assetRef']] = tuple(values) result[tuple(map(float, site.text.split()))] = assets return result
def _do_parse(self): """parser implementation""" # The tags we expect to see: ffs_tag = '%sffs' % xml.NRML ffc_tag = '%sffc' % xml.NRML ffd_tag = '%sffd' % xml.NRML first_ffs = True schema = etree.XMLSchema(etree.parse(nrml_schema_file())) parse_args = dict(source=self.file, events=("end", ), schema=schema) for _, element in etree.iterparse(**parse_args): # start: fragility model if element.tag == ffs_tag: if first_ffs: # parse the "fragilityModel" element data only once self._parse_model(element.getparent()) first_ffs = False self.ffs = dict(type=None) self.ffs["type"] = element.get('type') taxonomy = element.find('%staxonomy' % xml.NRML) assert taxonomy is not None, "taxonomy not set" self.ffs["taxonomy"] = taxonomy.text.strip() tag, func = ((ffd_tag, self._parse_ffd) if self.discrete else (ffc_tag, self._parse_ffc)) for child in element.iterchildren(tag=tag): yield func(child)
def _get(self, filename, xpath): schema = etree.XMLSchema(file=nrml_schema_file()) parser = etree.XMLParser(schema=schema) tree = etree.parse(filename, parser=parser) return tree.find(xpath, namespaces={"nrml": NRML_NS}).text
def _do_parse(self): """parser implementation""" # The tags we expect to see: ffs_tag = '%sffs' % xml.NRML ffc_tag = '%sffc' % xml.NRML ffd_tag = '%sffd' % xml.NRML first_ffs = True schema = etree.XMLSchema(etree.parse(nrml_schema_file())) parse_args = dict(source=self.file, events=("end",), schema=schema) for _, element in etree.iterparse(**parse_args): # start: fragility model if element.tag == ffs_tag: if first_ffs: # parse the "fragilityModel" element data only once self._parse_model(element.getparent()) first_ffs = False self.ffs = dict(type=None) self.ffs["type"] = element.get('type') taxonomy = element.find('%staxonomy' % xml.NRML) assert taxonomy is not None, "taxonomy not set" self.ffs["taxonomy"] = taxonomy.text.strip() tag, func = ((ffd_tag, self._parse_ffd) if self.discrete else (ffc_tag, self._parse_ffc)) for child in element.iterchildren(tag=tag): yield func(child)
def get_xmlschema(cls): """ Create (if needed) and return ``etree.XMLSchema`` object for verifying nrml-files correctness. Once created schema object is cached in ``_xmlschema`` class attribute. """ if not cls._xmlschema: cls._xmlschema = etree.XMLSchema(file=nrml_schema_file()) return cls._xmlschema
def __init__(self, path): producer.FileProducer.__init__(self, path) nrml_schema = etree.XMLSchema(etree.parse(nrml_schema_file())) self.vuln_model = etree.parse(self.path).getroot() if not nrml_schema.validate(self.vuln_model): raise xml.XMLValidationError( nrml_schema.error_log.last_error, path) model_el = self.vuln_model.getchildren()[0] if model_el.tag != "%svulnerabilityModel" % NRML: raise xml.XMLMismatchError( path, 'vulnerabilityModel', str(model_el.tag)[len(NRML):])
def validates_against_xml_schema(xml_instance_path, schema_path=nrml_utils.nrml_schema_file()): """ Checks whether an XML file validates against an XML Schema :param xml_instance_path: XML document path :param schema_path: XML schema path :returns: boolean success value """ xml_doc = etree.parse(xml_instance_path) xmlschema = etree.XMLSchema(etree.parse(schema_path)) return xmlschema.validate(xml_doc)
def _do_parse(self): """_parse implementation""" nrml_schema = etree.XMLSchema(etree.parse(nrml_schema_file())) level = 0 for event, element in etree.iterparse(self.file, events=('start', 'end'), schema=nrml_schema): if event == 'start' and element.tag == \ '%sexposureList' % NRML: # we need to get the exposureList id, description and # asset category exp_id = element.get('%sid' % GML) self._current_meta['listID'] = str(exp_id) desc = element.find('%sdescription' % GML) if desc is not None: self._current_meta['listDescription'] = str(desc.text) taxsrc = element.find('%staxonomySource' % NRML) if taxsrc is not None: self._current_meta['taxonomySource'] = str(taxsrc.text) asset_category = str(element.get('assetCategory')) self._current_meta['assetCategory'] = asset_category # type and unit for area, contents cost, retrofitting cost # and structural cost. attrs = ("areaType", "areaUnit", "cocoType", "cocoUnit", "recoType", "recoUnit", "stcoType", "stcoUnit", "unitType") for attr_name in attrs: attr_value = element.get(attr_name) if attr_value is not None: self._current_meta[attr_name] = attr_value elif event == 'start' and level < 2: # check that the first child of the root element is an # exposure portfolio if level == 1 and element.tag != '%sexposureModel' % NRML: raise xml.XMLMismatchError(self.file.name, str(element.tag)[len(NRML):], 'exposureModel') level += 1 elif event == 'end' and element.tag == '%sassetDefinition' % NRML: site_data = (_to_site(element), _to_occupancy(element), self._to_site_attributes(element)) del element yield site_data
def _do_parse(self): """_parse implementation""" nrml_schema = etree.XMLSchema(etree.parse(nrml_schema_file())) level = 0 for event, element in etree.iterparse( self.file, events=('start', 'end'), schema=nrml_schema): if event == 'start' and element.tag == \ '%sexposureList' % NRML: # we need to get the exposureList id, description and # asset category exp_id = element.get('%sid' % GML) self._current_meta['listID'] = str(exp_id) desc = element.find('%sdescription' % GML) if desc is not None: self._current_meta['listDescription'] = str(desc.text) taxsrc = element.find('%staxonomySource' % NRML) if taxsrc is not None: self._current_meta['taxonomySource'] = str(taxsrc.text) asset_category = str(element.get('assetCategory')) self._current_meta['assetCategory'] = asset_category # type and unit for area, contents cost, retrofitting cost # and structural cost. attrs = ("areaType", "areaUnit", "cocoType", "cocoUnit", "recoType", "recoUnit", "stcoType", "stcoUnit", "unitType") for attr_name in attrs: attr_value = element.get(attr_name) if attr_value is not None: self._current_meta[attr_name] = attr_value elif event == 'start' and level < 2: # check that the first child of the root element is an # exposure portfolio if level == 1 and element.tag != '%sexposureModel' % NRML: raise xml.XMLMismatchError( self.file.name, str(element.tag)[len(NRML):], 'exposureModel') level += 1 elif event == 'end' and element.tag == '%sassetDefinition' % NRML: site_data = (_to_site(element), _to_occupancy(element), self._to_site_attributes(element)) del element yield site_data
def _root(self, filename): schema = etree.XMLSchema(file=nrml_schema_file()) parser = etree.XMLParser(schema=schema) return etree.parse(filename, parser=parser)
from openquake.kvs import tokens from openquake.nrml.utils import nrml_schema_file from tests.utils import helpers LOG = logs.LOG MEAN_GROUND_INTENSITY = ( '{"site":"+35.0000 +35.0000", "intensity": 1.9249e+00,' '"site":"+35.0500 +35.0000", "intensity": 1.9623e+00,' '"site":"+35.1000 +35.0000", "intensity": 2.0320e+00,' '"site":"+35.1500 +35.0000", "intensity": 2.0594e+00}') TEST_JOB_FILE = helpers.testdata_path('simplecase/config.gem') NRML_SCHEMA_PATH = nrml_schema_file() SIMPLE_FAULT_SRC_MODEL_LT = helpers.demo_file( 'simple_fault_demo_hazard/source_model_logic_tree.xml') SIMPLE_FAULT_GMPE_LT = helpers.demo_file( 'simple_fault_demo_hazard/gmpe_logic_tree.xml') SIMPLE_FAULT_BASE_PATH = os.path.abspath( helpers.demo_file('simple_fault_demo_hazard')) def get_pattern(regexp): """Get all the values whose keys satisfy the given regexp. Return an empty list if there are no keys satisfying the given regxep. """