o
    ÒmÆiY_  ã                   @  sl  d Z ddlmZ ddlZddlZddlmZmZmZm	Z	m
Z
mZmZ ddlZddlmZmZ ddlmZmZ ddlmZmZ ddlmZmZmZmZmZ d	d
lmZmZm Z  d	dl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 d	dl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 ddgZ8e e9ej:ƒe.e0ƒZ;dZ<G dd„ dej=j>ƒZ?						d$d%d!d„Z@G d"d#„ d#ƒZ>dS )&aY  
This parser will interpret a JSON-LD document as an RDF Graph. See http://json-ld.org/

Example:
    ```python
    >>> from rdflib import Graph, URIRef, Literal
    >>> test_json = '''
    ... {
    ...     "@context": {
    ...         "dc": "http://purl.org/dc/terms/",
    ...         "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    ...         "rdfs": "http://www.w3.org/2000/01/rdf-schema#"
    ...     },
    ...     "@id": "http://example.org/about",
    ...     "dc:title": {
    ...         "@language": "en",
    ...         "@value": "Someone's Homepage"
    ...     }
    ... }
    ... '''
    >>> g = Graph().parse(data=test_json, format='json-ld')
    >>> list(g) == [(URIRef('http://example.org/about'),
    ...     URIRef('http://purl.org/dc/terms/title'),
    ...     Literal("Someone's Homepage", lang='en'))]
    True

    ```
é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚDictÚIterableÚListÚOptionalÚUnion)ÚConjunctiveGraphÚGraph)ÚRDFÚXSD)ÚInputSourceÚURLInputSource)ÚBNodeÚIdentifiedNodeÚLiteralÚNodeÚURIRefé   )ÚUNDEFÚContextÚTerm)ÚCONTEXTÚGRAPHÚIDÚINCLUDEDÚINDEXÚJSONÚLANGÚLISTÚNESTÚNONEÚREVÚSETÚTYPEÚVALUEÚVOCAB)Ú_HAS_ORJSONÚVOCAB_DELIMSÚcontext_from_urlinputsourceÚjsonÚorjsonÚsource_to_jsonÚJsonLDParserÚto_rdfTc                      s6   e Zd Z‡ fdd„Z							dddd„Z‡  ZS )r.   c                   s   t t| ƒ ¡  d S ©N)Úsuperr.   Ú__init__)Úself©Ú	__class__© úW/home/kim/smarthome/.venv/lib/python3.10/site-packages/rdflib/plugins/parsers/jsonld.pyr2   Q   s   zJsonLDParser.__init__çš™™™™™ñ?Fúutf-8NÚsourcer   Úsinkr   ÚversionÚfloatÚ	skolemizeÚboolÚencodingúOptional[str]ÚbaseÚcontextúLOptional[Union[List[Union[Dict[str, Any], str, None]], Dict[str, Any], str]]Úgeneralized_rdfúOptional[bool]Úextract_all_scriptsÚkwargsr   ÚreturnÚNonec
              	   K  s  |dvrt  d| ¡ |s| | ¡ p| ¡ pd¡}|}|s5t|dƒr5t|dƒr5tr1t|tƒs1J ‚t	|ƒ}zt
