                    (inject-defaults defaults#)
                    (v/validate validators#))]
            (if (nil? err#) (~mctor opts#) (throw+ err#))))
+
        (defn ~dctor
+         {:doc ~(str "Executes a :describe query for given entity ID in graph.\n"
+                     "  Returns seq of triples. ")
+          :arglists '([~'graph ~'id])}
          [g# id#]
          (q/query
           {:describe '~'?id
            :from g#
-           :query [{:where [['~'?id "rdf:type" ~type]]}]
+           :query [{:where [['~'?id (-> ~props :type :prop) ~type]]}]
            :values {'~'?id #{id#}}}))
+       
        (defn ~dctor-as
+         {:doc ~(str "Constructs a new `" (namespace-munge *ns*) "." `~name "` entity based on a graph query\n"
+                     "  for given entity ID and its specified props/rels. If returned query results\n"
+                     "  conflict with entity validation, throws map of errors using `slingshot/throw+`.")
+          :arglists '([~'graph ~'id])}
          [g# id#]
          (->> ~props
               (build-describe-spec g# id#)

              (q/accumulate-result-vars)
              ;;((fn [x#] (prn x#) x#))
              (prepare-describe-results ~props)
              (~ctor)))
       )))

(defentity User (:User imago)
  {:user-name {:prop (:nick foaf)

         trio/PTripleSeq
         (~'triple-seq
           [_#] (filtered-triple-seq {~'id (triple-map ~props _#)})))

       (defn ~ctor
         {:doc ~(str "Constructs a new `" (namespace-munge *ns*) "." `~name "` entity from given map.\n"
                     "  Applies entity's property intializers, defaults & validation.\n"
                     "  In case of validation errors, throws map of errors using `slingshot/throw+`.")
          :arglists '([~'props])}
         [opts#]
         (let [[opts# err#]
               (-> opts#
