FDPManifest.xsd has been changed to FarManifest.xsd
authorjwang36 <jwang36@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 30 Jun 2006 20:08:17 +0000 (20:08 +0000)
committerjwang36 <jwang36@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 30 Jun 2006 20:08:17 +0000 (20:08 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@695 6f19259b-4bc3-4df7-8a09-765794883524

Tools/XMLSchema/FDPManifest.xsd [deleted file]
Tools/XMLSchema/FarManifest.xsd [new file with mode: 0644]

diff --git a/Tools/XMLSchema/FDPManifest.xsd b/Tools/XMLSchema/FDPManifest.xsd
deleted file mode 100644 (file)
index 7730742..0000000
+++ /dev/null
@@ -1,376 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<!--\r
-Filename: SurfaceArea.xsd\r
-\r
-Copyright (c) 2006, Intel Corp.\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which may be found at http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
--->\r
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"\r
-    targetNamespace="http://www.TianoCore.org/2006/Edk2.0"\r
-    xmlns="http://www.TianoCore.org/2006/Edk2.0">\r
-    <xs:annotation>\r
-        <xs:documentation xml:lang="en"> This schema defines FDP Manifest </xs:documentation>\r
-    </xs:annotation>\r
-    <!--<xs:include schemaLocation="http://nwlxweb02.jf.intel.com/2006/Edk2.0/FrameworkHeaders.xsd"/>-->\r
-    <xs:include schemaLocation="FrameworkDataElements.xsd"/>\r
-    <xs:element name="FrameworkDevPkgManifest">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">At the top level of the Manifest we have four sections:\r
-                Header, Private, Public and Contents.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Header"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="Private"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="Public"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Contents"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Header">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en"> The Header contains some three elements that can\r
-                uniquely identify this package (PackageName, Guid, Version) as well as several\r
-                fields that identify the licensing and compyright status of the contents of the\r
-                package. The rest of the fields are there to idenify who created the package and\r
-                when it was made. The buid fields are here to identify when the package was created,\r
-                not when the package was compiled. </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="PackageName"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Guid"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Version"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="Copyright"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="License"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" name="PackageType" type="PackageType"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Description"/>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="Created"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="Creator"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="Vendor"/>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="Updated"/>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="Modifier"/>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="DefaultInstallDir"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="BuildNumber"/>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="BuildTarget"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="BuildSystem"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="BuildType"/>\r
-                <xs:element minOccurs="0" maxOccurs="1" ref="ReleaseType"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="BuildNumber" type="xs:integer">\r
-        <xs:annotation>\r
-            <xs:documentation> The Build number is an integer that is meant to represent the exact\r
-                build of the package. </xs:documentation>\r
-        </xs:annotation>\r
-    </xs:element>\r
-    <xs:element name="Type">\r
-        <xs:annotation>\r
-            <xs:documentation> In the Type field we can record what kinds of modules are contained\r
-                in the package. The possibilities are source, binary and mixed (both source and\r
-                binary.) </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:attributeGroup ref="attlist.Type"/>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:attributeGroup name="attlist.Type">\r
-        <xs:attribute name="Value" use="required">\r
-            <xs:simpleType>\r
-                <xs:restriction base="xs:token">\r
-                    <xs:enumeration value="Source"/>\r
-                    <xs:enumeration value="Binary"/>\r
-                    <xs:enumeration value="Mixed"/>\r
-                </xs:restriction>\r
-            </xs:simpleType>\r
-        </xs:attribute>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="attlist.Guid">\r
-        <xs:attribute name="Value" use="required" type="xs:NMTOKEN"/>\r
-    </xs:attributeGroup>\r
-    <xs:element name="BuildTarget" type="SupportedArchitectures">\r
-        <xs:annotation>\r
-            <xs:documentation> The build target is used to record what target architecture the\r
-                modules within this package were compiled for. </xs:documentation>\r
-        </xs:annotation>\r
-    </xs:element>\r
-    <xs:element name="Creator">\r
-        <xs:annotation>\r
-            <xs:documentation> In the creator field, we can record the name, user id, and email\r
-                address of the person who created this package. </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:attributeGroup ref="attlist.Creator"/>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:attributeGroup name="attlist.Creator">\r
-        <xs:attribute name="Name" use="required"/>\r
-        <xs:attribute name="UserId"/>\r
-        <xs:attribute name="Email"/>\r
-    </xs:attributeGroup>\r
-    <xs:element name="Modifier">\r
-        <xs:annotation>\r
-            <xs:documentation> In the Modifier field, we can record the name, user id, and email\r
-                address of the person who changed/updated or modified this package.\r
-            </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:attributeGroup ref="attlist.Modifier"/>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:attributeGroup name="attlist.Modifier">\r
-        <xs:attribute name="Name" use="required"/>\r
-        <xs:attribute name="UserId"/>\r
-        <xs:attribute name="Email"/>\r
-    </xs:attributeGroup>\r
-    <xs:element name="Vendor" type="xs:token">\r
-        <xs:annotation>\r
-            <xs:documentation> The name of the company, organization or individual that created or\r
-                distributes the package. </xs:documentation>\r
-        </xs:annotation>\r
-    </xs:element>\r
-    <xs:element name="BuildSystem">\r
-        <xs:annotation>\r
-            <xs:documentation>This is the place to record the name and DNS name of the computer on\r
-                which the package was created.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:attributeGroup ref="attlist.BuildSystem"/>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:attributeGroup name="attlist.BuildSystem">\r
-        <xs:attribute name="Name" use="required"/>\r
-        <xs:attribute name="NetAddr"/>\r
-    </xs:attributeGroup>\r
-    <xs:element name="BuildType">\r
-        <xs:annotation>\r
-            <xs:documentation> The package may be Debug or Production. </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:simpleType>\r
-            <xs:restriction base="xs:token">\r
-                <xs:enumeration value="Debug"/>\r
-                <xs:enumeration value="Production"/>\r
-            </xs:restriction>\r
-        </xs:simpleType>\r
-    </xs:element>\r
-    <xs:element name="ReleaseType">\r
-        <xs:annotation>\r
-            <xs:documentation> We may identify the quality level of the package here.\r
-            </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:simpleType>\r
-            <xs:restriction base="xs:token">\r
-                <xs:enumeration value="Developer Build"/>\r
-                <xs:enumeration value="Experimental Release"/>\r
-                <xs:enumeration value="Alpha Release"/>\r
-                <xs:enumeration value="Beta Release"/>\r
-                <xs:enumeration value="Release Canidate"/>\r
-                <xs:enumeration value="Official Release"/>\r
-                <xs:enumeration value="Patch Release"/>\r
-                <xs:enumeration value="Integration Build Release"/>\r
-            </xs:restriction>\r
-        </xs:simpleType>\r
-    </xs:element>\r
-    <xs:element name="DefaultInstallDir">\r
-        <xs:annotation>\r
-            <xs:documentation> This is the directory, relative to the root of the workspace, where\r
-                the package will be installed by default. </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:attributeGroup ref="attlist.DefaultInstallDir"/>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:attributeGroup name="attlist.DefaultInstallDir">\r
-        <xs:attribute name="Name" use="required"/>\r
-    </xs:attributeGroup>\r
-    <xs:element name="Dependencies">\r
-        <xs:annotation>\r
-            <xs:documentation> We can track the pakages that this package provides (these are the\r
-                packages contained in this pacakge.) We also record which packages are required by\r
-                this package. </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence>\r
-                <xs:element minOccurs="0" ref="Requires"/>\r
-                <xs:element minOccurs="0" ref="Provides"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Requires">\r
-        <xs:annotation>\r
-            <xs:documentation> This is a list of the packages that this package requires to be\r
-                installed in the workspace for package to function and/or build correctly. In the\r
-                case of source packages, these are the necessary dependencies for successful\r
-                build-time operation of the package. For binary packages these dependencies are\r
-                necessary for successful runtime operation.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType mixed="true">\r
-            <xs:choice minOccurs="0" maxOccurs="unbounded">\r
-                <xs:element name="Package">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">This tag is used in the Framework Package\r
-                            Database File to track individual package information. The Path is a\r
-                            relative path to the SPD File.</xs:documentation>\r
-                    </xs:annotation>\r
-                    <xs:complexType>\r
-                        <xs:sequence maxOccurs="unbounded">\r
-                            <xs:element minOccurs="0" maxOccurs="1" ref="PackageName"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" ref="Guid"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" ref="Version"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" ref="Path"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" ref="InstalledDate"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="PackageAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <xs:element ref="Includes"/>\r
-                <xs:element name="Library">\r
-                    <xs:complexType>\r
-                        <xs:simpleContent>\r
-                            <xs:extension base="xs:NCName">\r
-                                <xs:attributeGroup ref="LibraryAttributes"/>\r
-                            </xs:extension>\r
-                        </xs:simpleContent>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <xs:element name="Protocol">\r
-                    <xs:complexType>\r
-                        <xs:simpleContent>\r
-                            <xs:extension base="C_Name">\r
-                                <xs:attributeGroup ref="ProtocolAttributes"/>\r
-                            </xs:extension>\r
-                        </xs:simpleContent>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <xs:element ref="Guid"/>\r
-                <xs:element ref="File"/>\r
-            </xs:choice>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Provides">\r
-        <xs:annotation>\r
-            <xs:documentation>The list of dependencies that the package fulfills.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:choice minOccurs="0" maxOccurs="unbounded">\r
-                <xs:element name="Package">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">This tag is used in the Framework Package\r
-                            Database File to track individual package information. The Path is a\r
-                            relative path to the SPD File.</xs:documentation>\r
-                    </xs:annotation>\r
-                    <xs:complexType>\r
-                        <xs:sequence maxOccurs="unbounded">\r
-                            <xs:element minOccurs="0" maxOccurs="1" ref="PackageName"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" ref="Guid"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" ref="Version"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" ref="Path"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" ref="InstalledDate"/>\r
-                        </xs:sequence>\r
-                        <xs:attributeGroup ref="PackageAttributes"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <xs:element ref="Includes"/>\r
-                <xs:element name="Library">\r
-                    <xs:annotation><xs:documentation>\r
-                        A library. It can be provided by or required by this or other packages.\r
-                    </xs:documentation></xs:annotation>\r
-                    <xs:complexType>\r
-                        <xs:simpleContent>\r
-                            <xs:extension base="xs:NCName">\r
-                                <xs:attributeGroup ref="LibraryAttributes"/>\r
-                            </xs:extension>\r
-                        </xs:simpleContent>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <xs:element name="Protocol">\r
-                    <xs:annotation>\r
-                        <xs:documentation>\r
-                        A protocol. It can be provided by or required by this or other packages.\r
-                    </xs:documentation>\r
-                    </xs:annotation>\r
-                    <xs:complexType>\r
-                        <xs:simpleContent>\r
-                            <xs:extension base="C_Name">\r
-                                <xs:attributeGroup ref="ProtocolAttributes"/>\r
-                            </xs:extension>\r
-                        </xs:simpleContent>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-                <xs:element ref="Guid"/>\r
-                <xs:element ref="File"/>\r
-            </xs:choice>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:attributeGroup name="attlist.Library">\r
-        <xs:attribute name="Name" use="required"/>\r
-    </xs:attributeGroup>\r
-    <xs:attributeGroup name="attlist.Protocol">\r
-        <xs:attribute name="Name" use="required"/>\r
-        <xs:attribute name="Guid" use="required" type="xs:NMTOKEN"/>\r
-    </xs:attributeGroup>\r
-    <xs:element name="Private">\r
-        <xs:annotation>\r
-            <xs:documentation> The Private section is a place where the files are listed that should\r
-                not be seen by the users of this package. </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType mixed="true">\r
-            <xs:sequence>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="File"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Public">\r
-        <xs:annotation>\r
-            <xs:documentation> The Public section is a list of files that are meant to be seen by\r
-                the users of the package. </xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType mixed="true">\r
-            <xs:sequence>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="File"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="Contents">\r
-        <xs:annotation>\r
-            <xs:documentation>This is a list of all the files within this package. Each file is\r
-                identified by its path relative to the workspace root.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence>\r
-                <xs:element maxOccurs="unbounded" ref="File"/>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:element name="File">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Specify a filename including the path</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:simpleContent>\r
-                <xs:extension base="xs:normalizedString">\r
-                    <xs:attributeGroup ref="attlist.File"/>\r
-                </xs:extension>\r
-            </xs:simpleContent>\r
-        </xs:complexType>\r
-    </xs:element>\r
-    <xs:attributeGroup name="attlist.File">\r
-        <xs:attribute name="Type"/>\r
-        <xs:attribute name="Desc"/>\r
-        <xs:attribute name="Size" type="xs:NMTOKEN"/>\r
-        <xs:attribute name="CDate" type="xs:NMTOKEN"/>\r
-        <xs:attribute name="CTime" type="xs:NMTOKEN"/>\r
-        <xs:attribute name="MDate" type="xs:NMTOKEN"/>\r
-        <xs:attribute name="MTime" type="xs:NMTOKEN"/>\r
-        <xs:attribute name="ADate" type="xs:NMTOKEN"/>\r
-        <xs:attribute name="ATime" type="xs:NMTOKEN"/>\r
-        <xs:attribute name="Checksum" type="xs:NMTOKEN"/>\r
-    </xs:attributeGroup>\r
-</xs:schema>\r
diff --git a/Tools/XMLSchema/FarManifest.xsd b/Tools/XMLSchema/FarManifest.xsd
new file mode 100644 (file)
index 0000000..c148084
--- /dev/null
@@ -0,0 +1,236 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+Filename: FarManifest.xsd\r
+\r
+Copyright (c) 2006, Intel Corp.\r
+All rights reserved. This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which may be found at http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+-->\r
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://www.TianoCore.org/2006/Edk2.0" xmlns="http://www.TianoCore.org/2006/Edk2.0">\r
+  <xs:include schemaLocation="FrameworkHeaders.xsd"/>  \r
+  <xs:annotation>\r
+    <xs:documentation xml:lang="en">\r
+      The Framework Archive File Format is defined as a Java Archive file, with a special xml file called FrameworkArchiveManifest.xml at the top of the archive. The FrameworkArchiveManifest.xml must be an instance of this schema.\r
+    </xs:documentation>\r
+  </xs:annotation>\r
+  <xs:element name="FrameworkArchiveManifest">\r
+    <xs:annotation>\r
+      <xs:documentation xml:lang="en">\r
+        This schema defines the Framework Archive Manifest. \r
+      </xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="1" ref="FarHeader"/>\r
+        <xs:element minOccurs="0" maxOccurs="1" ref="FarPackageList">   \r
+          <xs:annotation>\r
+            <xs:documentation>\r
+              The list of packages in this FAR.\r
+            </xs:documentation>\r
+          </xs:annotation>\r
+        </xs:element>\r
+        <xs:element minOccurs="0" maxOccurs="1" ref="FarPlatformList">          \r
+          <xs:annotation>\r
+            <xs:documentation>\r
+              The list of platforms in this FAR.\r
+            </xs:documentation>\r
+          </xs:annotation>\r
+        </xs:element>\r
+        <xs:element minOccurs="0" maxOccurs="1" ref="Contents">   \r
+          <xs:annotation>\r
+            <xs:documentation>\r
+              Extra contents that are not part of any Package or Platform. These file paths are WORKSPACE relative.  If a file exists in the workspace at this location, then the user should be asked whether to overwrite.  When the user removes the far, these should be removed also, unless they have been modified (per md5sum).\r
+            </xs:documentation>\r
+          </xs:annotation>\r
+        </xs:element>\r
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="UserExtensions"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="FarPackageList">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element minOccurs="1" maxOccurs="unbounded" ref="FarPackage"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="FarPackage">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element ref="FarFilename">\r
+          <xs:annotation>\r
+            <xs:documentation>\r
+              This is the name of the .spd or .psa file that describes the package. It must exist in the directory identified by DefaultPath.\r
+            </xs:documentation>\r
+          </xs:annotation>\r
+        </xs:element>\r
+        <xs:element ref="GuidValue"></xs:element>\r
+        <xs:element ref="Version"></xs:element>\r
+        <xs:element ref="DefaultPath">\r
+          <xs:annotation>\r
+            <xs:documentation>\r
+              This is the default installation location within the workspace. This also serves as the location within the far itself of the package root. The Contents of the pacakage will be found there. The user may choose some other location within the workspace to install the package, as long as it does not overlap a package that is already installed.\r
+            </xs:documentation>\r
+          </xs:annotation>\r
+        </xs:element>\r
+        <xs:element minOccurs="0" maxOccurs="1" ref="FarPackageList">\r
+          <xs:annotation>\r
+            <xs:documentation>\r
+              This list of packages is relative to the package root of the package that they are contained in. If the platform that these are bound to is intstalled in some directory other than the default, then these platforms should be stored relative to that.\r
+            </xs:documentation>\r
+          </xs:annotation>\r
+        </xs:element>\r
+        <xs:element ref="Contents">\r
+          <xs:annotation>\r
+            <xs:documentation>\r
+              This is the list of files that belong to the package. They are specified by relative path from the root of the pacakge.                            \r
+            </xs:documentation>\r
+          </xs:annotation>\r
+        </xs:element>\r
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="UserExtensions"></xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="FarPlatform">\r
+    <xs:annotation>\r
+      <xs:documentation>\r
+        Platforms are treated separately from packages. A platform is listed in the far if, and only if, it is not part of some package.\r
+      </xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element ref="FarFilename">\r
+          <xs:annotation>\r
+            <xs:documentation>\r
+              This is the relative path to the .fpd file that describes the platform.\r
+            </xs:documentation>\r
+          </xs:annotation>\r
+        </xs:element>\r
+        <xs:element ref="GuidValue"></xs:element>\r
+        <xs:element ref="Version"></xs:element>\r
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="UserExtensions"></xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="DefaultPath" type="PathAndFilename"/>\r
+  <xs:element name="FarPlatformList">\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element maxOccurs="unbounded" ref="FarPlatform">\r
+        </xs:element>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:element name="FarFilename" type="DbPathAndFilename">\r
+    <xs:annotation>\r
+      <xs:documentation>\r
+        The FarFilename is used to build up the Contents list. It has an md5sum attribute for keeping track of whether the file is changed after it is installed. The Md5sum can also be used to check the integrity of a far before it is installed into the workspace.\r
+      </xs:documentation>\r
+    </xs:annotation>\r
+  </xs:element>\r
+  <xs:element name="GuidValue" type="GuidType">\r
+    <xs:annotation>\r
+      <xs:documentation>\r
+        The purpose of this element is to allow Guids to be assigned to or used by other elements in the schema.\r
+      </xs:documentation>\r
+    </xs:annotation>\r
+  </xs:element>\r
+  <xs:element name="Contents">\r
+    <xs:annotation>\r
+      <xs:documentation>\r
+        This tag allows us to specify a tree of files all having a common root. All the files specified are relative to that common root.\r
+      </xs:documentation>\r
+    </xs:annotation>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element maxOccurs="unbounded" ref="FarFilename"/>\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+  <xs:annotation>\r
+    <xs:documentation xml:lang="en">\r
+      Definitions and rules for creating, installing, updating and removing fars within the workspace.\r
+    </xs:documentation>\r
+    <xs:documentation>\r
+      1.  A module m is said to depend upon a package p, iff there exists a tuple (PackageGuid, PackageVerion) in the set m->PackageDependencies for which p->Guid==PackageGuid, and if PackageVersion is not empty, then p->Version is == PackageVersion.\r
+    </xs:documentation>\r
+    <xs:documentation>\r
+      2.  A far f is said to depend on a far g, iff there is a module in a package in f that depends on a package in g.\r
+    </xs:documentation>\r
+    <xs:documentation>\r
+      3.  A far f is said to depend on a package p, iff there is a module m contained in f that depends on p.\r
+    </xs:documentation>\r
+    <xs:documentation>\r
+      3.1 A platform q is said to depend on a package p, iff p, or some module m contained in p, is necessary to build q.\r
+    </xs:documentation>\r
+    <xs:documentation>\r
+      4.  A far f may be installed into the workspace w, iff for each module m in f, m’s dependencies are met by the packages in w.\r
+    </xs:documentation>\r
+    <xs:documentation>\r
+      a. (If the dependencies are not met, then no part of far f will be installed. It is not legal to partially install a far into the workspace.)\r
+    </xs:documentation>\r
+    <xs:documentation>\r
+      5.  A far f may be removed from the workspace w, iff for each module m in w, and for each package p in f, m does not depend on p.\r
+    </xs:documentation>\r
+    <xs:documentation>\r
+      a. (If there is some dependency on f, then no part of f may be uninstalled from w. It is not legal to partially uninstall a far from the workspace.)\r
+    </xs:documentation>\r
+    <xs:documentation>\r
+      6.  When installing a far f into workspace w, for each package p in f, allow the user to install in p's default location, or choose a new location l (which must be unoccupied) within the workspace. Record this location l in the database. Each package p in f will be recorded in the database, associated with the GUID of f, as well as the actual install location l. (So we will know which far each package belongs to.)\r
+    </xs:documentation>\r
+    <xs:documentation>\r
+      7.  When installing a far f into workspace w, if there exists a package p in w, and p is in f, then the user must be prompted to choose a location that does not collide with the location of p in workspace w. We will end up with two instances of p in w at two distinct locations.\r
+    </xs:documentation>\r
+    <xs:documentation>\r
+      8.  A far f may replace a far g in the workspace w, iff for each module m contained in w, if m depends on a package p, and p is only contained in g, then there must exist a package q in f, such that m depends on q. The net effect is that g is removed and f is installed, in one operation. The normal rules for installing f still apply--the dependencies of the modules of f must be satisfied. After the replacement, it must be the case that all the modules dependencies in the workspace are satisfied. Note that it is possible to backrev a package in this way. \r
+    </xs:documentation>\r
+    <xs:documentation>\r
+          (If we find that the replace is not permitted, then the user may install f and keep g. Next, he could _port_ every module m in w that depends on g, to f and eventually remove g.)\r
+    </xs:documentation>\r
+    <xs:documentation>\r
+      9.  A special case of the above rule is that a far f may be reinstalled into the workspace. (This would allow the user to get a fresh copy, or change the location in the workspace where one or more of the packages of f are installed.)\r
+    </xs:documentation>\r
+    <xs:documentation>\r
+      10. When a far f is removed from the workspace w, for each package p in f, we will remove p from w.\r
+    </xs:documentation>\r
+    <xs:documentation>\r
+      11. If a package p belongs to a far f, then it is not legal to remove p from the workspace w unless f is removed from w.\r
+    </xs:documentation>\r
+    <xs:documentation>\r
+      11.1 If a platform p belongs to a far f, then it is not legal to remove p from the workspace w unless f is removed from w.\r
+    </xs:documentation>\r
+    <xs:documentation>\r
+      12. A package p may be removed from the workspace, provided there does not exist a far f that contains p. (Newly created packages will not exist within a far, and thus may be removed from the workspace directly.)\r
+    </xs:documentation>\r
+    <xs:documentation>\r
+      13. When a far f is removed from the workspace, the user has two options:\r
+    </xs:documentation>\r
+    <xs:documentation>\r
+      a. Keep all the files in the workspace tree.\r
+    </xs:documentation>\r
+    <xs:documentation>\r
+      b. Remove all the files in f from the workspace tree. If a file has been modified from the original as installed from the far (per md5sum) then the user should be asked if he is "sure" he wants to remove it.\r
+    </xs:documentation>\r
+    <xs:documentation>\r
+      14. When a far is created, a GUID is generated and assigned to the far. If a far is created from the same components at a later time, it would have a different GUID.\r
+    </xs:documentation>\r
+    <xs:documentation>\r
+      15. If a package p is marked with RePackage==false, then p may not be added to a far.\r
+    </xs:documentation>\r
+    <xs:documentation>\r
+      16. When constructing a far f that contains at least one platform, then f may optionally be constructed such that for each platform q in f, every package p on which q depends should be included in f, unless p->repackage==false. The far will have all the packages required, and may then be installed as a self-inflating executable that will create a brand new workspace on the developer's workstation.\r
+    </xs:documentation>\r
+    <xs:documentation>\r
+      17. A far f is identical to a far g, iff f->Guid == g->Guid.\r
+    </xs:documentation>\r
+    <xs:documentation>\r
+      18. A far f may be installed into the workspace w, iff there is no far g in w such that f->Guid==g->Guid.\r
+    </xs:documentation>\r
+    \r
+  </xs:annotation>\r
+</xs:schema>\r