|ƒ}W n tyF   d}Y nw z	t| ¡ ƒj}W n ty[   d}Y nw t|||	ƒ\}}|durnt||d}|jszt|j|jd	}n|}t|||||t|ƒ|d
 dS )aè  Parse JSON-LD from a source document.

        The source document can be JSON or HTML with embedded JSON script
        elements (type attribute = `application/ld+json`). To process as HTML
        `source.content_type` must be set to "text/html" or
        `application/xhtml+xml.

        Args:
            source: InputSource with JSON-formatted data (JSON or HTML)
            sink: Graph to receive the parsed triples
            version: parse as JSON-LD version, defaults to 1.1
            skolemize: whether to skolemize blank nodes, defaults to False
            encoding: character encoding of the JSON (should be "utf-8"
            base: JSON-LD [Base IRI](https://www.w3.org/TR/json-ld/#base-iri), defaults to None
            context: JSON-LD [Context](https://www.w3.org/TR/json-ld/#the-context), defaults to None
            generalized_rdf: parse as [Generalized RDF](https://www.w3.org/TR/json-ld/#relationship-to-rdf), defaults to False
            extract_all_scripts: if source is an HTML document then extract
                script element). This is ignored if `source.system_id` contains
                a fragment identifier, in which case only the script element with
                matching id attribute is extracted.
        )r9   zutf-16z9JSON should be encoded as unicode. Given encoding was: %sÚ ÚurlÚlinksr8   N©rB   )ÚstoreÚ
identifier)r>   )ÚwarningsÚwarnZ
absolutizeZgetPublicIdZgetSystemIdÚhasattrr   Ú
isinstancer   r*   r=   Ú
ValueErrorr   ÚfragmentÚ	Exceptionr-   Úcontext_awarer
   rO   rP   r/   r?   )r3   r:   r;   r<   r>   r@   rB   rC   rE   rG   rH   Úcontext_dataZfragment_idÚdataZ	html_baseZ	conj_sinkr6   r6   r7   ÚparseT   sL   (ÿÿÿÿ
ùzJsonLDParser.parse)r8   Fr9   NNFF)r:   r   r;   r   r<   r=   r>   r?   r@   rA   rB   rA   rC   rD   rE   rF   rG   rF   rH   r   rI   rJ   )Ú__name__Ú
__module__Ú__qualname__r2   r[   Ú__classcell__r6   r6   r4   r7   r.   P   s    ðFrZ   r   Údatasetr   rB   rA   rY   rD   r<   úOptional[float]rE   r?   Úallow_lists_of_listsrF   r>   c           
      C  s6   t ||d}|r| |¡ t|||d}	|	 | ||¡S )N)rB   r<   )rE   rb   r>   )r   ÚloadÚParserr[   )
rZ   r`   rB   rY   r<   rE   rb   r>   rC   Úparserr6   r6   r7   r/   ®   s   
ýc                   @  s°   e Zd Z			dGdHdd	„ZdIdd„Z	dJdKdd„ZdLdd„Z		dMdNd%d&„ZdOd*d+„Ze	dPd.d/„ƒZ
	dJdQd2d3„ZdRd6d7„ZdSd9d:„ZdTd=d>„Ze	dUdAdB„ƒZedVdEdF„ƒZdS )Wrd   FNrE   r?   rb   rF   r>   c                 C  s(   || _ || _|d ur|nt| _i | _d S r0   )r>   rE   ÚALLOW_LISTS_OF_LISTSrb   Úinvalid_uri_to_bnode)r3   rE   rb   r>   r6   r6   r7   r2   Ë   s   ÿý
zParser.__init__rZ   r   rC   r   r`   r   rI   c                 C  sÊ   d}t |tƒr
|}nt |tƒr)| t¡}|r| ||j¡ d}|}t |tƒs)|g}|jr3| d |j¡ |j	 
¡ D ]\}}|jrL|j t¡rL| ||j¡ q8|jrS|jn|}	|D ]}
|  ||	||
|¡ qW|	S )NFT)rT   ÚlistÚdictÚgetr   rc   rB   ZvocabÚbindÚtermsÚitemsÚidÚendswithr)   rX   Zdefault_contextÚ_add_to_graph)r3   rZ   rC   r`   Ú
topcontextÚ	resourcesÚlocal_contextÚnameÚtermÚgraphÚnoder6   r6   r7   r[   Ú   s*   



€zParser.parserv   rw   rq   úOptional[Node]c                 C  sR  t |tƒr
| |¡rd S t|v r$|s$|t }|r| |¡}nt|jd}| |¡}| |¡}|d u rD|  	||¡}|d urDt
|ƒdkrD|}t |tƒrP|  ||¡}	n
tƒ }	| jrZ|	 ¡ }	|	d u r`d S |d u }
| ¡ D ]>\}}|tksw|| t¡v rxqh|tksƒ|| t¡v rš| ¡ D ]\}}| j||||	||d|
d q‡qh| j||||	|||
d qh|	S )NrN   r   T)ÚreverseÚno_id)rz   )rT   ri   Ú	get_valuer   Ú
subcontextr   Zdoc_baseÚget_context_for_typeÚget_idÚ_get_nested_idÚlenÚstrÚ
_to_rdf_idr   r>   rm   Úget_keysr   r#   Ú_key_to_graph)r3   r`   rv   rC   rw   rq   rs   Úid_valZ	nested_idÚsubjrz   ÚkeyÚobjZrkeyZrobjr6   r6   r7   rp   ÷   sN   


