Macro dict

Source
macro_rules! dict {
    ($name:ident = $uri:literal: $(
            $(+ $i:ident = $l:literal)?
            $(DATAPROP $di:ident = $dl:literal $(<: $( $($dsup:ident)::*  ),* )? $(: $($dtp:ident)::* )? $(@ $dcl:literal)? )?
            $(OBJPROP $oi:ident = $ol:literal $(<: $( $($osup:ident)::*  ),* )? $(( $dom:ident => $range:ident ))? $(- $inv:ident)? $(! $disj:ident)? $(@ $ocl:literal)? )?
            $(CLASS $ci:ident = $cl:literal $(<: $( $($csup:ident)::*  ),* )? $(= $left:ident u $right:ident)? $(@ $ccl:literal)? )?
            $({
              $($subj_n:ident)::*
              <$($pred_n:ident)::*>
              $(<$($obj_n:ident)::*>)?
              $(S $obj_str:literal)?
            })?
        ;)*) => { ... };
    (@triple $($subj:ident)::*;$($pred:ident)::*;$(NAME $($obj_n:ident)::*)? $(STRING $obj_str:literal)? ) => { ... };
    (@tp $i:ident;$($tp:ident)::*) => { ... };
    (@subprop $i:ident;$($sup:ident)::*) => { ... };
    (@subclass $i:ident;$($sup:ident)::*) => { ... };
    (@class $i:ident;) => { ... };
    (@comment $i:ident;$c:literal;) => { ... };
    (@quad $sub:expr;$pred:expr;$obj:expr) => { ... };
    (@final $name:ident = $uri:literal;
            $($i:ident = $l:literal,)*;
            $($($quad:tt)*;)*
        ) => { ... };
    (@old $name:ident = $uri:literal;
            $($i:ident = $l:literal,)*;
            $($sub:expr,$pred:expr,$obj:expr;)*
        ) => { ... };
}
Available on crate feature rdf only.