o
    ib                     @  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mZmZ ddlmZ ddlmZmZ ddlmZmZ dd	lmZ dd
lmZ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+ ddlm,Z,m-Z-m.Z. g dZ/e#Z0e#j1e#j2e#j3e#j4e#j5dZ6e#je#j2e#j1e#j5e#j4e#j7e#j8gZ9e9e#j:e#j;g Z<e(de(de(dgZ=e9e#j;g e= Z>e#j2e#j7e#j1gZ?e9e#j:g e= Z@e9e#j:e#j;g e= ZAe#j2e#j4e#j7gZBdZCeCdfZDeCdfZEG dd de(ZFG dd dZGG dd dejHZId)d$d%ZJG d&d' d'e!ZKd(S )*z
An RDF/XML parser for RDFLib
    )annotations)TYPE_CHECKINGAnyDictListNoReturnOptionalTuple)	urldefragurljoin)handlermake_parser	xmlreader)ErrorHandler)escape	quoteattr)ErrorParserError)Graph)RDF	is_ncname)InputSourceParser)RDFVOC)BNode
IdentifierLiteralURIRef)AttributesImplLocator)_ObjectType_SubjectType_TripleType)create_parserBagIDElementHandlerRDFXMLHandlerRDFXMLParser)aboutIDtyperesource	parseTypez4http://www.w3.org/1999/02/22-rdf-syntax-ns#aboutEachz:http://www.w3.org/1999/02/22-rdf-syntax-ns#aboutEachPrefixz0http://www.w3.org/1999/02/22-rdf-syntax-ns#bagID$http://www.w3.org/XML/1998/namespacebaselangc                      s*   e Zd ZdgZ fddZdd Z  ZS )r$   lic                   s   t t| | d| _d S Nr   )superr   __init__r0   )selfval	__class__ X/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/rdflib/plugins/parsers/rdfxml.pyr3   Y   s   
zBagID.__init__c                 C     |  j d7  _ td| j   S N   z_%s)r0   RDFNSr4   r8   r8   r9   next_li]      zBagID.next_li)__name__
__module____qualname__	__slots__r3   r?   __classcell__r8   r8   r6   r9   r$   V   s    r$   c                   @  s$   e Zd Zg dZdd Zdd ZdS )r%   )startcharendr0   idr.   subject	predicateobjectlistlanguagedatatypedeclareddatac                 C  sR   d | _ d | _d | _d| _d | _d | _d | _d | _d | _d | _	d | _
d | _d | _d S r1   )rF   rG   rH   r0   rI   r.   rJ   rL   rM   rN   rO   rP   rQ   r>   r8   r8   r9   r3   t   s   
zElementHandler.__init__c                 C  r:   r;   )r0   r   r>   r8   r8   r9   r?      r@   zElementHandler.next_liN)rA   rB   rC   rD   r3   r?   r8   r8   r8   r9   r%   b   s    r%   c                   @  s<  e Zd ZdUddZdVddZdWddZdVddZdXddZdYddZdZddZ	d[ddZ
d\d d!ZdVd"d#ZdVd$d%Zd]d*d+Zd^d.d/Zd_d1d2ZeeZd_d3d4ZeeZd_d5d6ZeeZd`d9d:Zdad<d=Zdbd?d@ZdbdAdBZdcdCdDZdbdEdFZdddHdIZdcdJdKZdcdLdMZdbdNdOZ dddPdQZ!dcdRdSZ"dTS )er&   storer   c                 C  s   || _ d| _|   d S )NF)rR   preserve_bnode_idsreset)r4   rR   r8   r8   r9   r3      s   zRDFXMLHandler.__init__returnNonec                 C  sF   t  }| j|_dd |_d |g| _i | _i | _i g| _| jd | _d S )Nc                 S     d S Nr8   )nameqnamer8   r8   r9   <lambda>   s    z%RDFXMLHandler.reset.<locals>.<lambda>)	r%   document_element_startrF   rH   stackidsbnode_ns_contexts_current_context)r4   document_elementr8   r8   r9   rT      s   
zRDFXMLHandler.resetlocatorr   c                 C  s
   || _ d S rX   )rd   )r4   rd   r8   r8   r9   setDocumentLocator      