øÿzParser._add_to_graphúDict[str, Any]rA   c           	      C  s¶   |  ¡ D ]T\}}|jdkrX|| t¡v rX|j |¡}|r"|jd u r"qt|tƒr)|n|g}|D ])}t|t	ƒs6q.| 
|¡}|sL| |j |¡¡}|  ||¡}t|tƒrW|    S q.qd S )Nr8   )rm   r<   rƒ   r!   rl   rj   rn   rT   rh   ri   r~   Úget_context_for_termr   r   )	r3   rC   rw   r‡   rˆ   ru   Úobjsr…   r|   r6   r6   r7   r   7  s(   


ÿ
ÿ€ñzParser._get_nested_idr†   r   r‡   r   rˆ   ry   rz   rJ   c	              
     sÄ  t |tƒr|}	n|g}	ˆ j |¡}
|
r;|
j}|
jtkr"|  |¡g}	nt|
j	v r.|  
|	¡g}	nt |tƒr:|  ˆ |
|¡}	nd }t||fv rEt}
t||fv rp|jr_|s_trYt |tƒsYJ ‚| |¡}n|}|	D ]
}|  ||ˆ |¡ qcd S t||fv r…|	D ]
}|  ||ˆ |¡ qxd S t||fv rš|	D ]
}|  ||ˆ |¡ qd S ˆ jdkrì|ˆ  t¡v rìˆ j |¡}
|
rµ|
jd u rµd S t |tƒr¼|n|g}|D ](}t |tƒsÉqÁ| ¡ D ]\}}|ˆ  t¡v rÙqÍˆ  |¡}|  ||||||¡ qÍqÁd S |
rñ|
jnˆ  |¡}ˆ  |
¡‰ d‡ ‡fdd„‰ˆ|	ƒ}	|sd S |
r|
j r| }|  !|¡}|r1| j"s$d S t#|ƒ}| j$r0| $¡ }nt%|ƒ}|	D ](}|  &||ˆ |
|¡}|d u rIq7|rV| '|||f¡ q7| '|||f¡ q7d S )	Nr8   ÚnúIterable[Any]rI   ú	List[Any]c                   sT   g }| D ]#}t |tƒrˆ  |¡}|d ur|}t |tƒr"|ˆ|ƒ7 }q| |¡ q|S r0   )rT   ri   Zget_setrh   Úappend)rŒ   Z	flattenedrˆ   r‹   ©rC   Úflattenr6   r7   r‘   •  s   


z%Parser._key_to_graph.<locals>.flatten)rŒ   r   rI   rŽ   )(rT   rh   rl   rj   rn   Útyper   Ú_to_typed_json_valuer    Ú	containerÚ_expand_nested_listri   Ú_parse_containerr%   Ú	TYPE_TERMr   rX   r   r
   Zget_contextrp   r$   r   r<   rƒ   r!   rm   r   r}   r„   ÚexpandrŠ   ry   Ú_get_bnodeidrE   r   r>   r   Ú
