o
    mi^'                     @  s  d Z ddlmZ ddlmZmZmZmZmZm	Z	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mZ dd
lmZ ddlmZmZmZmZ er`ddl m!Z!m"Z"m#Z# g dZ$edZ%edZ&G dd dej'Z(dddZ)G dd deZ*dS )z
A TriX parser for RDFLib
    )annotations)TYPE_CHECKINGAnyDictListNoReturnOptionalTuple)handlermake_parser)ErrorHandler)ParserError)Graph)	Namespace)InputSourceParser)Store)BNode
IdentifierLiteralURIRef)AttributesImplLocator	XMLReader)create_parserTriXHandler
TriXParserz&http://www.w3.org/2004/03/trix/trix-1/$http://www.w3.org/XML/1998/namespacec                   @  s   e Zd ZU dZded< ded< d2ddZd3ddZd4ddZd3ddZd5ddZ	d6ddZ
d7ddZd8d d!Zd9d$d%Zd:d'd(Zd3d)d*Zd3d+d,Zd;d/d0Zd1S )<r   z6An Sax Handler for TriX. See http://sw.nokia.com/trix/Optional[str]langdatatypestorer   c                 C  s   || _ d| _|   d S )NF)r!   preserve_bnode_idsreset)selfr!    r%   U/home/kim/smarthome/.venv/lib/python3.10/site-packages/rdflib/plugins/parsers/trix.py__init__#   s   zTriXHandler.__init__returnNonec                 C  s(   i | _ d | _d | _d| _d | _d | _d S )Nr   )bnodegraphtriplestater   r    r$   r%   r%   r&   r#   (   s   
zTriXHandler.resetlocatorr   c                 C  s
   || _ d S N)r/   )r$   r/   r%   r%   r&   setDocumentLocator2   s   
zTriXHandler.setDocumentLocatorc                 C     d S r0   r%   r.   r%   r%   r&   startDocument5      zTriXHandler.startDocumentprefix	namespacestrc                 C  r2   r0   r%   )r$   r5   r6   r%   r%   r&   startPrefixMapping8   r4   zTriXHandler.startPrefixMappingc                 C  r2   r0   r%   )r$   r5   r%   r%   r&   endPrefixMapping;   r4   zTriXHandler.endPrefixMappingnameTuple[Optional[str], str]attrsr   c                 C  s4  |d t tkr| d|d tf  |d  dkr*| jdkr$d| _n| d n|d dkr?| jdkr9d| _n| d n|d d	krZ| jdkrNd
| _n| jdkrTn| d n|d dkr~| jdkrx| jd u rqt| jd| _g | _d| _n| d n|d dkr| jdkrd | _	d | _
z|t tdf| _	W n	 ty   Y nw z|d| _
W ng ty   | d Y nZw | d nS|d dkr| jdkrd | _	d | _
z|t tdf| _	W n5 ty   Y n-w | d n&|d dkr| jdkrd
| _n| jdkrn| d n	| d|d   d| _d S )Nr   7Only 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 )r7   TRIXNSerrorlowerr-   r+   r   r!   r,   r   r    ZgetValueXMLNS	ExceptionZgetValueByQNameKeyErrorchars)r$   r:   qnamer<   r%   r%   r&   startElementNS>   sx   










zTriXHandler.startElementNSc                 C  s  t r	| jd us	J |d ttkr| d|d tf  |d dkrT| jdkr9t| jt| j	
 d| _d| _d S | jdkrM|  jt| j	
 g7  _d S | d	 d S |d d
kr| jdkrrt| j| | j	
 d| _d| _d S | jdkr|  j| | j	
 g7  _d S | d	 d S |d dks|d dkr| jdkr|  jt| j	| j| jdg7  _d S | d d S |d dkr| jdkrt| jdkr| dt| j| jf  | j| j d| _d S | d d S |d dkrd | _d| _d S |d  dkrd| _d S | d d S )Nr   r=   r>   rA   rB   )r!   
identifierr@   rC   zgIllegal internal self.state - This should never happen if the SAX parser ensures XML syntax correctnessrF   )rQ   rE   rD   )r   r    zIThis should never happen if the SAX parser ensures XML syntax correctnessr,   z,Triple has wrong length, got %d elements: %sr+   r?   zUnexpected close element)r   r,   r7   rH   rI   r-   r   r!   r   rN   stripr+   	get_bnoder   r   r    lenaddrJ   )r$   r:   rO   r%   r%   r&   endElementNS   sr   






 




zTriXHandler.endElementNSlabelr   c                 C  s@   | j r	t|}|S || jv r| j| }|S t|}|| j|< |S r0   )r"   r   r*   )r$   rW   Zbnr%   r%   r&   rS      s   


zTriXHandler.get_bnodecontentc                 C  s   |  j |7  _ d S r0   )rN   r$   rX   r%   r%   r&   
characters   s   zTriXHandler.charactersc                 C  r2   r0   r%   rY   r%   r%   r&   ignorableWhitespace   r4   zTriXHandler.ignorableWhitespacec                 C  r2   r0   r%   )r$   targetdatar%   r%   r&   processingInstruction   r4   z!TriXHandler.processingInstructionmessager   c                 C  s,   | j }d| | | f }t|| )Nz
%s:%s:%s: )r/   ZgetSystemIdZgetLineNumberZgetColumnNumberr   )r$   r_   r/   infor%   r%   r&   rI      s   zTriXHandler.errorN)r!   r   )r(   r)   )r/   r   )r5   r   r6   r7   r(   r)   )r5   r   r(   r)   )r:   r;   r<   r   r(   r)   )r:   r;   r(   r)   )rW   r7   r(   r   )rX   r7   r(   r)   )r_   r7   r(   r   )__name__
__module____qualname____doc____annotations__r'   r#   r1   r3   r8   r9   rP   rV   rS   rZ   r[   r^   rI   r%   r%   r%   r&   r      s"   
 








[
M


r   r!   r   r(   r   c                 C  sZ   t  }z|dd W n	 ty   Y nw |tjd t| }|| |t	  |S )Nxmlr   r>   )
r   Zstart_namespace_declAttributeErrorZ
setFeaturer
   Zfeature_namespacesr   ZsetContentHandlerZsetErrorHandlerr   )r!   parserr?   r%   r%   r&   r     s   
r   c                   @  s"   e Zd ZdZdd ZdddZdS )r   z0A parser for TriX. See http://sw.nokia.com/trix/c                 C  r2   r0   r%   r.   r%   r%   r&   r'     r4   zTriXParser.__init__sourcer   sinkr   argsr   r(   r)   c                 K  sP   |j jsJ dt|j | _| j }|dd }|d ur ||_| j| d S )Nz/TriXParser must be given a context aware store.r"   )r!   Zcontext_awarer   _parserZgetContentHandlergetr"   parse)r$   ri   rj   rk   Zcontent_handlerr"   r%   r%   r&   rn     s   
zTriXParser.parseN)ri   r   rj   r   rk   r   r(   r)   )ra   rb   rc   rd   r'   rn   r%   r%   r%   r&   r     s    r   N)r!   r   r(   r   )+rd   
__future__r   typingr   r   r   r   r   r   r	   Zxml.saxr
   r   Zxml.sax.handlerr   Zrdflib.exceptionsr   Zrdflib.graphr   Zrdflib.namespacer   Zrdflib.parserr   r   Zrdflib.storer   Zrdflib.termr   r   r   r   Zxml.sax.xmlreaderr   r   r   __all__rH   rK   ZContentHandlerr   r   r   r%   r%   r%   r&   <module>   s(    $ 
h