source: TI05-delivery/ows_framework/branches/ows_framework-refactor/ows_common/ows_common/xml/iso19115_subset.py @ 3553

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI05-delivery/ows_framework/branches/ows_framework-refactor/ows_common/ows_common/xml/iso19115_subset.py@3553
Revision 3553, 3.0 KB checked in by spascoe, 12 years ago (diff)

Moved all the model classes into their own sub-module.

Line 
1# Copyright (C) 2007 STFC & NERC (Science and Technology Facilities Council).
2# This software may be distributed under the terms of the
3# Q Public License, version 1.0 or later.
4# http://ndg.nerc.ac.uk/public_docs/QPublic_license.txt
5"""
6Reads XML fragments from the OWS ISO19115 subset package v1.1.0 and
7creates ows_common objects.
8
9Each function expects an ElementTree node as it's first argument and returns
10an ows_common object.
11
12@author: Stephen Pascoe
13"""
14
15from ows_common.xml import ns
16from ows_common.xml.util import *
17from ows_common.model.iso19115_subset import *
18
19
20def language_string(node):
21    try:
22        lang = node.attrib['{%s}lang' % ns.xml]
23    except KeyError:
24        return node.text
25
26    return LanguageString(node.text, lang)
27
28def keywords(node):
29    type_n = node.find('./{%s}Type' % ns.ows)
30    if type_n is None:
31        kl = []
32    else:
33        kl = Keywords([], code(type_n))
34
35    for k_n in node.findall('./{%s}Keyword' % ns.ows):
36        kl.append(language_string(k_n))
37
38    return kl
39
40def code(node):
41    try:
42        codeSpace = node.attrib['{%s}codeSpace' % ns.ows]
43    except KeyError:
44        return node.text
45
46    return Code(node.text, codeSpace)
47   
48def xlink(node):
49    xl = Xlink(node.attrib['{%s}href'%ns.xlink])
50
51    for a in ['role', 'show', 'title', 'actuate', 'arcrole']:
52        setattr(xl, a, node.attrib.get('{%s}%s' % (ns.xlink, a)))
53
54    return xl
55
56def online_resource(node):
57    return xlink(node)
58
59def responsible_party(node):
60    rp = ResponsibleParty(
61        individualName=find_text(node, './{%s}IndividualName' % ns.ows),
62        positionName=find_text(node, './{%s}PositionName' % ns.ows),
63        role=find_with(node, './{%s}Role' % ns.ows, code),
64        contactInfo=find_with(node, './{%s}ContactInfo' % ns.ows, contact)
65        )
66    return rp
67
68def contact(node):
69    ci = Contact(
70        hoursOfService=find_text(node, './{%s}HoursOfService' % ns.ows),
71        contactInstructions=find_text(node, './{%s}ContactInstructions'
72                                       % ns.ows),
73        address=find_with(node, './{%s}Address' % ns.ows, address),
74        phone=find_with(node, './{%s}Phone' % ns.ows, telephone),
75        onlineResource=find_with(node, './{%s}OnlineResource' % ns.ows,
76                                  online_resource)
77        )
78    return ci
79
80def address(node):
81    a = Address(
82        deliveryPoints=findall_text(node, './{%s}DeliveryPoint' % ns.ows),
83        city=find_text(node, './{%s}City' % ns.ows),
84        administrativeArea=find_text(node, './{%s}AdministrativeArea'
85                                      % ns.ows),
86        postalCode=find_text(node, './{%s}PostalCode' % ns.ows),
87        country=find_text(node, './{%s}Country' % ns.ows),
88        electronicMailAddress=find_text(node, './{%s}ElectronicMailAddress'
89                                         % ns.ows)
90        )
91    return a
92
93def telephone(node):
94    t = Telephone(
95        voice=find_text(node, './{%s}Voice' % ns.ows),
96        facsimile=find_text(node, './{%s}Facsimile' % ns.ows)
97        )
98    return t
Note: See TracBrowser for help on using the repository browser.