_to_objectÚadd)r3   r`   rv   rC   r†   r‡   rˆ   ry   rz   Ú	obj_nodesru   Zterm_idZsubgraphZonoder‹   ZnkeyZnobjr|   Zpred_uriÚbidÚpredZobj_noder6   r   r7   r„   J  s’   



€


ú

€
ùzParser._key_to_graphru   r   rŽ   c                   sØ  t ˆjv r2g }| ¡ D ]$\}}t|tƒs|g}|ˆ  t¡v r#||7 }q|D ]	}| ||f¡ q%q|S ˆ jdk}|rNt	ˆjv rNt
ˆjv rN‡ fdd„| ¡ D ƒS |rct	ˆjv rctˆjv rcdd„ | ¡ D ƒS |rqt	ˆjv rqtt	|iƒgS |rƒt
ˆjv rƒ‡ fdd„| ¡ D ƒS |r—tˆjv r—‡ ‡‡fdd„| ¡ D ƒS tˆjv rég }| ¡ D ]D\}	}
t|
tƒs®|
g}
|
D ]5}|ràˆjrà|	ˆ  t¡vràt|tƒsÇt
|i}| ˆjg ¡}t|tƒsÖ|g}| |	¡ ||ˆj< | |¡ q°q¢|S |gS )Nr8   c                   sH   g | ] \}}|ˆ   t¡v rtt|iƒnt|tƒr tt|t|iƒn|‘qS r6   )rƒ   r"   ri   r   rT   r   ©Ú.0ÚkÚo©rC   r6   r7   Ú
<listcomp>Ð  s    ýÿüz+Parser._parse_container.<locals>.<listcomp>c                 S  s   g | ]
\}}t t|iƒ‘qS r6   )ri   r   rŸ   r6   r6   r7   r¤   Ú  s    c                   s@   g | ]\}}t |tƒr|ˆ  t¡vrtt|ifi |¤Žn|‘qS r6   )rT   ri   rƒ   r"   r   rŸ   r£   r6   r7   r¤   à  s    ýÿÿüc              	     sd   g | ].\}}t |ttfƒr.|ˆ  t¡vr.ˆ ˆ t |tƒr*tˆjtkr'ˆ  	|¡n|in||¡n|‘qS r6   )
rT   ri   r   rƒ   r"   Ú	_add_typer   r’   r'   r˜   rŸ   ©rC   r3   ru   r6   r7   r¤   ê  s    ý÷	÷ÿù
ô)r   r”   rm   rT   rh   rƒ   r"   r   r<   r   r   r   ri   r%   Úindexrj   )r3   rC   ru   rˆ   rœ   ÚlangÚvaluesÚvZv11r‡   Únodesrw   r6   r¦   r7   r–   ¾  s\   


ÿ

ú	
ú	ò





÷
zParser._parse_containerr¢   r¡   c                 C  s8   |   |¡pg }|rt|tƒs|g}| |¡ ||t< |S r0   )Úget_typerT   rh   r   r%   )rC   r¢   r¡   Zotyper6   r6   r7   r¥     s   
zParser._add_typeúOptional[Term]Úinlistc                 C  s"  t |tƒr|\}}|d u rd S |rd|v rd S t||dS t |tƒr@| |¡}	|	d ur?|r2| js2d S |  |||||	¡}
|
r?|
S nm|r‡|jr‡|jtkrP|  	|¡}n]|d u rVd S |jt
krht |tƒrht
| |¡i}nE|jtkrt |tƒrt
| |¡p|| |¡i}n.t|jt|i}n&|d u rd S t |tƒr™t|tjdS |r¤|jtur¤|j}n|j}t||dS | |¡}| rº| |¡p»d }| |¡}|| t¡v r×|  	|¡}| |¡}| |¡}|så| t¡|v såt|v r	|d u rëd S |rùd|v ród S t||dS |rt|| |¡dS t|ƒS |  ||||¡S )Nú )r¨   )Údatatype)rT   Útupler   ri   Zget_listrb   Ú	_add_listr’   r   r“   r   r   Úresolver'   r˜   Zresolve_irir%   r&   r=   r   ÚdoubleÚlanguager   Zget_languager¬   r{   rƒ   Úget_keyrp   )r3   r`   rv   rC   ru   rw   r®   Úvaluer¨   Ú	node_listZlistrefr°   r6   r6   r7   rš     sh   
	


€