z RDFXMLHandler.setDocumentLocatorc                 C  rW   rX   r8   r>   r8   r8   r9   startDocument      zRDFXMLHandler.startDocumentprefixOptional[str]	namespacestrc                 C  s6   | j | j  || j|< | jj||pddd d S )N F)override)ra   appendrb   copyrR   bind)r4   ri   rk   r8   r8   r9   startPrefixMapping   s   
z RDFXMLHandler.startPrefixMappingc                 C  s   | j d | _| j d= d S Nr\   )ra   rb   )r4   ri   r8   r8   r9   endPrefixMapping   s   zRDFXMLHandler.endPrefixMappingrY   Tuple[Optional[str], str]attrsr   c                 C  s   | j }|t  | j}| j}|td }|d ur=t|\}}|r+|jr+t	|j|}n-| j
 p4| j
 }	|	r<t	|	|}n|rB|j}|d u rX| j
 pO| j
 }	|	rXt|	\}}||_|td }
|
d u rj|rj|j}
|
|_|||| d S rX   )r^   ro   r%   currentparentgetBASEr
   r.   r   rd   getPublicIdgetSystemIdLANGrN   rF   )r4   rY   rZ   rv   r^   rw   rx   r.   fragsystemIdrN   r8   r8   r9   startElementNS   s4   

zRDFXMLHandler.startElementNSc                 C  s   | j || | j  d S rX   )rw   rH   r^   popr4   rY   rZ   r8   r8   r9   endElementNS   r@   zRDFXMLHandler.endElementNScontentc                 C  s   | j j}|r|| d S d S rX   )rw   rG   )r4   r   rG   r8   r8   r9   
characters   s   zRDFXMLHandler.charactersc                 C  rW   rX   r8   )r4   r   r8   r8   r9   ignorableWhitespace   rh   z!RDFXMLHandler.ignorableWhitespacec                 C  rW   rX   r8   )r4   targetrQ   r8   r8   r9   processingInstruction   rh   z#RDFXMLHandler.processingInstructionsidr   spor"   c                 C  s`   |\}}}| j |tjtjf | j |tj|f | j |tj|f | j |tj|f d S rX   )rR   addr   r*   	StatementrJ   rK   rL   )r4   r   r   spor8   r8   r9   add_reified   s
   
zRDFXMLHandler.add_reifiedmessager   c                 C  s,   | j }d| | | f }t|| )Nz
%s:%s:%s: )rd   r|   getLineNumbergetColumnNumberr   )r4   r   rd   infor8   r8   r9   error   s   zRDFXMLHandler.errorOptional[ElementHandler]c                 C  
   | j d S )Nr^   r>   r8   r8   r9   get_current   rf   zRDFXMLHandler.get_currentc                 C  r   rs   r   r>   r8   r8   r9   get_next   rf   zRDFXMLHandler.get_nextc                 C  r   )Nr   r>   r8   r8   r9   
get_parent   rf   zRDFXMLHandler.get_parenturir   c                 C  s>   t | jj|dd}|r|d dkr|d dkrd| }t|S )Nr<   )allow_fragmentsr\   #z%s#)r   rw   r.   r   )r4   r   resultr8   r8   r9   
absolutize  s   zRDFXMLHandler.absolutize Tuple[URIRef, Dict[URIRef, str]]c                 C  s   |d d u rt |d }nt d|}i }| D ]5\}}|d d u r)|d }nd|}|ts=|dd  dkr>q|tv rI||t| < q||t |< q||fS )Nr   r<   rm      xml)r   joinitems
startswithXMLNSlowerUNQUALIFIEDr=   )r4   rY   rZ   rv   attsnvattr8   r8   r9   convert  s   

zRDFXMLHandler.convertTuple[str, str]c                 C  sL   |d rt d|tjkrt| d}| j|_| j|_d S | ||| d S )Nr   rm   next)	r   r   r   r   getattrnode_element_startrF   node_element_endrH   )r4   rY   rZ   rv   r   r8   r8   r9   r]   #  s
   
z$RDFXMLHandler.document_element_startc                 C  s  |  |||\}}| j}| j}t| d}| j|_| j|_|tv r'| 	d|  t
j|v rct
j|v s6t
j|v r;| 	d |t
j }t|sK| 	d|  |d| }	|	| jv r]| 	d|	  d| j|	< nat
j|v rt
j|v srt
j|v rw| 	d |t
j }
t|
s| 	d|
  | jd	u r|
| jv r| j|
 }	n-t }	|	| j|
