Index: wsdl/abac_types.xsd
===================================================================
--- wsdl/abac_types.xsd	(revision bb39689f8df0820b469dad38313df2fb7c844ab0)
+++ wsdl/abac_types.xsd	(revision bb39689f8df0820b469dad38313df2fb7c844ab0)
@@ -0,0 +1,279 @@
+<?xml version="1.0"?>
+<xsd:schema targetNamespace="http://www.isi.edu/faber/abac_types"
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+  xmlns:tns="http://www.isi.edu/faber/abac_types"
+  xmlns:xsd1="http://www.isi.edu/faber/fedd_types"
+  xmlns="http://www.w3.org/2000/10/XMLSchema">
+
+  <xsd:annotation>
+    <xsd:documentation xml:lang="en">
+      Trust negotiation schema for the NAI Labs ABAC Project.
+      Copyright 2002 Networks Associates Technologies, Inc.
+      All rights reserved.
+    </xsd:documentation>
+  </xsd:annotation> 
+    
+  <xsd:complexType name="negotiationType">
+    <xsd:sequence>
+      <xsd:element name="observation" type="tns:observationType"
+	minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="observationType">
+    <xsd:choice>
+      <xsd:element name="SimpleTTNode" type="tns:simpleTTNodeType"/>
+      <xsd:element name="NodeOp" type="tns:nodeOpType"/>
+      <xsd:element name="EdgeOp" type="tns:edgeOpType"/>
+      <xsd:element name="Message" type="tns:messageType"/>
+      <xsd:element name="Update" type="tns:updateType"/>
+    </xsd:choice>
+    <xsd:attribute name="count" type="xsd:decimal"/>
+  </xsd:complexType>
+  
+  <xsd:complexType name="negotiationRequest">
+    <xsd:sequence>
+      <xsd:element name="context" type="tns:contextInfo"
+	minOccurs="1" maxOccurs="1"/>
+      <xsd:element name="goal" type="xsd:string"
+	minOccurs="1" maxOccurs="1"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="negotiationResult">
+    <xsd:sequence>
+      <xsd:element name="goal" type="xsd:string"
+	minOccurs="1" maxOccurs="1"/>
+      <xsd:element name="result" type="xsd:string"
+	minOccurs="1" maxOccurs="1"/>
+      <xsd:element name="provenance" type="xsd:string"
+	minOccurs="0" maxOccurs="1"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <!--Context info can be: the context data, a file pointing to the data, or
+        a uid handle to the data-->
+  <xsd:complexType name="contextInfo">
+    <xsd:choice>
+      <xsd:element name="context" type="tns:negotiationContext"/>
+      <xsd:element name="contextFile" type="xsd:string"/>
+      <xsd:element name="contextID" type="xsd:string"/>
+    </xsd:choice>
+  </xsd:complexType>
+
+  <xsd:complexType name="negotiationContext">
+    <xsd:sequence>
+      <!-- Who am I -->
+      <xsd:element name="self" type="xsd:string"
+	minOccurs="1" maxOccurs="1"/>
+      <!-- Who is my opponent -->
+      <xsd:element name="peer" type="xsd:string"
+	minOccurs="1" maxOccurs="1"/>
+      <!-- What strategy for graph satisfaction do I use -->
+      <xsd:element name="strategy" type="xsd:string"
+	minOccurs="1" maxOccurs="1"/>
+      <!-- My creddential frontiers -->
+      <xsd:element name="frontier" type="tns:frontier"
+	minOccurs="1" maxOccurs="1"/>
+      <!-- My opponents credential evidence -->
+      <xsd:element name="oppoCache" type="tns:credentialSet"
+	minOccurs="1" maxOccurs="1"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="frontier">
+    <xsd:sequence>
+      <xsd:element name="oppoCache" type="tns:credentialSet"
+	minOccurs="0" maxOccurs="unbounded"/>
+      <xsd:element name="issuerTracesAll" type="tns:roleSet"
+	minOccurs="0" maxOccurs="unbounded"/>
+      <xsd:element name="issuerTracesDef" type="tns:roleSet"
+	minOccurs="0" maxOccurs="unbounded"/>
+      <xsd:element name="subjectTraceable" type="tns:roleSet"
+	minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="weightTable">
+    <xsd:sequence>
+      <xsd:element name="entry" type="tns:weightEntry"
+	minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="weightEntry">
+    <xsd:sequence>
+      <xsd:element name="key" type="tns:entityType"
+	minOccurs="1" maxOccurs="1"/>
+      <xsd:element name="value" type="xsd:float"
+	minOccurs="0" maxOccurs="1"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="accessControlPolicy">
+    <xsd:sequence>
+      <xsd:element name="acFact" type="tns:accessControlFact"
+	minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="accessControlFact">
+    <xsd:sequence>
+      <xsd:element name="credential" type="xsd:string"
+	minOccurs="1" maxOccurs="1"/>
+      <xsd:element name="requirement" type="tns:entityType"
+	minOccurs="1" maxOccurs="1"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="acknowledgementPolicy">
+    <xsd:sequence>
+      <xsd:element name="ackFact" type="tns:accessControlFact"
+	minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="acknowledgementPolicyFact">
+    <xsd:sequence>
+      <xsd:element name="credential" type="xsd:string"
+	minOccurs="1" maxOccurs="1"/>
+      <xsd:element name="field" type="xsd:string"
+	minOccurs="0" maxOccurs="1"/>
+      <xsd:element name="value" type="xsd:string"
+	minOccurs="0" maxOccurs="1"/>
+      <xsd:element name="requirement" type="tns:entityType"
+	minOccurs="1" maxOccurs="1"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="roleSet">
+    <xsd:sequence>
+      <xsd:element name="credential" type="tns:simpleRoleType"
+	minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="credentialSet">
+    <xsd:sequence>
+      <xsd:element name="credential" type="xsd:string"
+	minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="updateType">
+    <xsd:attribute name="value" type="xsd:string"/>
+  </xsd:complexType>
+
+  <xsd:complexType name="messageType">
+    <xsd:sequence>
+      <xsd:element name="EdgeOp" type="tns:edgeOpType" minOccurs="0" 
+	maxOccurs="unbounded"/>
+      <xsd:element name="NodeOp" type="tns:nodeOpType" minOccurs="0" 
+	maxOccurs="unbounded"/>
+      <xsd:element name="evidence" type="tns:evidenceType"/>
+    </xsd:sequence>
+  </xsd:complexType>  
+
+  <xsd:complexType name="simpleTTNodeType">
+    <xsd:sequence>
+      <xsd:element name="Goal"              type="tns:goalType"/>
+      <xsd:element name="SatisfactionState" type="xsd:string"/>
+      <xsd:element name="ProcessingState"   type="xsd:string"/>
+    </xsd:sequence>
+    <xsd:attribute name="type" type="xsd:string" use="optional"/>
+  </xsd:complexType>
+
+  <xsd:complexType name="nodeOpType">
+    <xsd:sequence>
+      <xsd:element name="TrustTarget"      type="tns:goalType"/>
+      <xsd:element name="ProcessingState"  type="xsd:string"/>
+    </xsd:sequence>
+    <xsd:attribute name="type" type="xsd:string" use="optional"/>
+  </xsd:complexType>
+
+  <xsd:complexType name="edgeOpType">
+    <xsd:sequence>
+      <xsd:element name="Parent"           type="tns:goalType"/>
+      <xsd:element name="Child"            type="tns:goalType"/>
+      <xsd:element name="ProcessingState"  type="xsd:string"/>
+    </xsd:sequence>
+    <xsd:attribute name="type" type="xsd:string"/>
+    <xsd:attribute name="newChild" type="xsd:date"/>
+  </xsd:complexType>
+
+  <xsd:complexType name="goalType">
+    <xsd:sequence>
+      <xsd:element name="Verifier"   type="tns:principalType"/>
+      <xsd:element name="Target" type="tns:entityType"/>
+      <xsd:element name="Subject"   type="tns:principalType"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <!-- Here are the new credential descriptions -->
+
+  <xsd:complexType name="entityType">
+    <xsd:choice>
+      <xsd:element name="principal" type="tns:principalType"/>
+      <xsd:element name="role" type="tns:simpleRoleType"/>
+      <xsd:element name="linkedrole" type="tns:linkedRoleType"/>
+      <xsd:element name="intersection" type="tns:intersectionType"/>
+    </xsd:choice>
+  </xsd:complexType>
+
+  <xsd:complexType name="roleType">
+    <xsd:choice>
+      <xsd:element name="role" type="tns:simpleRoleType"/>
+      <xsd:element name="linkedrole" type="tns:linkedRoleType"/>
+      <xsd:element name="intersection" type="tns:intersectionType"/>
+    </xsd:choice>
+  </xsd:complexType>
+
+  <!-- This is a copy of fedd's IDType, included in case we have to expand or
+       restrict it. XSD isn't wonderful at expressing these kinds of synonyms
+       between complex types. -->
+  <xsd:complexType name="principalType">
+    <xsd:choice>
+      <xsd:element name="uuid" type="xsd:base64Binary"/>
+      <xsd:element name="fedid" type="xsd:base64Binary"/>
+      <xsd:element name="uri" type="xsd:string"/>
+      <xsd:element name="localname" type="xsd:string"/>
+      <xsd:element name="kerberosUsername" type="xsd:string"/>
+    </xsd:choice>
+  </xsd:complexType>
+
+  <xsd:complexType name="simpleRoleType">
+    <xsd:sequence>
+      <xsd:element name="principal" type="tns:principalType"/>
+      <xsd:element name="rolename" type="xsd:string"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="linkedRoleType">
+    <xsd:sequence>
+      <xsd:element name="linkingrole" type="tns:simpleRoleType"/>
+      <xsd:element name="rolename" type="xsd:string"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="intersectionType">
+    <xsd:sequence>
+      <xsd:element name="role" type="tns:roleType" minOccurs="2" 
+	maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="credentialType">
+    <xsd:sequence>
+      <xsd:element name="role" type="tns:roleType"/>
+      <xsd:element name="requirement" type="tns:entityType"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="evidenceType">
+    <xsd:sequence>
+      <xsd:element name="credential" type="tns:credentialType" minOccurs="1"
+	maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+</xsd:schema>
