Update of /project/cl-soap/cvsroot/cl-soap/src In directory common-lisp.net:/tmp/cvs-serv23928/src
Modified Files: namespaces.lisp wsdl.lisp Added Files: xsd.lisp Log Message: added first step towards partial XML Schema Definition implmentation to support WSDL types schema
Date: Thu Sep 15 15:37:35 2005 Author: scaekenberghe
Index: cl-soap/src/namespaces.lisp diff -u cl-soap/src/namespaces.lisp:1.5 cl-soap/src/namespaces.lisp:1.6 --- cl-soap/src/namespaces.lisp:1.5 Mon Sep 12 13:24:01 2005 +++ cl-soap/src/namespaces.lisp Thu Sep 15 15:37:34 2005 @@ -1,6 +1,6 @@ ;;;; -*- mode: lisp -*- ;;;; -;;;; $Id: namespaces.lisp,v 1.5 2005/09/12 11:24:01 scaekenberghe Exp $ +;;;; $Id: namespaces.lisp,v 1.6 2005/09/15 13:37:34 scaekenberghe Exp $ ;;;; ;;;; Definition of some standard XML namespaces commonly needed for SOAP ;;;; @@ -32,7 +32,9 @@
(defpackage :xsd (:nicknames "xsd") - (:export) + (:export "schema" "element" "simpleType" "complexType" + "sequence" "choice" "all" "attribute" + "restriction" "maxLength" "pattern" "list" "union" "enumeration") (:documentation "Package for symbols in the XML Schema Definition XML Namespace"))
(defparameter *xsd-ns* (s-xml:register-namespace +xsd-ns-uri+ "xsd" :xsd))
Index: cl-soap/src/wsdl.lisp diff -u cl-soap/src/wsdl.lisp:1.5 cl-soap/src/wsdl.lisp:1.6 --- cl-soap/src/wsdl.lisp:1.5 Tue Sep 13 21:23:48 2005 +++ cl-soap/src/wsdl.lisp Thu Sep 15 15:37:34 2005 @@ -1,6 +1,6 @@ ;;;; -*- mode: lisp -*- ;;;; -;;;; $Id: wsdl.lisp,v 1.5 2005/09/13 19:23:48 scaekenberghe Exp $ +;;;; $Id: wsdl.lisp,v 1.6 2005/09/15 13:37:34 scaekenberghe Exp $ ;;;; ;;;; The basic WSDL protocol: we parse the generic and soap specific parts ;;;; @@ -79,10 +79,6 @@ (defclass wsdl-message (abstract-wsdl-definition) ((parts :accessor get-parts :initarg :parts :initform nil)))
-(defclass wsdl-type (abstract-wsdl-definition) - ;; to be finished !!! - ((data-type-definitions))) - ;;; WSDL SOAP Model Extension Elements
(defclass wsdl-soap-address () @@ -122,6 +118,13 @@
;; one day we should handle <import> statements ;-)
+(defun lxml->types (lxml) + (let (types) + (loop :for element :in (rest lxml) :do + (if (eql (lxml-get-tag element) 'xsd:|schema|) + (push (lxml->schema-definition element) types))) + types)) + (defun lxml->operation-element (lxml) (let* ((attributes (lxml-get-attributes lxml)) (message (getf attributes :|message|)) @@ -247,7 +250,8 @@ (rest element))) (wsdl-soap:|address| (setf (get-extension wsdl-port) (make-instance 'wsdl-soap-address - :location (getf (lxml-get-attributes element) :|location|)))))) + :location (getf (lxml-get-attributes element) + :|location|)))))) wsdl-port))
(defun lxml->service (lxml) @@ -275,7 +279,8 @@ :do (case (lxml-get-tag element) (wsdl:|documentation| (setf (get-documentation wsdl-document-definitions) (rest element))) - (wsdl:|types|) + (wsdl:|types| (setf (get-types wsdl-document-definitions) + (lxml->types element))) (wsdl:|message| (push (lxml->message element) (get-messages wsdl-document-definitions))) (wsdl:|portType| (push (lxml->port-type element)