< n$t|
}	nt
j|v rt
j|v st
j|v r| 	d ||t
j }	nt }	|t
jkr| j|	tj||f |j}|D ]}|tts||}z	t|| |}W nd ty
 } z| 	|j W Y d }~nPd }~ww |tjkrtj}||tj }n:|tv r"q|t v r/| 	d
|  q||}z	t|| |}W n tyU } z| 	|j W Y d }~nd }~ww | j|	||f q|	|_!d S )Nr   zInvalid node element URI: %sz9Can have at most one of rdf:ID, rdf:about, and rdf:nodeIDz&rdf:ID value is not a valid NCName: %s#%sz)two elements cannot use the same ID: '%s'r<   *rdf:nodeID value is not a valid NCName: %sF"Invalid property attribute URI: %s)"r   rw   r   r   property_element_startrF   property_element_endrH   NODE_ELEMENT_EXCEPTIONSr   r   r)   r(   nodeIDr   r_   rS   r`   r   DescriptionrR   r   r   r*   rN   r   rl   r=   r   r   msgNODE_ELEMENT_ATTRIBUTESPROPERTY_ATTRIBUTE_EXCEPTIONSrJ   )r4   rY   rZ   rv   r   rw   r   r   rI   rJ   r   rN   r   rK   rL   er8   r8   r9   r   1  s   
















z RDFXMLHandler.node_element_startc                 C  s<   | j jr| j| jd kr| dd|  | jj| j _d S )N   z1Repeat node-elements inside property elements: %srm   )rx   rL   rw   r^   r   r   rJ   r   r8   r8   r9   r     s
   zRDFXMLHandler.node_element_endc                 C  s  |  |||\}}| j}| j}t| d}d }d |_d |_|tts)|||_	n|t
