Building a Country-Independent SIF Application
How Can We Help?
Since we need to support many of our applications in several different countries, we've found that doing so it much more difficult than storing sets of strings so that we can re-label things on our user interface. That is clearly part of it, but the much larger part revolves around the data stored by the application and building the application using programming languages and environments that make it very difficult to do anything that isn't "strongly-typed."
I hate strong typing
Many in the newest generation of developers and those teaching in universities think this is a good trend (strong typing); personally, I think it is similar to "hard coding" in that it requires the application to be aware of the names of the fields in the database at compile-time. This helps novice programmers avoid lots of errors, but forces the application to be closely tied to the database structure, making it nearly impossible to create really portable code. In earlier versions of our applications, we had tables in our database that described the structure of the remainder of the database (metadata). The application would first read this metadata and then use this to create the SQL it needed to perform the remainder of its operations. We still do this to some extent, but we are continually fighting against development environments that insist that we "strongly type". I understand that there are many security benefits of strong typing. My point is that these can be accomplished as well through careful programming, although they don't come by default. What is lost is the ability to create simple, very portable applications which is sorely needed, especially in the multi-country SIF environment in which we compete.
Why Portability is Needed
In the following sections, we will examine some of the more common SIF objects and some of the more common elements in those objects and compare them across the three SIF specifications to see how common the specifications are. In our applications, we store base elements in base database tables and repeating elements in separate tables, so it makes a difference whether or not an element is in the base object (like SchoolInfo) or if it shows up in a repeatable element. In these charts, if an element is marked in green, it is consistent between the three specifications and is portable. If yellow, it has the same name, but is in different places (it would be in different tables), so if we created a view we could read it with the same name, but couldn't update it (views are read only). If red, they have different names in the different versions of the spec.
School Information only has one object in all countries represented: SchoolInfo
|RefId||The GUID that identifies this school.||RefId||RefId||RefId|
|LocalId||The locally-assigned identifier for this school.||LocalId||LocalId||LocalId|
|StateID||The state-assigned identifier for this school. UK value is a federal-level identifier but is only unique within a given LA.||StateProvinceId||EstablishmentId||StateProvinceId|
|FederalID||The NCES or other federal level assigned identifier for this school.||NCESId||URN||CommonwealthId|
|SchoolName||Name of school.||SchoolName||SchoolName||SchoolName|
|LocalAuthority||The ID (GUID) that references the school district (local authority) of which this school is a member. This field is an element in the US and AU and is an attribute in the UK (it might be the only optional attribute in the specification).||LEAInfoRefId||LAInfoRefId||LEAInfoRefId|
|SchoolType||An indication of the level of the educational institution.||SchoolType||SchoolType||SchoolType|
|SchoolURL||URL for the school.||SchoolURL||SchoolURL||SchoolURL|
|ContactName||The name of the principal.||PrincipalInfo/ContactName||HeadteacherInfo/ContactName||PrincipalInfo/ContactName|
|ContactTitle||The principal's title.||PrincipalInfo/ContactTitle||HeadteacherInfo/ContactTitle||PrincipalInfo/PositionTitle|
|StreetLine1||The UK value may or may not include the house number.||SchoolInfo/Address/Line1||SchoolAddress/Street||AddressList/Address/Street/Line1|
|StateProvince||The UK does not have states.||SchoolInfo/Address/StateProvince||AddressList/Address/Street/StateProvince|
|PhoneNumber||The school's main phone number.||SchoolInfo/SchoolContact/PhoneNumber/Number||SchoolPhoneNumber/Number||PhoneNumberList/PhoneNumber/Number|
|TOTAL||total 170 elements / attributes||total 194 elements / attributes|