o
    mi!f                     @  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__ W/home/kim/smarthome/.venv/lib/python3.10/site-packages/rdflib/plugins/parsers/rdfxml.pyr3   Z   s   
zBagID.__init__c                 C     |  j d7  _ td| j   S N   z_%s)r0   RDFNSr4   r8   r8   r9   next_li_   s   zBagID.next_li)__name__
__module____qualname__	__slots__r3   r?   __classcell__r8   r8   r6   r9   r$   W   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   )rE   rF   rG   r0   rH   r.   rI   rK   rL   rM   rN   rO   rP   r>   r8   r8   r9   r3   w   s   
zElementHandler.__init__c                 C  r:   r;   )r0   r   r>   r8   r8   r9   r?         zElementHandler.next_liN)r@   rA   rB   rC   r3   r?   r8   r8   r8   r9   r%   e   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_startrE   rG   stackidsbnode_ns_contexts_current_context)r4   Zdocument_elementr8   r8   r9   rT      s   
zRDFXMLHandler.resetlocatorr   c                 C  s
   || _ d S rX   )rc   )r4   rc   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   rh   rj   r8   r8   r9   startPrefixMapping   s   
z RDFXMLHandler.startPrefixMappingc                 C  s   | j d | _| j d= d S Nr\   )ra   rb   )r4   rh   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^   rn   r%   currentparentgetBASEr
   r.   r   rc   ZgetPublicIdgetSystemIdLANGrM   rE   )r4   rY   rZ   ru   r^   rv   rw   r.   fragZsystemIdrM   r8   r8   r9   startElementNS   s4   

zRDFXMLHandler.startElementNSc                 C  s   | j || | j  d S rX   )rv   rG   r^   popr4   rY   rZ   r8   r8   r9   endElementNS   rQ   zRDFXMLHandler.endElementNScontentc                 C  s   | j j}|r|| d S d S rX   )rv   rF   )r4   r   rF   r8   r8   r9   
characters   s   zRDFXMLHandler.charactersc                 C  rW   rX   r8   )r4   r   r8   r8   r9   ignorableWhitespace   rg   z!RDFXMLHandler.ignorableWhitespacec                 C  rW   rX   r8   )r4   targetrP   r8   r8   r9   processingInstruction   rg   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*   Z	StatementrI   rJ   rK   )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: )rc   rz   ZgetLineNumberZgetColumnNumberr   )r4   r   rc   infor8   r8   r9   error   s   zRDFXMLHandler.errorOptional[ElementHandler]c                 C  
   | j d S )Nr^   r>   r8   r8   r9   get_current   re   zRDFXMLHandler.get_currentc                 C  r   rr   r   r>   r8   r8   r9   get_next   re   zRDFXMLHandler.get_nextc                 C  r   )Nr   r>   r8   r8   r9   
get_parent   re   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   rv   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<   rl      xml)r   joinitems
startswithXMLNSlowerUNQUALIFIEDr=   )r4   rY   rZ   ru   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   rl   next)	r   r   r   r   getattrnode_element_startrE   node_element_endrG   )r4   rY   rZ   ru   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   rv   r   r   property_element_startrE   property_element_endrG   NODE_ELEMENT_EXCEPTIONSr   r   r)   r(   nodeIDr   r_   rS   r`   r   DescriptionrR   r   r   r*   rM   r   rk   r=   r   r   msgNODE_ELEMENT_ATTRIBUTESPROPERTY_ATTRIBUTE_EXCEPTIONSrI   )r4   rY   rZ   ru   r   rv   r   r   rH   rI   r   rM   r   rJ   rK   er8   r8   r9   r   7  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: %srl   )rw   rK   rv   r^   r   r   rI   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
Collectionrl   )rN   r   r   )5r   rv   r   r   rP   rL   r   rk   r=   rJ   r   r0   r?   PROPERTY_ELEMENT_EXCEPTIONSr   rx   r)   r   rH   r+   r   r,   r   rE   r   rG   rS   r`   r   rI   property_element_charrF   r   r   r   nillist_node_element_endr   Z
XMLLiteralliteral_element_charr   rO   literal_element_startliteral_element_endrK   rN   rM   PROPERTY_ELEMENT_ATTRIBUTESr   r*   r   rR   r   )r4   rY   rZ   ru   r   rv   r   r   rK   rH   r+   r   Z
parse_typerI   r   rN   rM   rJ   r   r8   r8   r9   r     s   
























