<?xml version='1.0' encoding='UTF-8'?>
<!-- 
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->
<service xmlns="http://www.w3.org/2007/app" xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/" xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/">
  <workspace>
    <title xmlns="http://www.w3.org/2005/Atom" type="text">default
    </title>
    <cmisra:repositoryInfo>
      <cmis:repositoryId>default
      </cmis:repositoryId>
      <cmis:repositoryName>default
      </cmis:repositoryName>
      <cmis:repositoryDescription>Repository default
      </cmis:repositoryDescription>
      <cmis:vendorName>Nuxeo
      </cmis:vendorName>
      <cmis:productName>Nuxeo Repository
      </cmis:productName>
      <cmis:productVersion>5.2-SNAPSHOT
      </cmis:productVersion>
      <cmis:rootFolderId>4fb1b8a1-6dfd-4da4-95b0-4ef41c27b920
      </cmis:rootFolderId>
      <cmis:latestChangeLogToken>
      </cmis:latestChangeLogToken>
      <cmis:capabilities>
	<cmis:capabilityACL>none
	</cmis:capabilityACL>
	<cmis:capabilityAllVersionsSearchable>true
	</cmis:capabilityAllVersionsSearchable>
	<cmis:capabilityChanges>none
	</cmis:capabilityChanges>
	<cmis:capabilityContentStreamUpdatability>anytime
	</cmis:capabilityContentStreamUpdatability>
	<cmis:capabilityGetDescendants>false
	</cmis:capabilityGetDescendants>
	<cmis:capabilityGetFolderTree>false
	</cmis:capabilityGetFolderTree>
	<cmis:capabilityMultifiling>false
	</cmis:capabilityMultifiling>
	<cmis:capabilityPWCSearchable>true
	</cmis:capabilityPWCSearchable>
	<cmis:capabilityPWCUpdatable>true
	</cmis:capabilityPWCUpdatable>
	<cmis:capabilityQuery>bothcombined
	</cmis:capabilityQuery>
	<cmis:capabilityRenditions>none
	</cmis:capabilityRenditions>
	<cmis:capabilityUnfiling>false
	</cmis:capabilityUnfiling>
	<cmis:capabilityVersionSpecificFiling>false
	</cmis:capabilityVersionSpecificFiling>
	<cmis:capabilityJoin>innerandouter
	</cmis:capabilityJoin>
      </cmis:capabilities>
      <cmis:cmisVersionSupported>1.0
      </cmis:cmisVersionSupported>
      <cmis:changesIncomplete>false
      </cmis:changesIncomplete>
      <cmis:changesOnType>cmis:folder
      </cmis:changesOnType>
      <cmis:changesOnType>cmis:relationship
      </cmis:changesOnType>
      <cmis:changesOnType>cmis:policy
      </cmis:changesOnType>
      <cmis:changesOnType>cmis:document
      </cmis:changesOnType>
    </cmisra:repositoryInfo>
    <collection href="http://cmis.demo.nuxeo.org/nuxeo/site/cmis/checkedout">
      <title xmlns="http://www.w3.org/2005/Atom" type="text">the checkedout
      </title>
      <cmisra:collectionType>checkedout
      </cmisra:collectionType>
    </collection>
    <collection href="http://cmis.demo.nuxeo.org/nuxeo/site/cmis/query">
      <title xmlns="http://www.w3.org/2005/Atom" type="text">query collection
      </title>
      <cmisra:collectionType>query
      </cmisra:collectionType>
    </collection>
    <collection href="http://cmis.demo.nuxeo.org/nuxeo/site/cmis/typechildren">
      <title xmlns="http://www.w3.org/2005/Atom" type="text">Types
      </title>
      <cmisra:collectionType>types
      </cmisra:collectionType>
    </collection>
    <collection href="http://cmis.demo.nuxeo.org/nuxeo/site/cmis/children/4fb1b8a1-6dfd-4da4-95b0-4ef41c27b920">
      <title xmlns="http://www.w3.org/2005/Atom" type="text">children collection
      </title>
      <cmisra:collectionType>root
      </cmisra:collectionType>
    </collection>
    <collection href="http://cmis.demo.nuxeo.org/nuxeo/site/cmis/unfiled">
      <title xmlns="http://www.w3.org/2005/Atom" type="text">the unfiled
      </title>
      <cmisra:collectionType>unfiled
      </cmisra:collectionType>
    </collection>
    <link xmlns="http://www.w3.org/2005/Atom" rel="http://docs.oasis-open.org/ns/cmis/link/200908/typedescendants" type="application/atom+xml;type=feed" href="http://cmis.demo.nuxeo.org/nuxeo/site/cmis/typedescendants" />
    <link xmlns="http://www.w3.org/2005/Atom" rel="http://docs.oasis-open.org/ns/cmis/link/200908/foldertree" type="application/atom+xml;type=feed" href="http://cmis.demo.nuxeo.org/nuxeo/site/cmis/foldertree/4fb1b8a1-6dfd-4da4-95b0-4ef41c27b920" />
    <cmisra:uritemplate>
      <cmisra:type>objectbyid
      </cmisra:type>
      <cmisra:mediatype>application/atom+xml;type=entry
      </cmisra:mediatype>
      <cmisra:template>http://cmis.demo.nuxeo.org/nuxeo/site/cmis/object/{id}?filter={filter}&amp;renditionFilter={renditionFilter}&amp;includeRelationships={includeRelationships}&amp;includeAllowableActions={includeAllowableActions}&amp;includePolicyIds={includePolicyIds}&amp;includeACL={includeACL}
      </cmisra:template>
    </cmisra:uritemplate>
    <cmisra:uritemplate>
      <cmisra:type>objectbypath
      </cmisra:type>
      <cmisra:mediatype>application/atom+xml;type=entry
      </cmisra:mediatype>
      <cmisra:template>http://cmis.demo.nuxeo.org/nuxeo/site/cmis/object?path={path}&amp;filter={filter}&amp;renditionFilter={renditionFilter}&amp;includeRelationships={includeRelationships}&amp;includeAllowableActions={includeAllowableActions}&amp;includePolicyIds={includePolicyIds}&amp;includeACL={includeACL}
      </cmisra:template>
    </cmisra:uritemplate>
    <cmisra:uritemplate>
      <cmisra:type>query
      </cmisra:type>
      <cmisra:mediatype>application/atom+xml;type=feed
      </cmisra:mediatype>
      <cmisra:template>http://cmis.demo.nuxeo.org/nuxeo/site/cmis/query?q={q}&amp;searchAllVersions={searchAllVersions}&amp;maxItems={maxItems}&amp;skipCount={skipCount}&amp;includeRelationships={includeRelationships}&amp;includeAllowableActions={includeAllowableActions}
      </cmisra:template>
    </cmisra:uritemplate>
    <cmisra:uritemplate>
      <cmisra:type>typebyid
      </cmisra:type>
      <cmisra:mediatype>application/atom+xml;type=feed
      </cmisra:mediatype>
      <cmisra:template>http://cmis.demo.nuxeo.org/nuxeo/site/cmis/type/{id}
      </cmisra:template>
    </cmisra:uritemplate>
  </workspace>
</service>
