3
Kd!                 @   s   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZm	Z	 ddl
mZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ dddgZedZedZG dd dejZdd ZG dd deZdS )z
A TriX parser for RDFLib
    )	Namespace)URIRef)BNode)Literal)GraphConjunctiveGraph)ParserError)Parser)	text_type)handler)make_parser)ErrorHandlercreate_parserTriXHandler
TriXParserz&http://www.w3.org/2004/03/trix/trix-1/z$http://www.w3.org/XML/1998/namespacec               @   sx   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )r   z6An Sax Handler for TriX. See http://sw.nokia.com/trix/c             C   s   || _ d| _| j  d S )NF)storepreserve_bnode_idsreset)selfr    r   M/var/www/html/virt/lib/python3.6/site-packages/rdflib/plugins/parsers/trix.py__init__   s    zTriXHandler.__init__c             C   s(   i | _ d | _d | _d| _d | _d | _d S )Nr   )bnodegraphtriplestatelangdatatype)r   r   r   r   r       s    zTriXHandler.resetc             C   s
   || _ d S )N)locator)r   r   r   r   r   setDocumentLocator*   s    zTriXHandler.setDocumentLocatorc             C   s   d S )Nr   )r   r   r   r   startDocument-   s    zTriXHandler.startDocumentc             C   s   d S )Nr   )r   prefix	namespacer   r   r   startPrefixMapping0   s    zTriXHandler.startPrefixMappingc             C   s   d S )Nr   )r   r!   r   r   r   endPrefixMapping3   s    zTriXHandler.endPrefixMappingc             C   s@  |d t tkr&| jd|d tf  |d dkrR| jdkrDd| _n
| jd n|d dkr~| jdkrpd| _n
| jd n|d d	kr| jdkrd
| _n| jdkrn
| jd n|d dkr| jdkr| jd krt| jd| _g | _d| _n
| jd n4|d dkr| jdkrd | _d | _	y|j
ttdf| _W n   Y nX y|jd| _	W n  tk
r~   | jd Y nX n
| jd n|d dkr| jdkrd | _d | _	y|j
ttdf| _W n   Y nX n
| jd nN|d dkr$| jdkr
d
| _n| jdkrn
| jd n| jd|d   d| _d S )Nr   z7Only elements in the TriX namespace are allowed. %s!=%s   TriXzUnexpected TriX elementr      zUnexpected graph elementuri      zUnexpected uri elementr   )r   zUnexpected triple elementtypedLiteralr   r   z No required attribute 'datatype'zUnexpected typedLiteral elementplainLiteralzUnexpected plainLiteral elementidzUnexpected id elementz$Unknown element %s in TriX namespace )strTRIXNSerrorr   r   r   r   r   r   r   getValuer
   XMLNSgetValueByQNameKeyErrorchars)r   nameqnameattrsr   r   r   startElementNS6   sn    





zTriXHandler.startElementNSc             C   s   |d t tkr&| jd|d tf  |d dkr| jdkr^t| jt| jj d| _	d| _n0| jdkr|  j
t| jj g7  _
n
| jd nj|d dkr| jdkrt| j| j| jj d| _	d| _n2| jdkr|  j
| j| jj g7  _
n
| jd  n|d dks |d dkrZ| jdkrN|  j
t| j| j| jdg7  _
n
| jd n|d dkr| jdkrt| j
dkr| jdt| j
| j
f  | j	j| j
 d| _n
| jd n<|d dkrd | _	d| _n |d dkrd| _n
| jd d S )Nr   z7Only elements in the TriX namespace are allowed. %s!=%sr%   r(   r)   )r   
identifierr'   r*   z0Illegal internal self.state - This should never z7happen if the SAX parser ensures XML syntax correctnessr-   )r;   r,   r+   )r   r   z+This should never happen if the SAX parser zensures XML syntax correctnessr   z,Triple has wrong length, got %d elements: %sr   r&   zUnexpected close elementzgIllegal internal self.state - This should never happen if the SAX parser ensures XML syntax correctnesszgIllegal internal self.state - This should never happen if the SAX parser ensures XML syntax correctnesszIThis should never happen if the SAX parser ensures XML syntax correctnesszIThis should never happen if the SAX parser ensures XML syntax correctness)r/   r0   r1   r   r   r   r   r6   stripr   r   	get_bnoder   r   r   lenadd)r   r7   r8   r   r   r   endElementNS   s^    

 



 
  zTriXHandler.endElementNSc             C   s<   | j rt|}n(|| jkr&| j| }nt|}|| j|< |S )N)r   r   r   )r   labelZbnr   r   r   r=      s    


zTriXHandler.get_bnodec             C   s   |  j |7  _ d S )N)r6   )r   contentr   r   r   
characters   s    zTriXHandler.charactersc             C   s   d S )Nr   )r   rB   r   r   r   ignorableWhitespace   s    zTriXHandler.ignorableWhitespacec             C   s   d S )Nr   )r   targetdatar   r   r   processingInstruction   s    z!TriXHandler.processingInstructionc             C   s0   | j }d|j |j |j f }t|| d S )Nz
%s:%s:%s: )r   getSystemIdgetLineNumbergetColumnNumberr   )r   messager   infor   r   r   r1      s    zTriXHandler.errorN)__name__
__module____qualname____doc__r   r   r   r    r#   r$   r:   r@   r=   rC   rD   rG   r1   r   r   r   r   r      s   
X@c             C   s\   t  }y|jdd W n tk
r*   Y nX |jtjd t| }|j| |jt	  |S )Nxmlz$http://www.w3.org/XML/1998/namespacer%   )
r   Zstart_namespace_declAttributeError
setFeaturer   feature_namespacesr   setContentHandlersetErrorHandlerr   )r   parserZtrixr   r   r   r      s    
c               @   s    e Zd ZdZdd Zdd ZdS )r   z0A parser for TriX. See http://sw.nokia.com/trix/c             C   s   d S )Nr   )r   r   r   r   r      s    zTriXParser.__init__c             K   sP   |j jstdt|j | _| jj }|jdd }|d k	r@||_| jj| d S )Nz/TriXParser must be given a context aware store.r   )	r   Zcontext_awareAssertionErrorr   _parsergetContentHandlergetr   parse)r   sourceZsinkargsZcontent_handlerr   r   r   r   r\     s    

zTriXParser.parseN)rM   rN   rO   rP   r   r\   r   r   r   r   r      s   N)rP   Zrdflib.namespacer   Zrdflib.termr   r   r   Zrdflib.graphr   r   Zrdflib.exceptionsr   Zrdflib.parserr	   sixr
   xml.sax.saxutilsr   Zxml.saxr   Zxml.sax.handlerr   __all__r0   r3   ContentHandlerr   r   r   r   r   r   r   <module>   s$   
 T