#<HTML>
#<XMP>
# KEHOME/bin/mkrGetData
# Aug/9/2003

# Usage:
#	mkrGetData question
#	GetData subject predicate inverse prefix suffix
#
#	mkrGetData ? has name = value
#	GetResource Resource value prefix suffix
#
#	mkrGetData ? isa genus with name = value
#	GetResource genus value prefix suffix
#
# question ::=
#	subject verb object
#	subject verb object = value
#	subject verb object with name = value
#
# Note:
#	prefix & suffix are labels for output

subject="$1"
verb="$2"
object="$3"
if   [ "$3" = "name" ]
then genus="Resource"; attr="name"; value="$5"
elif [ "$5" = "name" ]
then genus="$3"; attr="name"; value="$7"
else genus=""; attr=""; value=""
fi
#echo "# INFO: mkrGetData: subject=$subject"
#echo "# INFO: mkrGetData: verb=$verb"
#echo "# INFO: mkrGetData: object=$object"
#echo "# INFO: mkrGetData: genus=$genus"
#echo "# INFO: mkrGetData: value=$value"
case "$genus" in
"")
	value="";;
Resource)	
	# should allow any length
	if [ -n "$6" ]
	then value="$value $6"
	fi;
	if [ -n "$7" ]
	then value="$value $7"
	fi;
	if [ -n "$8" ]
	then value="$value $8"
	fi;
	if [ -n "$9" ]
	then value="$value $9"
	fi;;
*)	
	# should allow any length
	if [ -n "$8" ]
	then value="$value $8"
	fi;
	if [ -n "$9" ]
	then value="$value $9"
	fi;;
esac
#echo "# INFO: mkrGetData: new value=$value"

case "$subject" in
\?) # inverse property
    if [ -n "$value" ]
    then
	# ? verb object = value
	case "$attr" in
	name)
		GetResource "$genus" "$value" "" "isa $genus with name = $value"| sort -f ;;
	*)
		GetData "$value" "$object" yes "" "$verb $object = $value" ;;
	esac;
	exit
    fi;

    # ? verb object
    case "$verb" in
    is)	 mkrGetData "$object" "is"  \? ;;
    isa) mkrGetData "$object" "isc" \? ;;
    isu) mkrGetData "$object" "isp" \? ;;
    iss) mkrGetData "$object" "isg" \? ;;
    isc) mkrGetData "$object" "isa" \? ;;
    isp) mkrGetData "$object" "isu" \? ;;
    isg) mkrGetData "$object" "iss" \? ;;

    haspart) mkrGetData "$object" isapart \? ;;
    isapart) mkrGetData "$object" haspart \? ;;
    isa\*)   mkrGetData "$object" isc\*   \? ;;
    isc\*)   mkrGetData "$object" isa\*   \? ;;

    has)  GetData "$object" domain no "" "has $object" ;;
    do)   GetData "$object" domain no "" "do $object done" ;;
    rel)  GetData "$object" domain no "" "rel $object" ;;
    *)    GetData "$object" domain no "" "$verb $object" ;;
    esac;;

*)  # property
    case "$verb" in
    \?)  echo "# WARNING: $verb not implemented" >&2 ;;
    is)	 echo "# WARNING: $verb not implemented" >&2 ;;

    isa) mkrGetData "$subject" iss \? ;
	 mkrGetData "$subject" isu \? ;;
    isu) GetData "$subject" type       no "$subject isu" ;;
    iss) GetData "$subject" subClassOf no "$subject iss" ;;
    isc) mkrGetData "$subject" "isg" \? ;
	 mkrGetData "$subject" "isp" \? ;;
    isp) GetData "$subject" type       yes "$subject isp" ;;
    isg) GetData "$subject" subClassOf yes "$subject isg" ;;

    haspart) echo "# WARNING: $verb not implemented" >&2 ;;
    isapart) echo "# WARNING: $verb not implemented" >&2 ;;
    isa\*)   echo "# WARNING: $verb not implemented" >&2 ;;
    isc\*)   echo "# WARNING: $verb not implemented" >&2 ;;

    has)
	case "$object" in 
	\?)
	    #echo "# WARNING: attributes not separated from other char." >&2 ;
	    GetData "$subject" arcs      no "$subject has" ;;
	*)  GetData "$subject" "$object" no "$subject has $object =" ;;
	esac;;
    do)	
	case "$object" in 
	\?)
	    #echo "# WARNING: actions not separated from other char." >&2 ;
	    GetData "$subject" arcs      no "$subject do" "done" ;;
	*)  GetData "$subject" "$object" no "$subject do $object od" "done" ;;
	esac;;
    rel)
	case "$object" in 
	\?)
	    #echo "# WARNING: relations not separated from other char." >&2 ;
	    GetData "$subject" arcs      no "$subject rel" ;;
	*)  GetData "$subject" "$object" no "$subject rel $object =" ;;
	esac;;

    *)
	GetData "$subject" "$object" no "$subject $verb $object =" ;;
    esac;;

esac # end case $subject
#</XMP>
#</HTML>