zParser._to_objectr…   úOptional[IdentifiedNode]c                 C  s€   |   |¡}|rt|ƒ}| jr| ¡ S |S | |¡}| js"d|vr"d S t|ƒ}t|ƒs>|| jvr9tt 	d¡ƒ| j|< | j| }|S )Nú:é   )
r™   r   r>   r³   rE   r   r   rg   ÚsecretsZtoken_urlsafe)r3   rC   r…   r   ÚbÚurirw   r6   r6   r7   r‚   f  s   



zParser._to_rdf_idÚrefc                 C  s&   |  d¡sd S | dd¡d }|pd S )Nz_:é   éÿÿÿÿ)Ú
startswithÚsplit)r3   r¿   r   r6   r6   r7   r™   x  s   
zParser._get_bnodeidr¸   r   c              	   C  sØ   t |tƒs|g}tƒ }| jrt |tƒr| ¡ }|d }}|D ]<}	|	d u r%q|r2| |tj|f¡ |}| j|||||	dd}
|
d u rBq| |tj|
f¡ tƒ }| jrZt |tƒrZ| ¡ }q|ri| |tjtj	f¡ |S tj	S )NT)r®   )
rT   rh   r   r>   r›   r   Úrestrš   ÚfirstÚnil)r3   r`   rv   rC   ru   r¸   Z
first_subjr†   rÄ   rw   rˆ   r6   r6   r7   r²     s0   

€zParser._add_listr·   úDict[str, str]c                 C  sB   t rtj| tjtjB d d¡}n	tj| dddd}ttj	t
|iS )N)Úoptionr9   )ú,rº   TF)Ú
separatorsÚ	sort_keysÚensure_ascii)r(   r,   ÚdumpsZOPT_SORT_KEYSZOPT_NON_STR_KEYSÚdecoder+   r%   r   r   r&   )r·   Z
val_stringr6   r6   r7   r“   ª  s   
þýÿþzParser._to_typed_json_valuerœ   úDict[str, List[Any]]c                   s   ‡ fdd„|D ƒ}t |iS )Nc                   s$   g | ]}t |tƒrˆ  |¡n|‘qS r6   )rT   rh   r•   )r    r¢   ©Úclsr6   r7   r¤   ¼  s    ÿz.Parser._expand_nested_list.<locals>.<listcomp>)r    )rÑ   rœ   Úresultr6   rÐ   r7   r•   º  s   
ÿzParser._expand_nested_list)FNF)rE   r?   rb   rF   r>   r?   )rZ   r   rC   r   r`   r   rI   r   )F)r`   r   rv   r   rC   r   rw   r   rq   r?   rI   rx   )rC   r   rw   r‰   rI   rA   )FF)r`   r   rv   r   rC   r   r†   r   r‡   r   rˆ   r   ry   r?   rz   r?   rI   rJ   )rC   r   ru   r   rˆ   r‰   rI   rŽ   )rC   r   r¢   r‰   r¡   r   rI   r‰   )r`   r   rv   r   rC   r   ru   r­   rw   r   r®   r?   rI   rx   )rC   r   r…   r   rI   r¹   )r¿   r   rI   rA   )r`   r   rv   r   rC   r   ru   r­   r¸   r   rI   r   )r·   r   rI   rÇ   )rœ   rŽ   rI   rÏ   )r\   r]   r^   r2   r[   rp   r   r„   r–   Ústaticmethodr¥   rš   r‚   r™   r²   r“   Úclassmethodr•   r6   r6   r6   r7   rd   Ê   s0    ü
#ú
@÷
tPù
O

+rd   )NNNFNF)rZ   r   r`   r   rB   rA   rY   rD   r<   ra   rE   r?   rb   rF   r>   r?   )AÚ__doc__Ú
__future__r   r¼   rQ   Útypingr   r   r   r   r   r   r	   Zrdflib.parserZrdflibZrdflib.graphr
   r   Zrdflib.namespacer   r   r   r   Zrdflib.termr   r   r   r   r   Zshared.jsonld.contextr   r   r   Zshared.jsonld.keysr   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   Zshared.jsonld.utilr(   r)   r*   r+   r,   r-   Ú__all__r   r’   r—   rf   re   rd   r.   r/   r6   r6   r6   r7   Ú<module>   s2    !$D 	aò