Business Card Example
Business Card Example
Business Card Example
By =sakimura
Oct. 29, 2004 @XDI F2F Colorado
Dictionary
<resource>
<meta>
<type>+name</type>
<xri>!!1001:2435:1435234</xri>
</meta>
<data>
<English>Nat Sakimura</English>
<Japanese>崎崎崎崎 </Japanese>
</data>
</resource>
<resource>
<meta>
<type>+company.name</type>
<xri>!!1001:245234:1</xri>
</meta>
<data>
<en>Nomura Research Institute, Ltd. </en>
<ja>崎崎崎崎崎崎崎 </ja>
</data>
</resource>
<resource>
<meta>
<type>+streetAddress</type>
<xri>!!40392:4323:4344</xri>
</meta>
<data>
<street>Nippon Bldg. 4F, Otemachi 2-6-2</street>
<city>Chiyoda</street>
<state>Tokyo</state>
<postalcode>100-0004</postalcode>
</data>
</resource>
<resource>
<meta>
<type>+phone</type>
<xri>!!2324:81:3:5201:0451</xri>
</meta>
<data>
+81(3)5201-0451
</data>
</resource>
Etc., etc.
Grouping/Hierarchy/Logical Organization
<resource>
<meta>
<type>+businessCard</type>
<xri>!!154323:2343:243:44:235:3</xri>
<xri>@NRI/employee/m2630/(+businessCard)</xri>
<xri>@NRI/ISD/IFSPD/ASG/(+GM)/(+businessCard)</xri>
<xri>@NRI/sakimura/(+businessCard)
<version>$v.d.2004-10-25</version>
<usage>@XDIORG/contracts/businesscardusage</usage>
</meta>
<data>
<ref type=”+name”>!!1001:2435:1435234</ref>
<ref type=”+company.name”>!!1001:245234:1</ref>
<ref type=”+streetAddress”>!!40392:4323:4344</ref>
<ref type=”+phone”>!!2324:81:3:5201:0451</ref>
<ref type=”+fax”>!!2324:81:3:5201:0461</ref>
<ref type=”+company.web.address>!!254:334:2223:5434</ref>
<ref type=”+email”>!!254:334:2224:342</email>
<ref type=”+i-name”>!!23423:23:4</i-name>
</data>
</resource>
<resource>
<meta>
<type>+businessCard</type>
<xri>=sakimura/(+businessCard)</xri>
</meta>
<data>
<ref type=”+businessCard”>@NRI/sakimura/(+businessCard)</ref>
</data>
</resource>
Comments:
(N1) This is very machine efficient. It can trivially be implemented even on a relational database: Every node is one level
deep. Resolution in the local part is just passing the local part string in its entirety as the key to the database.
(N2) Maybe <meta> and <data> should be called <header> and <body> because people are more accustomed to it
(HTTP, HTML, SMTP etc.) and <data> really is not a data but can be references.
(N3) Since <ref> has type, when one wants only a component of it, it does not have to retrieve the entire business card
object. E.g., if he wants phone number only, it should just retrieve / traverse the <ref> of type +phone.
Suppose Mr. A wants to get the business card of Mr. B, who he knows my Global i-name. Then, he can construct:
=sakimura/(+businessCard)
This may, or may not exist. (In the above case, it does.)
Instead Mr. A may know only Mr.B’s company i-name, which is @NRI/sakimura, then he could construct
@NRI/sakimura/(+businessCard)
This may, or may not exist. (In the above case, it does.)
There always are going to be some guess work no matter what, unless there is a known convention of addressing a
particular object. As a spec, however, it cannot possibly be spelled out a priori. A community may define those “Community
Standard Path (CSP)” though. E.g., XDIORG may publish a list of standard path as @XDI/(+CSP) and +CSP. It may be ok for
TC to define the CSP format, but actual CSPs are out of scope. In this case, the authority is XDIORG and not the TC. (BTW,
Ford may publish their version of CSP as well as @Ford/(+CSP) ).
N.B. Besides CSP, the contract spec is very important. It may not be in the core, but TC should publish one version of it
together with the Core.
Re-composability of the big XDI document
To get the fully contained (no external reference) business card, resolve each ref in the <data> and replace the <ref> with
the resulting <resource>. Then, you will end up with something like:
<resource>
<meta>
<type>+businessCard</type>
<xri>!!154323:2343:243:44:235:3</xri>
<xri>@NRI/employee/m2630/(+businessCard)</xri>
<xri>@NRI/ISD/IFSPD/ASG/(+GM)/(+businessCard)</xri>
<xri>@NRI/sakimura/(+businessCard)
<version>$v.d.2004-10-25</version>
<usage>@XDIORG/contracts/businesscardusage</usage>
</meta>
<data>
<resource>
<meta>
<type>+name</type>
<xri>!!1001:2435:1435234</xri>
</meta>
<data>
<English>Nat Sakimura</English>
<Japanese>崎崎崎崎</Japanese>
</data>
</resource>
<resource>
<meta>
<type>+company.name</type>
<xri>!!1001:245234:1</xri>
</meta>
<data>
<en>Nomura Research Institute, Ltd. </en>
<ja>崎崎崎崎崎崎崎</ja>
</data>
</resource>
<resource>
<meta>
<type>+streetAddress</type>
<xri>!!40392:4323:4344</xri>
</meta>
<data>
<street>Nippon Bldg. 4F, Otemachi 2-6-2</street>
<city>Chiyoda</street>
<state>Tokyo</state>
<postalcode>100-0004</postalcode>
</data>
</resource>
<resource>
<meta>
<type>+phone</type>
<xri>!!2324:81:3:5201:0451</xri>
</meta>
<data>
+81(3)5201-0451
</data>
</resource>
<resource>
<meta>
<type>+fax</type>
<xri>!!2324:81:3:5201:0461</xri>
</meta>
<data>
+81(3)5201-0461
</data>
</resource>
[..snip..]
</data>
</resource>
Note: It should be relatively rare that an implementation would actually store things like this because there would be data
duplication.
Conclusion
In short, we did not give up the values of the heavy schema, but gained simplicity.
Other Considerations
(1) This spec may have some impact / feedback to XRI v.1.2.
XRI resolution spec uses its own response format. It could be unified to XDI format instead.
(2) Contract based access control must be defined somewhere. This is very important for me because it is one of the key
value propositions that XRI/XDI brings in.
Elevator Speech
XDI is instrumental in achieving “Trusted Environment” in which data can be exchanged under the condition that parties
(machines) will use the data only in accordance with the contract.
There will be multiple communities with varying degree of “Trust” within them, but to that extent, data is protected against
misuse.
Trusted Environment Machines are reasonably trustable because it can be audited and digitally
signed by the auditor.
Agent Machine
Machine Human are not: Key is not to allow humans to extract data out of the trusted
Machine environment.