o
    i%                     @  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dZd0ddZd1dd	Zd2ddZd1ddZd3ddZd4ddZ	d5ddZ
d6ddZd7d"d#Zd8d%d&Zd1d'd(Zd1d)d*Zd9d-d.Zd/S ):r   z6An Sax Handler for TriX. See http://sw.nokia.com/trix/storer   c                 C  s   || _ d| _|   d S )NF)r   preserve_bnode_idsreset)selfr    r"   V/var/www/edux/Edux_v2/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statelangdatatyper!   r"   r"   r#   r    $   s   
zTriXHandler.resetlocatorr   c                 C  s
   || _ d S N)r.   )r!   r.   r"   r"   r#   setDocumentLocator.   s   
zTriXHandler.setDocumentLocatorc                 C     d S r/   r"   r-   r"   r"   r#   startDocument1      zTriXHandler.startDocumentprefixOptional[str]	namespacestrc                 C  r1   r/   r"   )r!   r4   r6   r"   r"   r#   startPrefixMapping4   r3   zTriXHandler.startPrefixMappingc                 C  r1   r/   r"   )r!   r4   r"   r"   r#   endPrefixMapping7   r3   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,   getValueXMLNS	Exception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   )rS   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   rP   stripr(   	get_bnoder   r+   r,   lenaddrJ   )r!   r:   rQ   r"   r"   r#   endElementNS   sr   






 




zTriXHandler.endElementNSlabelr   c                 C  s@   | j r	t|}|S || jv r| j| }|S t|}|| j|< |S r/   )r   r   r'   )r!   rY   bnr"   r"   r#   rU      s   


zTriXHandler.get_bnodecontentc                 C  s   |  j |7  _ d S r/   )rP   r!   r[   r"   r"   r#   
characters   s   zTriXHandler.charactersc                 C  r1   r/   r"   r\   r"   r"   r#   ignorableWhitespace   r3   zTriXHandler.ignorableWhitespacec                 C  r1   r/   r"   )r!   targetdatar"   r"   r#   processingInstruction   r3   z!TriXHandler.processingInstructionmessager   c                 C  s,   | j }d| | | f }t|| )Nz
%s:%s:%s: )r.   getSystemIdgetLineNumbergetColumnNumberr   )r!   rb   r.   infor"   r"   r#   rI      s   zTriXHandler.errorN)r   r   )r%   r&   )r.   r   )r4   r5   r6   r7   r%   r&   )r4   r5   r%   r&   )r:   r;   r<   r   r%   r&   )r:   r;   r%   r&   )rY   r7   r%   r   )r[   r7   r%   r&   )rb   r7   r%   r   )__name__
__module____qualname____doc__r$   r    r0   r2   r8   r9   rR   rX   rU   r]   r^   ra   rI   r"   r"   r"   r#   r      s    








Z
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   start_namespace_declAttributeError
setFeaturer
   feature_namespacesr   setContentHandler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  r1   r/   r"   r-   r"   r"   r#   r$     r3   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   context_awarer   _parsergetContentHandlergetr   parse)r!   rs   rt   ru   content_handlerr   r"   r"   r#   rz     s   
zTriXParser.parseN)rs   r   rt   r   ru   r   r%   r&   )rg   rh   ri   rj   r$   rz   r"   r"   r"   r#   r     s    r   N)r   r   r%   r   )+rj   
__future__r   typingr   r   r   r   r   r   r	   xml.saxr
   r   xml.sax.handlerr   rdflib.exceptionsr   rdflib.graphr   rdflib.namespacer   rdflib.parserr   r   rdflib.storer   rdflib.termr   r   r   r   xml.sax.xmlreaderr   r   r   __all__rH   rL   ContentHandlerr   r   r   r"   r"   r"   r#   <module>   s(    $ 
d