Hi Everyone,

I have a few thoughts regarding the CMIS specification that came about while 
working on unit tests. Right now I'm just focusing on the repository info.

<cmis:repositoryInfo>
  <cmis:repositoryId>repid1</cmis:repositoryId>
  <cmis:repositoryName>Repository1</cmis:repositoryName>
  <cmis:repositoryRelationship>self</cmis:repositoryRelationship>
  ...
  <cmis:capabilities>
    <cmis:capabilityMultifiling>true</cmis:capabilityMultifiling>
    <cmis:capabilityUnfiling>true</cmis:capabilityUnfiling>
    
<cmis:capabilityVersionSpecificFiling>true</cmis:capabilityVersionSpecificFiling>
    ...
    <cmis:capabilityChanges>includeDocuments</cmis:capabilityChanges>
    <cmis:capabilityChanges>includeFolders</cmis:capabilityChanges>
    <cmis:capabilityChanges>includeRelationships</cmis:capabilityChanges>
    ...
    <cmis:changesIncomplete>true</cmis:changesIncomplete>
  </cmis:capabilities>
  <cmis:cmisVersionSupported>0.61</cmis:cmisVersionSupported>
</cmis:repositoryInfo>

>From a purely client perspective this is a little awkward.

This first issue is mixing properties and capabilities. This requires a little 
more than it should because the properties are simple while capabilities is 
complex element. Perhaps something like this.

<cmis:repositoryInfo>
  <cmis:properties>
    <cmis:property name="repositoryId">repid1</cmis:property>
    <cmis:property name="repositoryName">Repository1</cmis:property>
    <cmis:property name="repositoryRelationship">self</cmis:property>
    ...
  </cmis:properties>
  <cmis:capabilities>
    <cmis:capability name="Multifiling">true</cmis:capability>
    <cmis:capability name="Unfiling">true</cmis:capability>
    <cmis:capability name="VersionSpecificFiling">true</cmis:capability>
    ...
  </cmis:capabilities>
</cmis:repositoryInfo>

Of course I don't mind if the element names stay the same 
(<cmis:repositoryId/>). It just seems like it is less flexible and more 
difficult to marshal/unmarshal.

The second issue is the changes capability. It would be nice if this was either 
a multi valued element, separate of the simple capabilities, or turned into 
individual properties.

<cmis:capabilityChangesIncludeDocuments>true|false</cmis:capabilityChangesIncludeDocuments>
<cmis:capabilityChangesIncludeFolders>true|false</cmis:capabilityChangesIncludeFolders>

- or -

<cmis:capabilityChanges>
  <cmis:includeDocuments>true|false</cmis:includeDocuments>
  <cmis:iIncludeFolders>true|false</cmis:iIncludeFolders>
</cmis:capabilityChanges>

- or -

<cmis:capabilityChanges>includeDocuments, includeFoldes</cmis:capabilityChanges>

- or - 

<cmis:repositoryInfo>
  <cmis:properties>
    ...
  </cmis:properties>
  <cmis:capabilities>
    ...
  </cmis:capabilities>
  <cmis:changes>
    <cmis:includeDocuments>true|false</cmis:includeDocuments>
    <cmis:iIncludeFolders>true|false</cmis:iIncludeFolders>
  </cmis:changes>
</cmis:repositoryInfo>


None of these things are that big of a deal it is just that I find myself 
writing unnecessary code in order to handle them. I figure most of the people 
on the list are actively involved in the spec and I'd be interested in any 
thoughts you guys have to share.

Thanks,
Shane

Reply via email to