jkr4| |_	n|tv r@| d|  n|||_	|t
jd }	|	d urct|	s[| d|	  |d|	 |_nd |_|t
jd }
|t
jd }|t
jd }|
d ur|d ur| d |
d ur||
}| j|_| j|_n|d urt|s| d|  | jdu r|| jv r| j| }nt }|| j|< |}nt| }}| j|_| j|_ny|d ur=|D ]}|t
jkr|t
jkr| d|  q|d	krt  |_}| j|_| j |_| j!|_n3|d
krd |_t"j# }|_| j|_| j$|_nt%dt
j&d}| j'|_t(di|_)| j*|_| j'|_| j+|_||_,d S d }| j|_| j|_| j|_|t
j-d  }|_-|j.}|d urb||}nX|D ]U}|ttss||}n|t/v rzqd|t0v r| d|  n||}|t"j1krt2|| }n|d urd }t%|| ||}|d u rt }| j34|||f qd|d u rd|_d |_,d S d |_||_,d S )Nr   z Invalid property element URI: %sz&rdf:ID value is not a value NCName: %sr   z=Property element cannot have both rdf:nodeID and rdf:resourcer   Fz#Property attr '%s' now allowed hereResource
Collectionrm   )rO   r   r   )5r   rw   r   r   rQ   rM   r   rl   r=   rK   r   r0   r?   PROPERTY_ELEMENT_EXCEPTIONSr   ry   r)   r   rI   r+   r   r,   r   rF   r   rH   rS   r`   r   rJ   property_element_charrG   r   r   r   nillist_node_element_endr   
XMLLiteralliteral_element_charr   rP   literal_element_startliteral_element_endrL   rO   rN   PROPERTY_ELEMENT_ATTRIBUTESr   r*   r   rR   r   )r4   rY   rZ   rv   r   rw   r   r   rL   rI   r+   r   
parse_typerJ   r   rO   rN   rK   r   r8   r8   r9   r     s   
























z$RDFXMLHandler.property_element_startrQ   c                 C  s&   | j }|jd ur| j|7  _d S d S rX   )rw   rQ   )r4   rQ   rw   r8   r8   r9   r     s   
z#RDFXMLHandler.property_element_charc                 C  s   | j }|jd ur#|jd u r#|j}|jd urd }t|j||j|_d |_| jj| jkr<|jt	j
kr<| j|jt	jt	j
f |jd ura| j| jj|j|jf |jd ura| |j| jj|j|jf d |_d S rX   )rw   rQ   rL   rN   rO   r   r   rH   r   r   r   rR   r   rM   restrx   rJ   rK   rI   r   )r4   rY   rZ   rw   literalLangr8   r8   r9   r     s"   



z"RDFXMLHandler.property_element_endc                 C  s   | j }| jjtjkr(t }|| j_| j| jjtj|j	f || j_
d | j_d S t }| j| jjtj|f | j|tj|j	f || j_d S rX   )rw   rx   rM   r   r   r   rR   r   firstrJ   rL   rG   r   )r4   rY   rZ   rw   rM   r8   r8   r9   r   %  s   z#RDFXMLHandler.list_node_element_endc                 C  s`  | j }| j| j_| j| j_| j| j_| jj	
 |_	|d ra| j|d  }|r0d||d f |_nd|d  |_|d |j	vr`||j	|d < |rU| jd||d f 7  _n| jd|d  7  _nd|d  |_| D ]:\}}|d r|d |j	vr| j|d  |j	|d < |j	|d  d |d  }n|d }| jd|t|f 7  _ql| jd	7  _d S )
Nr   z<%s:%sr<   z<%sz xmlns:%s="%s"z xmlns="%s":z %s=%s>)rw   r   r   rF   r   rG   r   rH   rx   rP   rp   rb   rL   r   r   )r4   rY   rZ   rv   rw   ri   valuer8   r8   r9   r   7  s2   


z#RDFXMLHandler.literal_element_startc                 C  s   | j  jt|7  _d S rX   )rw   rL   r   )r4   rQ   r8   r8   r9   r   Y  s   z"RDFXMLHandler.literal_element_charc                 C  sb   |d r| j |d  }|rd||d f }nd|d  }nd|d  }| j j| jj| 7  _d S )Nr   z</%s:%s>r<   z</%s>)rb   rx   rL   rw   )r4   rY   rZ   ri   rH   r8   r8   r9   r   \  s   z!RDFXMLHandler.literal_element_endN)rR   r   )rU   rV   )rd   r   )ri   rj   rk   rl   rU   rV   )ri   rj   rU   rV   )rY   ru   rv   r   rU   rV   )rY   ru   rU   rV   )r   rl   rU   rV   )r   r   r   r"   )r   rl   rU   r   )rU   r   )r   rl   rU   r   )rY   ru   rv   r   rU   r   )rY   r   rv   r   rU   rV   )rY   r   rU   rV   )rQ   rl   rU   rV   )#rA   rB   rC   r3   rT   re   rg   rr   rt   r   r   r   r   r   r   r   r   propertyrw   r   r   r   rx   r   r   r]   r   r   r   r   r   r   r   r   r   r8   r8   r8   r9   r&      s@    













	






S

~



"r&   r   r   rR   r   rU   xmlreader.XMLReaderc                 C  sd   t  }z|dd W n	 ty   Y nw |tjd t|}||  || |	t
  |S )Nr   r-   r<   )r   start_namespace_declAttributeError
setFeaturer   feature_namespacesr&   re   setContentHandlersetErrorHandlerr   )r   rR   parserrdfxmlr8   r8   r9   r#   h  s   

r#   c                   @  s   e Zd Zdd ZdddZdS )r'   c                 C  rW   rX   r8   r>   r8   r8   r9   r3   {  rh   zRDFXMLParser.__init__sourcer   sinkr   argsr   rU   rV   c                 K  s@   t ||| _| j }|dd }|d ur||_| j| d S )NrS   )r#   _parsergetContentHandlerry   rS   parse)r4   r   r   r   content_handlerrS   r8   r8   r9   r   ~  s   
zRDFXMLParser.parseN)r   r   r   r   r   r   rU   rV   )rA   rB   rC   r3   r   r8   r8   r8   r9   r'   z  s    r'   N)r   r   rR   r   rU   r   )L__doc__
__future__r   typingr   r   r   r   r   r   r	   urllib.parser
   r   xml.saxr   r   r   xml.sax.handlerr   xml.sax.saxutilsr   r   rdflib.exceptionsr   r   rdflib.graphr   rdflib.namespacer   r   rdflib.parserr   r   rdflib.plugins.parsers.RDFVOCr   rdflib.termr   r   r   r   xml.sax.xmlreaderr   r   r    r!   r"   __all__r=   r(   r)   r*   r+   r,   r   r   rO   CORE_SYNTAX_TERMSr   r0   SYNTAX_TERMS	OLD_TERMSr   r   r   r   r   r   rz   r}   r$   r%   ContentHandlerr&   r#   r'   r8   r8   r8   r9   <module>   s    $
&   
c