z$RDFXMLHandler.property_element_startrP   c                 C  s&   | j }|jd ur| j|7  _d S d S rX   )rv   rP   )r4   rP   rv   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   )rv   rP   rK   rM   rN   r   r   rG   r   r   r   rR   r   rL   restrw   rI   rJ   rH   r   )r4   rY   rZ   rv   Z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   )rv   rw   rL   r   r   r   rR   r   firstrI   rK   rF   r   )r4   rY   rZ   rv   rL   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>)rv   r   r   rE   r   rF   r   rG   rw   rO   ro   rb   rK   r   r   )r4   rY   rZ   ru   rv   rh   valuer8   r8   r9   r   =  s2   


z#RDFXMLHandler.literal_element_startc                 C  s   | j  jt|7  _d S rX   )rv   rK   r   )r4   rP   r8   r8   r9   r   _  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   rw   rK   rv   )r4   rY   rZ   rh   rG   r8   r8   r9   r   b  s   z!RDFXMLHandler.literal_element_endN)rR   r   )rU   rV   )rc   r   )rh   ri   rj   rk   rU   rV   )rh   ri   rU   rV   )rY   rt   ru   r   rU   rV   )rY   rt   rU   rV   )r   rk   rU   rV   )r   r   r   r"   )r   rk   rU   r   )rU   r   )r   rk   rU   r   )rY   rt   ru   r   rU   r   )rY   r   ru   r   rU   rV   )rY   r   rU   rV   )rP   rk   rU   rV   )#r@   rA   rB   r3   rT   rd   rf   rq   rs   r}   r   r   r   r   r   r   r   propertyrv   r   r   r   rw   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   Zstart_namespace_declAttributeErrorZ
setFeaturer   Zfeature_namespacesr&   rd   ZsetContentHandlerZsetErrorHandlerr   )r   rR   parserZrdfxmlr8   r8   r9   r#   n  s   

r#   c                   @  s"   e Zd ZdZdd ZdddZdS )r'   zAn RDF/XML parser.c                 C  rW   rX   r8   r>   r8   r8   r9   r3     rg   zRDFXMLParser.__init__sourcer   sinkr   argsr   rU   rV   c                 K  s@   t ||| _| j }|dd }|d ur||_| j| d S )NrS   )r#   _parserZgetContentHandlerrx   rS   parse)r4   r   r   r   Zcontent_handlerrS   r8   r8   r9   r     s   
zRDFXMLParser.parseN)r   r   r   r   r   r   rU   rV   )r@   rA   rB   __doc__r3   r   r8   r8   r8   r9   r'     s    r'   N)r   r   rR   r   rU   r   )Lr   
__future__r   typingr   r   r   r   r   r   r	   urllib.parser
   r   Zxml.saxr   r   r   Zxml.sax.handlerr   Zxml.sax.saxutilsr   r   Zrdflib.exceptionsr   r   Zrdflib.graphr   Zrdflib.namespacer   r   Zrdflib.parserr   r   Zrdflib.plugins.parsers.RDFVOCr   Zrdflib.termr   r   r   r   Zxml.sax.xmlreaderr   r   r    r!   r"   __all__r=   r(   r)   r*   r+   r,   r   r   rN   ZCORE_SYNTAX_TERMSr   r0   ZSYNTAX_TERMSZ	OLD_TERMSr   r   r   r   r   r   ry   r{   r$   r%   ZContentHandlerr&   r#   r'   r8   r8   r8   r9   <module>   s    $
&   
f