Suitability of smbXML for Integration between internet BSPs (business service providers)
Todd Boyle
May 31 2000
The smbXML schema published by NetLedger and its trading partners May 12 ( http://www.smbxml.org/) is an important new standard for SMB's (small/midsized businesses) conducting business over the internet (comments). This short review identifies some of its differences from a number of other, leading XML schemas which are in use in B2B commerce:
- uses attributes extensively where other schemas use child elements,
- uses separate record types for the customer and the vendor, and,
- combines the street, state, postal code into a multi-line address field.
Whether these differences are a good thing or a bad thing is up to the user to decide. Some of these issues may be mitigated by XSLT translations and others may not.
The schemas chosen for the comparisons below are xCBL, cXML, BASDA EBIS, OAGIS, and ebXML drafts.
Most of the leading XML schemas seem to have a single "party" record. For example, Commerce One's xCBL, cbldocguide201.pdf page 771 contains the documentation for the Party in xCBL. I have scraped some lines out of the PDF, below.
Contents Party
@PartyID (optional) string The 1- to 50-character identification
number for the party (Note: If specifying more than one identification
number, use the ListOfIdentifier element instead)
@AgencyID (optional) AgencyCode The agency that issued the party’s
identification number (Note: If specifying more than one
identification number, use the ListOfIdentifier element instead) For a
list of agencies, see AgencyCode on page 153 If the desired agency is
not included in this list, specify an AgencyID of "Other" and use the
AgencyOther attribute to specify the actual agency name
@AgencyOther (optional) string The 1- to 70-character name of the
agency that issued the identification number, specified if the value
of the AgencyID attribute is "Other" (Note: If specifying more than
one identification number, use the ListOfIdentifier element instead)
NameAddress (optional) The name and address of the party
Identifier (optional) The identification number of the individual or
department Agency
@AgencyID AgencyCode The agency responsible for issuing the
identifier For a list of agencies, see AgencyCode on page 153 If the
list does not include the desired agency, specify an AgencyID of
"Other" and use the AgencyOther attribute to specify the actual name
of the agency
@AgencyOther (optional) string The 1- to 70-character name of the
agency responsible for issuing the identifier, used when the AgencyID
attribute has a value of "Other"
Ident string The party’s 1- to 50-character identification number
Name1 string The 1- to 35-character first line of the party’s name
Name2 (optional) string The 1- to 35-character second line of the
party’s name
Name3 (optional) string The 1- to 35-character third line of the
party’s name
Address1 string The 1- to 35-character first line of the party’s
street address
Address2 (optional) string The 1- to 35-character second line of the
party’s street address
Address3 (optional) string The 1- to 35-character third line of the
party’s street address
Address4 (optional) string The 1- to 35-character fourth line of the
party’s street address
Address5 (optional) string The 1- to 35-character fifth line of the
party’s street address
City string The 1- to 35-character name of the party’s city
StateOrProvince string The party’s 1- to 35-character state or
province
PostalCode string The party’s 1- to 20-character zip or postal code
Country CountryCode The party’s country code For a list of country codes, see...
ebXML is gradually being shaped into a single party record, if you read the core components list and docs. The file "data list_definitions2ISC.xls" came thru the list a couple weeks ago with this definition:
Party - a person or persons forming one side in an agreement or dispute. - A person or an organisation forming one side in an agreement.
Following message is typical consensus forming on the ebXML email list supporting a single party record:
From: owner-ebxml-core@lists.oasis-open.org behalf Of B.H.
Sent: Friday, May 26, 2000 2:18 PM
Subject: RE: XML Implementation spec
Arofan,
Does subclassing in core components mean something different
from subclassing in an object model?
For example, if I am an object of the Buyer subclass and then
I want to switch to being a Seller, I would need to change my
class (which is not supported very well in most object-oriented
languages). I would be better off being an object of the class
Party and adopting Roles of Buyer and Seller, which I can
change at will.
But maybe I am applying object-thinking, and you are not
using the concept "subclass" in an object-oriented sense?
Confusedly,
B.H.
-----Original Message-----
From: A.G.
Sent: Friday, May 26, 2000 4:08 PM
To: 'B.H.'; 'ebxml-core@lists.oasis-open.org'
Subject: RE: XML Implementation spec
Bob:
The point of subclassing is that the core information structure (the
"Party" information) would be the same whether the Party was acting as
Buyer or Seller. This way, it becomes possible to reuse the data
structure of the superclass in each of these otherwise disparate
cases. That is the whole point of subclassing - to allow re-use of the
information in cases where there is a different semantic associated
with the same bits of data. So long as the structure (at the level of
the super-class) is common, the semantic can be adjusted without
making interoperability impossible.
Cheers,
A.G.
-----Original Message-----
From: B.H.
Sent: Friday, May 26, 2000 1:26 PM
To: 'ebxml-core@lists.oasis-open.org'
Subject: RE: XML Implementation spec
E.N. wrote:
>Attached is a first draft of the XML Implementation Methodology
>specification.
Question: in this document, Buyer and Seller are subclasses
of Party. Is this the way the core component for Party will be
designed (I hadn't noticed it in other documents), or is that just
an example of how to implement subclasses?
To put a point on the question, how could the same Party
be a Buyer in one exchange and a Seller in another,
if Buyer and Seller are subclasses?
Thanks,
B.H.
Ariba's cXML has a detailed Supplier record, and several customer-like records such as BillTo, ShipTo, PCard, etc. Their address has separate lines for street, city, state, postalcode, etc. All of these are child element structures. Below are selected lines carved out of the cXML DTD:
<!ELEMENT Contact (Name, PostalAddress*, Email*, Phone*, Fax*, URL*)>
<!ELEMENT DeliverTo (#PCDATA)> <!-- string -->
<!ELEMENT Street (#PCDATA)> <!-- string -->
<!ELEMENT City (#PCDATA)> <!-- string -->
<!ELEMENT State (#PCDATA)> <!-- string -->
<!ELEMENT PostalCode (#PCDATA)> <!-- string -->
<!ELEMENT Country (#PCDATA)> <!-- string -->
<!ELEMENT PostalAddress (DeliverTo*, Street+, City, State?,
PostalCode?, Country)>
<!ATTLIST PostalAddress
name %string; #IMPLIED>
<!--
Address is the association of a Contact and an Location.
addressID
An id for the address. Needed to support address codes for
relationships that require id references.
-->
<!ELEMENT Address (Name, PostalAddress?, Email?, Phone?, Fax?, URL?)>
BASDA's invoice and order have fields for "supplier" and "buyer" but they are populated with child elements called "partycode", "address", etc.
<!ELEMENT SUPPLIER (PARTYCODE* , ADDRESS? , CONTACT* )>
<!ELEMENT BUYER (PARTYCODE* , ADDRESS? , CONTACT* )>
<!ELEMENT ADDRESS (NAME? , STREET* , CITY? , STATE? , POSTCODE? ,
CNTRYCODE? , COUNTRY? , ADDRESSLINE* )>
Rosetta has a "partner" record which is the same for their "toRole" and "fromRole" below.
<!ELEMENT toRole
( PartnerRoleDescription ) >
<!ELEMENT PartnerRoleDescription (
GlobalPartnerRoleClassificationCode? ,
PartnerDescription? ,
ContactInformation? ) >
<!ELEMENT GlobalPartnerRoleClassificationCode
( #PCDATA ) >
<!ELEMENT PartnerDescription (
GlobalPartnerClassificationCode? ,
BusinessDescription? ) >
<!ELEMENT GlobalPartnerClassificationCode
( #PCDATA ) >
<!ELEMENT BusinessDescription (
GlobalBusinessIdentifier? ,
GlobalSupplyChainCode? ) >
<!ELEMENT GlobalBusinessIdentifier
( #PCDATA ) >
<!ELEMENT GlobalSupplyChainCode
( #PCDATA ) >
<!ELEMENT fromRole
( PartnerRoleDescription ) >
<!ELEMENT ContactInformation (
contactName? ,
telephoneNumber? ,
EmailAddress? ) >
Selected elements of OAGIS DTD are as
follows, which illustrate their approach to combining of parties into a
"Partner" element, and illustrate their separation of address lines to
separate elements:
http://www.openapplications.org/
<!ELEMENT PARTNER (NAME?, ONETIME?, PARTNRID?, PARTNRTYPE?,
SYNCIND?, ACTIVE?, CURRENCY?, DESCRIPTN?, DUNSNUMBER?, GLENTITYS?,
NAME*, PARENTID?, PARTNRIDX?, PARTNRRATG?, PARTNRROLE?, PAYMETHOD?,
TAXEXEMPT?, TAXID?, TERMID?, USERAREA?, ADDRESS*, CONTACT*)>
<!ELEMENT ADDRESS (ADDRLINE*, ADDRTYPE?, CITY?, COUNTRY?, COUNTY?,
DESCRIPTN?, FAX*, POSTALCODE?, REGION?, STATEPROVN?, TAXJRSDCTN?,
TELEPHONE*, URL?, USERAREA?)>
<!ELEMENT CONTACT (NAME, CONTCTTYPE?, DESCRIPTN?, EMAIL?, FAX*,
NAME*, TELEPHONE*, USERAREA?)>
In conclusion, smbXML differs from other, leading XML schemas as follows:
- uses attributes extensively where other schemas use child elements. for
discussion of this issue,
see http://www.oasis-open.org/cover/elementAttr9804.html
- uses separate record types for the customer and the vendor, and,
- combines the street, state, postal code into a multi-line address field.
This review is not intended to be comprehensive. There are lots of other differences and nuances both obvious and subtle. For example smbXML includes all its business documents within a single XML schema, and its methods in another. Other XML vocabularies that are document based, have clearly defined schema for each type of document, which prevents elements intended for any particular document types or choreography from appearing in other documents legally.
smbXML is just a whole nuther animal. Based on the multi-line address decision (todd draws a puff on his cigar...) it appears aimed more at interfacing with Quickbooks than with other BSPs on the internet,
TB 5/31/00