o
    mi                     @  s   d Z ddlmZ ddlZddlZddlZddlmZ ddlZ	ddl	m
Z
mZmZ ddlmZ dd d	D Zd
ZdZdZi fddZdd Zdd ZedkrRe  dS dS )z
A commandline tool for drawing RDFS Class diagrams in Graphviz DOT
format

You can draw the graph of an RDFS file directly:

```bash
rdf2dot my_rdfs_file.rdf | dot -Tpng | display
```
    )annotationsN)Dict)RDFRDFSXSD)
Identifierc                 C  s   g | ]}t | qS  )r   .0xr   r   O/home/kim/smarthome/.venv/lib/python3.10/site-packages/rdflib/tools/rdfs2dot.py
<listcomp>       r   ))ZanyURIZbase64BinarybooleanbytedateZdateTimedecimaldoubledurationfloatZgDayZgMonthZ	gMonthDayZgYearZ
gYearMonthZ	hexBinaryIDZIDREFZIDREFSintintegerlanguagelongNameZNCNameZnegativeIntegerZNMTOKENZNMTOKENSZnonNegativeIntegerZnonPositiveIntegerZnormalizedStringZpositiveIntegerZQNameZshortstringtimetokenZunsignedByteZunsignedIntZunsignedLongZunsignedShortblueblackc                   s  t t}i   fdd}dd }|d | tjtjD ]}||}q| 	tj
D ]\}}||}||}|d||tf  q+| tjtjD ]M}t| |tj| |tjD ]:\}	}
|
tv si|
tjkr||
| }|
tjkrud}|||	 ||| |f q\|d||	||
t||| f  q\qJ  D ]+\}}|d	||f  d
d t|| D }d}|||t||| d|f  q|d dS )zT
    Convert the RDFS schema in a graph
    writes the dot output to the stream
    c                   s    |  vrdt    | <  |  S )Nznode%d)len)ndnodesr   r   nodeT   s   zrdfs2dot.<locals>.nodec                 S  sF   | | tj}|d u r!z|j| d }W |S  ty    Y |S w |S )N   )valuer   labelZnamespace_managerZcompute_qname	Exception)xxZgrfZlblr   r   r   r(   Y   s   zrdfs2dot.<locals>.labelz/digraph { 
 node [ fontname="DejaVu Sans" ] ; 
z	%s -> %s [ color=%s ] ;
literalz$	%s -> %s [ color=%s, label="%s" ];
z# %s %s
c                 S  s   g | ]}d | qS )z,<tr><td align='left'>%s</td><td>%s</td></tr>r   r	   r   r   r   r   ~   r   zrdfs2dot.<locals>.<listcomp>z%s [ shape=none, color=%s label=< <table color='#666666' cellborder='0' cellspacing='0' border='1'><tr><td colspan='2' bgcolor='grey'><B>%s</B></td></tr>%s</table> > ] 
 z}
N)collectionsdefaultdictsetwriteZsubjectsr   typer   ClassZsubject_objectsZ
subClassOfISACOLORProperty	itertoolsproductobjectsdomainrangeXSDTERMSLiteraladd	EDGECOLORitemssorted	NODECOLORjoin)gstreamoptsfieldsr%   r(   r   nyabZl_ufZopstrr   r#   r   rdfs2dotK   sF   

	



$rL   c                   C  s   t jd d S )Nz
rdfs2dot.py [-f <format>] files...
Read RDF files given on STDOUT, writes a graph of the RDFS schema in
DOT language to stdout
-f specifies parser to use, if not given,

)sysstderrr0   r   r   r   r   _help   s   rO   c                   C  s   t jjtt d S )N)rdflibextrasZcmdlineutilsmainrL   rO   r   r   r   r   rR      s   rR   __main__)__doc__
__future__r   r-   r5   rM   typingr   Zrdflib.extras.cmdlineutilsrP   r   r   r   Zrdflib.termr   r:   r=   r@   r3   rL   rO   rR   __name__r   r   r   r   <module>   s*    /B
