You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

125 lines
4.4 KiB

#
# minixsv, Release 0.9.0
# file: xsvalXmlIf.py
#
# XML interface classes (derived wrapper classes)
#
# history:
# 2007-07-04 rl created
#
# Copyright (c) 2004-2008 by Roland Leuthe. All rights reserved.
#
# --------------------------------------------------------------------
# The minixsv XML schema validator is
#
# Copyright (c) 2004-2008 by Roland Leuthe
#
# By obtaining, using, and/or copying this software and/or its
# associated documentation, you agree that you have read, understood,
# and will comply with the following terms and conditions:
#
# Permission to use, copy, modify, and distribute this software and
# its associated documentation for any purpose and without fee is
# hereby granted, provided that the above copyright notice appears in
# all copies, and that both that copyright notice and this permission
# notice appear in supporting documentation, and that the name of
# the author not be used in advertising or publicity
# pertaining to distribution of the software without specific, written
# prior permission.
#
# THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
# TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT-
# ABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR
# BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
# DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
# OF THIS SOFTWARE.
# --------------------------------------------------------------------
from types import TupleType
from ..genxmlif.xmlifApi import XmlElementWrapper
class XsvXmlElementWrapper (XmlElementWrapper):
#++++++++++++ special XSD validation support ++++++++++++++++++++
def __init__(self, element, treeWrapper, curNs=[], initAttrSeq=1):
XmlElementWrapper.__init__(self, element, treeWrapper, curNs, initAttrSeq)
self.schemaRootNode = None
self.xsdNode = None
self.xsdAttrNodes = {}
def cloneNode(self, deep, cloneCallback=None):
return XmlElementWrapper.cloneNode(self, deep, self.cloneCallback)
def cloneCallback(self, nodeCopy):
nodeCopy.schemaRootNode = self.schemaRootNode
nodeCopy.xsdNode = self.xsdNode
nodeCopy.xsdAttrNodes = self.xsdAttrNodes.copy()
def getSchemaRootNode (self):
"""Retrieve XML schema root node which this element node belongs to
(e.g. for accessing target namespace attribute).
Returns XML schema root node which this element node belongs to
"""
return self.schemaRootNode
def setSchemaRootNode (self, schemaRootNode):
"""Store XML schema root node which this element node belongs to.
Input parameter:
schemaRootNode: schema root node which this element node belongs to
"""
self.schemaRootNode = schemaRootNode
def getXsdNode (self):
"""Retrieve XML schema node responsible for this element node.
Returns XML schema node responsible for this element node.
"""
return self.xsdNode
def setXsdNode (self, xsdNode):
"""Store XML schema node responsible for this element node.
Input parameter:
xsdNode: responsible XML schema ElementWrapper
"""
self.xsdNode = xsdNode
def getXsdAttrNode (self, tupleOrAttrName):
"""Retrieve XML schema node responsible for the requested attribute.
Input parameter:
tupleOrAttrName: tuple '(namespace, attributeName)' or 'attributeName' if no namespace is used
Returns XML schema node responsible for the requested attribute.
"""
try:
return self.xsdAttrNodes[tupleOrAttrName]
except:
if isinstance(tupleOrAttrName, TupleType):
if tupleOrAttrName[1] == '*' and len(self.xsdAttrNodes) == 1:
return self.xsdAttrNodes.values()[0]
return None
def setXsdAttrNode (self, tupleOrAttrName, xsdAttrNode):
"""Store XML schema node responsible for the given attribute.
Input parameter:
tupleOrAttrName: tuple '(namespace, attributeName)' or 'attributeName' if no namespace is used
xsdAttrNode: responsible XML schema ElementWrapper
"""
self.xsdAttrNodes[tupleOrAttrName] = xsdAttrNode