Changeset 1147


Ignore:
Timestamp:
09/06/06 15:57:23 (13 years ago)
Author:
domlowe
Message:

Added CSML security metadata: example.xml contains sample csml security tags (same as MOLES). Parser now parses security elements. CSML Schema has been revised and will be committed separately.

Location:
TI02-CSML/trunk/parser
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • TI02-CSML/trunk/parser/Parser.py

    r1123 r1147  
    5151nsXLINK = 'http://www.w3.org/1999/xlink' 
    5252nsXML = 'http://ndg.nerc.ac.uk/csml' 
     53nsMOLES='http://ndg.nerc.ac.uk/moles' 
    5354 
    5455def myQName(uri,tag): 
     
    6970def OM(tag): 
    7071    return myQName(nsOM,tag) 
     72 
     73def MOLES(tag): 
     74    return myQName(nsMOLES,tag) 
    7175 
    7276def checkArrayAttrib(obj,attrib): 
     
    430434            elif frag.tag == GML('interval'): 
    431435                self.interval=frag.text 
    432                 self.unit = frag.attrib['units'] 
     436                self.unit = frag.attrib['unit'] 
    433437    def toXML(self,csmlFrag): 
    434438        Definition.toXML(self,csmlFrag) 
     
    441445            frag.text=self.interval 
    442446            if hasattr(self,'unit'): 
    443                 frag.attrib['units']=self.unit 
     447                frag.attrib['unit']=self.unit 
    444448            csmlFrag.append(frag) 
    445449        return csmlFrag 
     
    17141718     +recordNumber[0..1]: int 
    17151719     +fileOffset[0..1]: int 
     1720      
     1721     temporary addition of 'variableName' attribute 
    17161722    """ 
    1717     def __init__(self,parameterCode=None,recordNumber=None,fileOffset=None, *args,**kwargs): 
     1723    def __init__(self,parameterCode=None,recordNumber=None,fileOffset=None, variableName=None, *args,**kwargs): 
    17181724        AbstractFileExtract.__init__(self,*args,**kwargs) 
    17191725        if parameterCode: 
     
    17231729        if fileOffset: 
    17241730            self.fileOffset = fileOffset 
     1731        if variableName: 
     1732            self.variableName=variableName 
    17251733    def fromXML(self,csmlFrag): 
    17261734        AbstractFileExtract.fromXML(self,csmlFrag) 
     
    17321740            elif frag.tag == CSML('fileOffset'): 
    17331741                self.fileOffset = int(frag.text) 
     1742            elif frag.tag == CSML('variableName'): 
     1743                self.variableName = frag.text 
    17341744##            else: 
    17351745##                raise Exception('Unexpected element: "'+frag.tag+'"') 
     
    17471757            frag = Element(CSML('fileOffset')) 
    17481758            frag.text = str(self.fileOffset) 
     1759            csmlFrag.append(frag) 
     1760        if hasattr(self,'variableName'): 
     1761            frag = Element(CSML('variableName')) 
     1762            frag.text = self.variableName 
    17491763            csmlFrag.append(frag) 
    17501764        return csmlFrag 
     
    31603174        return csmlFrag 
    31613175 
     3176 
     3177class SimpleCondition: 
     3178        def __init__(self,dgAttributeAuthority=None,attrauthRole=None,*args,**kwargs): 
     3179            if dgAttributeAuthority: 
     3180                self.dgAttributeAuthority=dgAttributeAuthority 
     3181            if attrauthRole: 
     3182                self.attrauthRole=attrauthRole 
     3183        def fromXML(self,csmlFrag): 
     3184            for frag in csmlFrag.getchildren(): 
     3185                if frag.tag == MOLES('dgAttributeAuthority'): 
     3186                    self.dgAttributeAuthority=frag.text 
     3187                if frag.tag == MOLES('attrauthRole'): 
     3188                    self.attrauthRole=frag.text 
     3189        def toXML(self,csmlFrag): 
     3190            if hasattr(self,'dgAttributeAuthority'): 
     3191                frag=Element(MOLES('dgAttributeAuthority')) 
     3192                frag.text=self.dgAttributeAuthority 
     3193                csmlFrag.append(frag) 
     3194            if hasattr(self,'attrauthRole'): 
     3195                frag=Element(MOLES('attrauthRole')) 
     3196                frag.text=self.attrauthRole 
     3197                csmlFrag.append(frag) 
     3198            return csmlFrag 
     3199     
     3200class DGSecurityCondition: 
     3201        def __init__(self,effect=None,simpleCondition=None, complexCondition=None, conditionExplanationText=None,*args,**kwargs): 
     3202            if effect: 
     3203                self.effect=effect 
     3204            if simpleCondition: 
     3205                self.simpleCondition=simpleCondition 
     3206            if complexCondition: 
     3207                self.complexCondition=complexCondition 
     3208            if conditionExplanationText: 
     3209                self.conditionExplanationText=conditionExplanationText 
     3210        def fromXML(self,csmlFrag): 
     3211            for frag in csmlFrag.getchildren(): 
     3212                if frag.tag == MOLES('effect'): 
     3213                    self.effect=frag.text 
     3214                elif frag.tag == MOLES('conditionExplanationText'): 
     3215                    self.conditionExplanationText=frag.text 
     3216                elif frag.tag == MOLES('simpleCondition'): 
     3217                    simpleCondition=SimpleCondition() 
     3218                    simpleCondition.fromXML(frag) 
     3219                    self.simpleCondition=simpleCondition 
     3220        def toXML(self,csmlFrag): 
     3221            if hasattr(self,'effect'): 
     3222                frag=Element(MOLES('effect')) 
     3223                frag.text=self.effect 
     3224                csmlFrag.append(frag) 
     3225            if hasattr(self,'simpleCondition'): 
     3226                frag=Element(MOLES('simpleCondition')) 
     3227                frag = SimpleCondition.toXML(self.simpleCondition,frag) 
     3228                csmlFrag.append(frag) 
     3229            return csmlFrag 
     3230        
     3231class AccessControlPolicy: 
     3232        """ AccessControlPolicy class""" 
     3233        def __init__(self,dgSecurityConditions=None,accessControlPolicyText=None,accessControlPolicyURL=None,*args,**kwargs): 
     3234            if dgSecurityConditions: 
     3235                self.dgSecurityConditions=dgSecurityConditions 
     3236            if accessControlPolicyText: 
     3237                self.accessControlPolicyText= accessControlPolicyText 
     3238            if accessControlPolicyURL: 
     3239                self.accessControlPolicyURL= accessControlPolicyURL 
     3240        def fromXML(self,csmlFrag): 
     3241             
     3242#             for frag in csmlFrag.getchildren(): 
     3243#                 print frag.tag 
     3244#                 print MOLES('dgSecurityCondition') 
     3245#             #sys.exit() 
     3246            for frag in csmlFrag.getchildren(): 
     3247                if frag.tag == MOLES('dgSecurityCondition'): 
     3248                    checkArrayAttrib(self, 'dgSecurityConditions') 
     3249                    dgSecurityCondition=DGSecurityCondition() 
     3250                    dgSecurityCondition.fromXML(frag) 
     3251                    self.dgSecurityConditions.append(dgSecurityCondition) 
     3252                elif frag.tag == MOLES('accessControlPolicyText'): 
     3253                    checkArrayAttrib(self,'accessControlPolicyText') 
     3254                    self.accessControlPolicyText.append(frag.text) 
     3255                elif frag.tag == MOLES('accessControlPolicyURL'): 
     3256                    checkArrayAttrib(self,'accessControlPolicyURL') 
     3257                    self.accessControlPolicyURL.append(frag.text) 
     3258        def toXML(self,csmlFrag): 
     3259            if hasattr(self,'dgSecurityConditions'): 
     3260                for condition in self.dgSecurityConditions: 
     3261                    frag = Element(MOLES('dgSecurityCondition')) 
     3262                    frag = DGSecurityCondition.toXML(condition,frag) 
     3263                    csmlFrag.append(frag) 
     3264            if hasattr(self,'accessControlPolicyText'):      
     3265                for txt in self.accessControlPolicyText: 
     3266                    frag=Element(MOLES('accessControlPolicyText')) 
     3267                    frag.text=txt 
     3268                    csmlFrag.append(frag) 
     3269            if hasattr(self,'accessControlPolicyURL'):      
     3270                for policyURL in self.accessControlPolicyURL: 
     3271                    frag=Element(MOLES('accessControlPolicyURL')) 
     3272                    frag.text=policyURL 
     3273                    csmlFrag.append(frag) 
     3274            return csmlFrag 
     3275         
    31623276class Dataset(AbstractGML): 
    31633277    """CSML Dataset class 
    31643278 
    31653279    Dataset(AbstractGML): 
     3280     + accessControlPolicy[0...1]:AccessControlPolicy 
    31663281     +unitDefinitions[0..*]: UnitDefinitions 
    31673282     +referenceSystemDefinitions[0..1]: ReferenceSystemDefinitions 
     
    31703285     +featureCollection[0..1]: FeatureCollection 
    31713286    """ 
    3172     def __init__(self,unitDefinitions=None,referenceSystemDefinitions=None, 
     3287    def __init__(self,accessControlPolicy=None, unitDefinitions=None,referenceSystemDefinitions=None, 
    31733288                 phenomenonDefinitions=None,arrayDescriptors=[], 
    31743289                 featureCollection=None,*args,**kwargs): 
    31753290        AbstractGML.__init__(self,*args,**kwargs) 
     3291        if accessControlPolicy: 
     3292            self.accessControlPolicy=accessControlPolicy 
    31763293        if unitDefinitions: 
    31773294            self.unitDefinitions = unitDefinitions 
     
    31913308        AbstractGML.fromXML(self,csmlFrag) 
    31923309        for frag in csmlFrag.getchildren(): 
    3193             if frag.tag == CSML('UnitDefinitions'): 
     3310            if frag.tag == CSML('AccessControlPolicy'): 
     3311                self.accessControlPolicy = AccessControlPolicy() 
     3312                self.accessControlPolicy.fromXML(frag) 
     3313            elif frag.tag == CSML('UnitDefinitions'): 
    31943314                self.unitDefinitions = UnitDefinitions() 
    31953315                self.unitDefinitions.fromXML(frag) 
     
    32373357            csmlFrag = Element('Dataset') 
    32383358        csmlFrag = AbstractGML.toXML(self,csmlFrag) 
     3359        if hasattr(self,'accessControlPolicy'): 
     3360            frag = Element(CSML('AccessControlPolicy')) 
     3361            frag = AccessControlPolicy.toXML(self.accessControlPolicy,frag) 
     3362            csmlFrag.append(frag) 
    32393363        if hasattr(self,'unitDefinitions'): 
    32403364            frag = Element(CSML('UnitDefinitions')) 
  • TI02-CSML/trunk/parser/example.xml

    r925 r1147  
    11<?xml version="1.0" encoding="UTF-8"?> 
    2 <Dataset xmlns="http://ndg.nerc.ac.uk/csml" xmlns:gml="http://www.opengis.net/gml" xmlns:om="http://www.opengis.net/om" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://ndg.nerc.ac.uk/csml 
     2<Dataset xmlns="http://ndg.nerc.ac.uk/csml" xmlns:gml="http://www.opengis.net/gml" xmlns:om="http://www.opengis.net/om" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:moles="http://ndg.nerc.ac.uk/moles" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://ndg.nerc.ac.uk/csml 
    33XMLSchemas/CSMLAppSchema.xsd" gml:id="TestDataset"> 
    44        <gml:metaDataProperty xlink:href="http://ndg.nerc.ac.uk/Metadata/TestDataset"/> 
    55        <gml:description>Test CSML Dataset.</gml:description> 
    66        <gml:name codeSpace="http://ndg.nerc.ac.uk/NDGData">DataEntity0000001</gml:name> 
    7         <!--===================================================================--> 
     7        <!--===================================================================--> 
     8        <!--===== NDG Security Access Control Policy. =====-->   
     9        <!--===================================================================--> 
     10        <AccessControlPolicy> 
     11            <!--  
     12                 also choice of: 
     13                 <moles:accessControlPolicyURL>http://test.security.url</moles:accessControlPolicyURL> 
     14                 <moles:accessControlPolicyText>test security text</moles:accessControlPolicyText> 
     15                 of moles:dgSecurityCondition(s) 
     16            --> 
     17            <moles:dgSecurityCondition> 
     18                <moles:effect>deny</moles:effect> 
     19                <moles:simpleCondition> 
     20                    <moles:dgAttributeAuthority>http://glue.badc.rl.ac.uk/attAuthority.wsdl</moles:dgAttributeAuthority> 
     21                    <moles:attrauthRole>acsoe</moles:attrauthRole> 
     22                </moles:simpleCondition> 
     23                <moles:conditionExplanationText> Dummy requirement for ACSOE group at BADC </moles:conditionExplanationText> 
     24            </moles:dgSecurityCondition> 
     25        </AccessControlPolicy> 
     26        <!--===================================================================--> 
    827        <!--===== Local unit definitions. =====--> 
    928        <!--===================================================================--> 
  • TI02-CSML/trunk/parser/parser_extra.py

    r925 r1147  
    4949        csmlstring=csmlstring.replace('{http://www.w3.org/1999/xlink}','xlink:') 
    5050        csmlstring=csmlstring.replace('{http://www.opengis.net/om}','om:')         
     51        csmlstring=csmlstring.replace('{http://ndg.nerc.ac.uk/moles}','moles:') 
    5152        #remove cmsl: prefixes 
    5253        csmlstring=csmlstring.replace('<csml:','<') 
     
    5455         
    5556        #add namespace declarations at top of document 
    56         csmlstring=csmlstring.replace('<Dataset', '<Dataset xmlns="http://ndg.nerc.ac.uk/csml"  xmlns:gml="http://www.opengis.net/gml" xmlns:om="http://www.opengis.net/om" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://ndg.nerc.ac.uk/csml/XMLSchemas/CSMLAppSchema.xsd"') 
     57        csmlstring=csmlstring.replace('<Dataset', '<Dataset xmlns="http://ndg.nerc.ac.uk/csml"  xmlns:gml="http://www.opengis.net/gml" xmlns:om="http://www.opengis.net/om" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:moles="http://ndg.nerc.ac.uk/moles" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://ndg.nerc.ac.uk/csml/XMLSchemas/CSMLAppSchema.xsd"') 
    5758         
    5859        #this is only used when creating a new csml document 
     
    6061        csmlstring=csmlstring.replace('xmlns:ns1', 'xmlns:xlink') 
    6162        csmlstring=csmlstring.replace('ns1:href', 'xlink:href') 
     63        csmlstring=csmlstring.replace('ns1:moles', 'xlink:moles') 
    6264        csmlstring=csmlstring.replace('ns1:', '')  #the rest of the ns1s are CSML namespaces... due to the way it has been parsed.         
    6365        return csmlstring 
  • TI02-CSML/trunk/parser/test.py

    r925 r1147  
    3333#Hopefully the CSML output should be the same as the CSML it read in. 
    3434csml = dataset.toXML() 
    35 print str(csml) 
     35#print str(csml) 
    3636     
    3737#Tidy up and print the CSML document: 
Note: See TracChangeset for help on using the changeset viewer.