home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- '''
- '''
- from rdflib import RDF, RDFS, Namespace
- from rdflib import URIRef, BNode, Literal
- from rdflib.Graph import Graph
- from rdflib.exceptions import ParserError, Error
- from rdflib.syntax.xml_names import is_ncname
- from xml.sax.saxutils import handler, quoteattr, escape
- from urlparse import urljoin, urldefrag
- RDFNS = RDF.RDFNS
- TRIXNS = Namespace('http://www.w3.org/2004/03/trix/trix-1/')
-
- class TriXHandler(handler.ContentHandler):
- '''An Sax Handler for TriX. See http://swdev.nokia.com/trix/TriX.html'''
-
- def __init__(self, store):
- self.store = store
- self.preserve_bnode_ids = False
- self.reset()
-
-
- def reset(self):
- self.bnode = { }
- self.graph = self.store
- self.triple = None
- self.state = 0
- self.lang = None
- self.datatype = None
-
-
- def setDocumentLocator(self, locator):
- self.locator = locator
-
-
- def startDocument(self):
- pass
-
-
- def startPrefixMapping(self, prefix, namespace):
- pass
-
-
- def endPrefixMapping(self, prefix):
- pass
-
-
- def startElementNS(self, name, qname, attrs):
- if name[0] != TRIXNS:
- self.error('Only elements in the TriX namespace are allowed.')
-
- if name[1] == 'TriX':
- if self.state == 0:
- self.state = 1
- else:
- self.error('Unexpected TriX element')
- elif name[1] == 'graph':
- if self.state == 1:
- self.state = 2
- else:
- self.error('Unexpected graph element')
- elif name[1] == 'uri':
- if self.state == 2:
- self.state = 3
- elif self.state == 4:
- pass
- else:
- self.error('Unexpected uri element')
- elif name[1] == 'triple':
- if self.state == 2:
- self.triple = []
- self.state = 4
- else:
- self.error('Unexpected triple element')
- elif name[1] == 'typedLiteral':
- if self.state == 4:
- self.lang = None
- self.datatype = None
-
- try:
- self.lang = attrs.getValueByQName('lang')
- except:
- pass
-
-
- try:
- self.datatype = attrs.getValueByQName('datatype')
- except KeyError:
- self.error("No required attribute 'datatype'")
- except:
- None<EXCEPTION MATCH>KeyError
-
-
- None<EXCEPTION MATCH>KeyError
- self.error('Unexpected typedLiteral element')
- elif name[1] == 'plainLiteral':
- if self.state == 4:
- self.lang = None
- self.datatype = None
-
- try:
- self.lang = attrs.getValueByQName('lang')
-
- else:
- self.error('Unexpected plainLiteral element')
- elif name[1] == 'id':
- if self.state == 2:
- self.state = 3
- elif self.state == 4:
- pass
- else:
- self.error('Unexpected id element')
- else:
- self.error('Unknown element %s in TriX namespace' % name[1])
- self.chars = ''
-
-
- def endElementNS(self, name, qname):
- if name[0] != TRIXNS:
- self.error('Only elements in the TriX namespace are allowed.')
-
- if name[1] == 'uri':
- if self.state == 3:
- self.graph = Graph(store = self.store.store, identifier = URIRef(self.chars.strip()))
- self.state = 2
- elif self.state == 4:
- self.triple += [
- URIRef(self.chars.strip())]
- else:
- self.error('Illegal internal self.state - This should never happen if the SAX parser ensures XML syntax correctness')
-
- if name[1] == 'id':
- if self.state == 3:
- self.graph = Graph(self.store.store, identifier = self.get_bnode(self.chars.strip()))
- self.state = 2
- elif self.state == 4:
- self.triple += [
- self.get_bnode(self.chars.strip())]
- else:
- self.error('Illegal internal self.state - This should never happen if the SAX parser ensures XML syntax correctness')
-
- if name[1] == 'plainLiteral' or name[1] == 'typedLiteral':
- if self.state == 4:
- self.triple += [
- Literal(self.chars, lang = self.lang, datatype = self.datatype)]
- else:
- self.error('This should never happen if the SAX parser ensures XML syntax correctness')
-
- if name[1] == 'triple':
- if self.state == 4:
- if len(self.triple) != 3:
- self.error('Triple has wrong length, got %d elements: %s' % (len(self.triple), self.triple))
-
- self.graph.add(self.triple)
- self.state = 2
- else:
- self.error('This should never happen if the SAX parser ensures XML syntax correctness')
-
- if name[1] == 'graph':
- self.state = 1
-
- if name[1] == 'TriX':
- self.state = 0
-
-
-
- def get_bnode(self, label):
- if self.preserve_bnode_ids:
- bn = BNode(label)
- elif label in self.bnode:
- bn = self.bnode[label]
- else:
- bn = BNode(label)
- self.bnode[label] = bn
- return bn
-
-
- def characters(self, content):
- self.chars += content
-
-
- def ignorableWhitespace(self, content):
- pass
-
-
- def processingInstruction(self, target, data):
- pass
-
-
- def error(self, message):
- locator = self.locator
- info = '%s:%s:%s: ' % (locator.getSystemId(), locator.getLineNumber(), locator.getColumnNumber())
- raise ParserError(info + message)
-
-
-