I've collected here [3] some suggestions for how it could be improved. I repeat [3] here:
The XDI below contains a repeated idiom for representing complex attributes (object-valued predicates) that is far more verbose than required. Every section represented like this:
<xdi:xdi>
<xdi:s xri="$value$hash$sha$256!f68f4bb3513a89c6ea41b6eeffe6af0ea2a7d2f3f172b72bf26ecb29d9713020">
<xdi:p xri="$value">
<xdi:data><![CDATA[urn:efa25e71-5b6f-4844-b139-4ed26dd1c3e5]]></xdi:data>
</xdi:p>
</xdi:s>
</xdi:xdi>
...should be written like this:
<xdi:ref xri="=(urn:efa25e71-5b6f-4844-b139-4ed26dd1c3e5)"/>
Similarly, since in every case above there is only a single value for a literal, every section that looks like this:
<xdi:xdi>
<xdi:s xri="$value$hash$sha$256!0a38e8a3c328b1616ac3c34720d0ceb578bd3f5e8bfff9841bb0804dd4d2b5eb">
<xdi:p xri="$value">
<xdi:data><![CDATA[55555-1234]]></xdi:data>
</xdi:p>
</xdi:s>
</xdi:xdi>
</xdi:p>
...should look like this:
<xdi:data><![CDATA[55555-1234]]></xdi:data> <-- Drummond/Markus please verify
</xdi:p>
Other Ideas
*Should we be using the JSON serialization of XDI instead of the XML serialization?
*It would be nice if XDI had a convention for URI shortening based on a default namespace. That if relative entityIDs were used (e.g. "#245") we wouldn't have to have these long entityIDs like this one used below: "urn:efa25e71-5b6f-4844-b139-4ed26dd1c3e5".
*The above example could be significantly shortened if it only described a single address (the second address doesn't have any illustrative value).
For reference here is an RDF representation of a single persona (Contactable_1) and their address, name and telephone number. Some "cheating" is going on here: entityIDs have been hand-crafted to be pretty (e.g. :Address_1 vs. :efa25e71-5b6f-4844-b139-4ed26dd1c3e5):
:Contactable_1
rdf:type p:Contactable ;
p:role p:Buyer ;
vcard:adr :Address_1 ;
vcard:n :Name_1 ;
vcard:tel Voice_1 .
:Address_1
rdf:type vcard:Address ;
vcard:extended-address "Suite 1000"^^xsd:string ;
vcard:locality "Peoria"^^xsd:string ;
vcard:postal-code "61604"^^xsd:string ;
vcard:region "IL"^^xsd:string ;
vcard:street-address
"123 S Main Street"^^xsd:string .
:Name_1
rdf:type vcard:Name ;
rdfs:label "Name_1"^^xsd:string ;
vcard:family-name "Jones"^^xsd:string ;
vcard:given-name "Alice"^^xsd:string .
:Voice_1
rdf:type vcard:Voice ;
rdf:value "tel:+358-555-1234567"