This section presents the XML structure for Infrastructure common elements, messages and objects in a tabular format for readers less versed in parsing formal XML schema definitions.
The Char(acteristics) column for all of the tables in this section use the following codes:
| Code | Characteristic |
| M | Mandatory element or attribute |
| O | Optional element or attribute |
| C | Conditional element or attribute |
| MR | Mandatory and repeatable element |
| OR | Optional and repeatable element |
| CR | Conditional and repeatable element |
Mandatory elements and attributes MUST be provided in the Infrastructure messages in which they appear.
Infrastructure data objects (SIF_ZoneStatus, SIF_AgentACL) can be subject to SIF's request/response and event models;
when impacted by these models (in a SIF_Event or in a SIF_Response), these objects follow the same conventions as
listed in Data Model.
The SIF_Message element is the root element of all SIF messages.
| Element/@Attribute | Char | Description | Type | |
|---|---|---|---|---|
| SIF_Message | Contains one of the SIF message types. | choice of: SIF_Ack SIF_Event SIF_Provide SIF_Provision SIF_Register SIF_Request SIF_Response SIF_Subscribe SIF_SystemControl SIF_Unprovide SIF_Unregister SIF_Unsubscribe | ||
| @ | xmlns | C |
The xmlns attribute specifies the XML namespace for SIF messages.
For this version of the specification, the value of this attribute MUST be
Note that one | xs:anyURI |
| @ | Version | M |
The version of the SIF Implementation Specification that defines this message's XML structure.
For this version of the specification, the value of this attribute is | VersionType |
SIF_Header is a common message header for all SIF messages.
| Element/@Attribute | Char | Description | Type | |||
|---|---|---|---|---|---|---|
| SIF_Header | M | Header information associated with a message. | ||||
| SIF_MsgId | M |
| MsgIdType | |||
| SIF_Timestamp | M | Timestamp of when the message was sent. | xs:dateTime | |||
| SIF_Security | O | This element allows an originating agent to specify security requirements that the ZIS must ensure upon delivery of the message to recipient agents. | ||||
| SIF_Security/SIF_SecureChannel | M | The originating agent uses this element to specify security requirements for the channel between the ZIS and any recipient agents at delivery time. The ZIS must ensure these requirements are met for this message when delivered to other agents. | ||||
| SIF_Security/SIF_SecureChannel/ SIF_AuthenticationLevel | M | The minimum level of authentication required by the message originator to be considered a secure channel upon message delivery to other agents. | SIF_AuthenticationLevel | |||
| SIF_Security/SIF_SecureChannel/ SIF_EncryptionLevel | M | The minimum level of encryption required by the message originator to be considered a secure channel upon message delivery to other agents. | SIF_EncryptionLevel | |||
| SIF_SourceId | M | The | xs:token
| |||
| SIF_DestinationId | C | This element represents the ID of the recipient of the message and may be present as follows:
This element SHOULD NOT be used in any other SIF Infrastructure messages. If the element is present, it will be ignored by the ZIS. | xs:token
| |||
| SIF_Contexts | O |
Contains each SIF Context that applies to the message. If omitted, the applicable context is | SIF_Contexts |
The minimum level of encryption required by the message originator to be considered a secure channel upon message delivery to other agents.
Figure 5.1.3-1: SIF_EncryptionLevelTable 5.1.3-1: SIF_EncryptionLevelThe minimum level of authentication required by the message originator to be considered a secure channel upon message delivery to other agents.
Figure 5.1.4-1: SIF_AuthenticationLevelTable 5.1.4-1: SIF_AuthenticationLevel
A list of SIF contexts that applies to a message or operation. Typically where used as an optional element,
the omission of this element implies the SIF_Default context applies.
| Element/@Attribute | Char | Description | Type | |
|---|---|---|---|---|
| SIF_Contexts |
A list of SIF contexts that applies to a message or operation. Typically where used as an optional element,
the omission of this element implies the | List | ||
| SIF_Context | MR | SIF_Context |
The name of a SIF Context that applies to a message or operation.
Figure 5.1.6-1: SIF_Context| Element/@Attribute | Char | Description | Type | |||
|---|---|---|---|---|---|---|
| SIF_Context | The name of a SIF Context that applies to a message or operation. | xs:token
|
Contains protocol information regarding a ZIS or Agent.
Figure 5.1.7-1: SIF_Protocol| Element/@Attribute | Char | Description | Type | |||
|---|---|---|---|---|---|---|
| SIF_Protocol | C | Contains protocol information regarding a ZIS or Agent. | ||||
| @ | Type | M | The type of protocol to use ( | union of: DefinedProtocolsType xs:token | ||
| @ | Secure | M | Whether the protocol provides a secure channel. | values:
| ||
| SIF_URL | C | This element is required if the protocol is | xs:anyURI
| |||
| SIF_Property | OR | May contain zero or more | ||||
| SIF_Property/SIF_Name | M | Property name. | xs:token
| |||
| SIF_Property/SIF_Value | M | Property value. | xs:string
|
This element is used to signal a successful response.
Figure 5.1.8-1: SIF_Status| Element/@Attribute | Char | Description | Type | |||
|---|---|---|---|---|---|---|
| SIF_Status | This element is used to signal a successful response. | |||||
| SIF_Code | M | InfrastructureStatusCodeType | ||||
| SIF_Desc | O |
An optional textual description/equivalent of | xs:string
| |||
| SIF_Data | O |
Optional element to hold data related to a successful operation. This data is currently limited
to a | choice of: SIF_Message SIF_AgentACL SIF_ZoneStatus |
This element is used to signal an unsuccessful response.
Figure 5.1.9-1: SIF_Error| Element/@Attribute | Char | Description | Type | |||
|---|---|---|---|---|---|---|
| SIF_Error | This element is used to signal an unsuccessful response. | |||||
| SIF_Category | M | InfrastructureErrorCategoryType | ||||
| SIF_Code | M | See Error Codes. | union of: InfrastructureXMLValidationErrorType InfrastructureEncryptionErrorType InfrastructureAuthenticationErrorType InfrastructureAccessAndPermissionErrorType InfrastructureRegistrationErrorType InfrastructureProvisionErrorType InfrastructureSubscriptionErrorType InfrastructureRequestAndResponseErrorType InfrastructureEventReportingAndProcessingErrorType InfrastructureTransportErrorType InfrastructureSystemErrorType InfrastructureGenericMessageHandlingErrorType xs:token | |||
| SIF_Desc | M | A simple, easy to understand, description of the error. The primary consumer of this message is the application user. Example: "Unable to open database." | xs:string
| |||
| SIF_ExtendedDesc | O | An optional error description that is more complete and technical in nature. It is to be used as a diagnostic message in trouble-shooting procedures. Example: "The 'Students' table is opened in exclusive mode by user 'ADM1' (dbm.cpp, line 300)." | xs:string |
| Element/@Attribute | Char | Description | Type | |
|---|---|---|---|---|
| SIF_Query | SIF's default query mechanism. | |||
| SIF_QueryObject | M | This is the object that is being queried for. | ||
| @ | ObjectName | M | The actual name of the object that is being queried for. | SIF_RequestObjectNamesType |
| SIF_QueryObject/SIF_Element | OR | Individual elements/attributes being requested of matching object. See Note that this is a means to filter or select a subset of elements/attributes from a matching object; specifying elements/attributes here that do not occur in or are not supported in a matching object does not exclude that matching object from being returned. Include any existing parent elements/attributes of the elements/attributes that are requested but not present. | xs:normalizedString | |
| SIF_ConditionGroup | C |
Either
| ||
| @ | Type | M |
The Boolean operator for joining conditions ( | values:
|
| SIF_ConditionGroup/SIF_Conditions | MR | This construct allows for nested conditions. | ||
| @ | Type | M |
The boolean operator for joining conditions ( | values:
|
| SIF_ConditionGroup/SIF_Conditions/ SIF_Condition | MR | This element represents an individual condition. | ||
| SIF_ConditionGroup/SIF_Conditions/ SIF_Condition/SIF_Element | M | This is the element/attribute being queried. See below for syntax. | xs:normalizedString | |
| SIF_ConditionGroup/SIF_Conditions/ SIF_Condition/SIF_Operator | M | The comparison operator for the condition. | values:
| |
| SIF_ConditionGroup/SIF_Conditions/ SIF_Condition/SIF_Value | M |
| xs:string | |
| SIF_Example | C |
An example SIF object that serves as a template for matching objects. There is an implied | SIF_ExampleObjectType |
The SIF_Query element may have a SIF_ConditionGroup element that may have one or more SIF_Conditions
elements. A SIF_Conditions element may contain one or more SIF_Condition elements.
Each SIF_Condition element defines a search criterion, which contains the following sub-elements.
For example, if you wished to request the LibraryPatronStatus object for all teachers, the SIF_ConditionGroup
would be:
For example, if you wished to request the LearnerExclusion object for a student, the SIF_ConditionGroup
would be:
If you wished to request the LibraryPatronStatus object for a specific teacher then the SIF_ConditionGroup would
be:
To reference individual elements/attributes in query criteria for objects, and in lists of individual elements/attributes to
be returned from matching objects, SIF defines a path syntax which is based on a small subset of [XPath], for use
in SIF_Element.
Elements are specified by name (e.g. Name) and attributes are specified by name, prefixed with
@ (e.g. @Type). Namespace prefixes may precede element/attribute names as necessary (e.g. @xml:lang) and reference
the current prefix-to-namespace mappings within the XML of the request. To reference child elements or attributes of child elements, a path notation
is used where each element/attribute in the path is separated by / (e.g. Name/FirstName,
Name/@Type). The object's element is the root element and is not included when referencing child elements (e.g.
Name/FirstName, not StudentPersonal/Name/FirstName);
no / is required when referencing attributes of the object itself (e.g. @RefId, not
StudentPersonal/@RefId).
SIF_Condition/SIF_Element may also contain XPath predicates (e.g. [@Type='04]) to allow for more
precise matching, especially with regard to repeatable elements with "key" attributes. The following SIF_Condition
would match object withs any FirstName of Cameron:
Using a predicate allows the requester to specifically query the person's name of record (04) vs. his/her
previous, professional, current legal name, etc.
Predicate expressions supported in SIF are limited to or, and, =, element/attribute names with optional
prefixes and accessing nested elements/attributes using /.
SIF's default query mechanism for SIF_Request, SIF_Query, has several limitations that limit its usefulness when creating reporting applications
that process data from a SIF zone. SIF_Query is limited to matching only one object type per query, requiring applications to
manually join together results as needed for reporting and general data processing. SIF_ExtendedQuery is designed to allow for joins on
object identifiers/RefIds and to allow retrieval of data in a row/column fashion similar to SQL. Each returned column may contain hierarchical XML elements/objects.
While envisioned as the primary mechanism for SIF-based ReportManifests, Providers and Responders in a Zone may support SIF_ExtendedQuery
in addition to SIF_Query. Support for SIF_ExtendedQuery can be declared in and retrieved from the Zone is various Infrastructure
messages and objects.
Note that matching rows are generated solely based on the SIF_From clause, with optional join criteria, optionally
limited/filtered by the SIF_Where clause. If a repeatable element is requested as a column in SIF_Select, this does not generate multiple rows for each occurrence
of matching elements; all elements are returned in the corresponding column within a single row.
| Element/@Attribute | Char | Description | Type | |||
|---|---|---|---|---|---|---|
| SIF_ExtendedQuery | SIF's default query mechanism for Note that matching rows are generated solely based on the | |||||
| SIF_DestinationProvider | O |
If no | SIF_RequestObjectNamesType | |||
| SIF_Select | M | Identifies which data elements/attribute are to be returned as columns in each matching row. | ||||
| @ | Distinct | M | Specifies whether query results should return all rows ( | xs:boolean | ||
| @ | RowCount | M | The maximum number of rows to return. If | union of: xs:positiveInteger additional values:
| ||
| SIF_Select/SIF_Element | MR | Indicates the element/attribute to return as a column. Contents can be left empty to return the whole object specified in | xs:normalizedString | |||
| @ | Alias | O | Optional caption for the column. | xs:normalizedString
| ||
| @ | ObjectName | M | The name of the object from which to retrieve element/attributes. | SIF_RequestObjectNamesType | ||
| SIF_From | M |
Join specification for the query if more than one object is being queried. If only one object is being queried, specify it without the
| ||||
| @ | ObjectName | M | The name of the object to query. | SIF_RequestObjectNamesType | ||
| SIF_From/SIF_Join | OR | Additional objects to query, with join conditions specifying the relationships between objects. | ||||
| @ | Type | M | Type of relational join. | values:
| ||
| SIF_From/SIF_Join/SIF_JoinOn | MR | Specifies the conditions for the join. | ||||
| SIF_From/SIF_Join/SIF_JoinOn/ SIF_LeftElement | M | Specifies the left-side element/attribute on which to constrain the join. Currently only support for keys/RefIds/RefId references is required. | xs:normalizedString | |||
| @ | ObjectName | M | Name of the object that contains the element/attribute. | SIF_RequestObjectNamesType | ||
| SIF_From/SIF_Join/SIF_JoinOn/ SIF_RightElement | M | Specifies right left-side element/attribute on which to constrain the join. Currently only support for keys/RefIds/RefId references is required. | xs:normalizedString | |||
| @ | ObjectName | M | Name of the object that contains the element/attribute. | SIF_RequestObjectNamesType | ||
| SIF_Where | O | Optionally specifies conditions to limit/filter rows resulting from the | ||||
| SIF_Where/SIF_ConditionGroup | M | Conditions that matching rows must meet. | ||||
| @ | Type | M |
The Boolean operator for joining conditions ( | values:
| ||
| SIF_Where/SIF_ConditionGroup/ SIF_Conditions | MR | This construct allows for nested conditions. | ||||
| @ | Type | M |
The boolean operator for joining conditions ( | values:
| ||
| SIF_Where/SIF_ConditionGroup/ SIF_Conditions/SIF_Condition | MR | This element represents an individual condition. | ||||
| SIF_Where/SIF_ConditionGroup/ SIF_Conditions/SIF_Condition/ SIF_Element | M | This is the element/attribute being queried. | xs:normalizedString | |||
| @ | ObjectName | M | The name of the object containing the element/attribute. | SIF_RequestObjectNamesType | ||
| SIF_Where/SIF_ConditionGroup/ SIF_Conditions/SIF_Condition/ SIF_Operator | M | The comparison operator for the condition. | values:
| |||
| SIF_Where/SIF_ConditionGroup/ SIF_Conditions/SIF_Condition/ SIF_Value | M |
| xs:string | |||
| SIF_OrderBy | O | An optional list of elements/attributes by which to sort the resulting rows. | ||||
| SIF_OrderBy/SIF_Element | MR | Indicates the element/attribute by which to sort. | xs:normalizedString | |||
| @ | ObjectName | M | The name of the object containing the element/attribute. | SIF_RequestObjectNamesType | ||
| @ | Ordering | M | Whether to order the element/attribute in ascending or descending order. | values:
|
While there are differences in how matching objects are returned, note that all non-SIF_Example SIF_Query-based requests
can be mapped to a corresponding SIF_ExtendedQuery-based request:
| 1 |
Place SIF_Query/SIF_QueryObject/@ObjectName in SIF_ExtendedQuery/SIF_From/@ObjectName.
|
| 2 |
If elements/attributes are specified in SIF_Query/SIF_QueryObject/SIF_Element,
place them in SIF_ExtendedQuery/SIF_Select/SIF_Element with @ObjectName
set to SIF_Query/SIF_QueryObject/@ObjectName. Otherwise in SIF_Select, specify
an empty SIF_Element element with @ObjectName
set to SIF_Query/SIF_QueryObject/@ObjectName.
|
| 3 |
If SIF_Query/SIF_ConditionGroup exists, place it in SIF_ExtendedQuery/SIF_Where setting
@ObjectName
to SIF_Query/SIF_QueryObject/@ObjectName in every occurrence of SIF_Element.
|
| 4 |
Set SIF_Select/@Distinct to false and SIF_Select/@RowCount to All.
|
This element provides a wrapper for data returned in response to a SIF_ExtendedQuery. Used in SIF_Response
and SIF_ReportObject.
| Element/@Attribute | Char | Description | Type | |||
|---|---|---|---|---|---|---|
| SIF_ExtendedQueryResults |
This element provides a wrapper for data returned in response to a | |||||
| SIF_ColumnHeaders | M | Provides the element/attribute and caption information for each column supplied in | ||||
| SIF_ColumnHeaders/SIF_Element | MR | The element/attribute specified for the column in | xs:normalizedString | |||
| @ | ObjectName | M | The object in which the element/attribute occurs. | SIF_RequestObjectNamesType | ||
| @ | Alias | O | The caption for the column, if specified in | xs:normalizedString
| ||
| @ | xsi:type | O | Optionally allows type of column value to be explicitly communicated. | |||
| SIF_Rows | M | A list of matching rows resulting from the supplied | ||||
| SIF_Rows/R | OR |
An individual matching row resulting from the supplied | ||||
| SIF_Rows/R/C | MR |
Contains the value of each column specified in | ExtendedContentType |
This message is used as an acknowledgement for infrastructure messages. All infrastructure messages will return a
SIF_Ack as a result to indicate if the request was successful or not. A SIF_Ack must contain either a SIF_Status
element acknowledging a successful result or a SIF_Error element describing the failure. The SIF_Error element
contains a standardized error number as well as a description of the error.
A successful SIF_Ack is typically returned to the caller containing a SIF_Header, SIF_OriginalSourceId,
SIF_OriginalMsgId and the SIF_Status element. In situations where additional information needs to be returned to
the caller, a SIF_Data element can be added to the SIF_Status element.
In addition, successful SIF_Ack messages may also be sent to the ZIS under two conditions. The first is when a
pull-mode agent requests that a message is to be removed from its queue. The
second is when an agent which has invoked SMB wishes to end SMB handling. In that case, the agent sends a "Final" SIF_Ack to the ZIS. In each
instance the ZIS returns a SIF_Ack in response to the agent's SIF_Ack message.
| Element/@Attribute | Char | Description | Type | |
|---|---|---|---|---|
| SIF_Ack | M | This message is used as an acknowledgement to an infrastructure message. | ||
| SIF_Header | M | Header information associated with this message. | SIF_Header | |
| SIF_OriginalSourceId | M | The | xs:token | |
| SIF_OriginalMsgId | M | The | MsgIdType | |
| SIF_Status | C | This element is used to signal a successful response. | SIF_Status | |
| SIF_Error | C | This element is used to signal an unsuccessful response. | SIF_Error |
SIF_Event is used to deliver event objects as defined in SIF. Events represent the availability of a new data object, changes to, or deletions of data object.
| Element/@Attribute | Char | Description | Type | |
|---|---|---|---|---|
| SIF_Event | M |
| ||
| SIF_Header | M | Header information associated with this message. | SIF_Header | |
| SIF_ObjectData | M | |||
| SIF_ObjectData/SIF_EventObject | M | Contains the actual object (partial or whole) that is being added, changed or deleted. | SIF_EventObjectType | |
| @ | ObjectName | M | This is the name of the object being added, changed or deleted. | SIF_SubscribeObjectNamesType |
| @ | Action | M | This is the action associated with the object that is being conveyed by this | values:
|
The SIF_Provide message is used to attempt registering as the provider of one or more data objects.
| Element/@Attribute | Char | Description | Type | |
|---|---|---|---|---|
| SIF_Provide | M | The | ||
| SIF_Header | M | Header information associated with this message. | SIF_Header | |
| SIF_Object | MR | This is the object that is being provided. | ||
| @ | ObjectName | M | The actual name of the object that is being provided. | SIF_ProvideObjectNamesType |
| SIF_Object/SIF_ExtendedQuerySupport | O | Whether or not the Agent supports | xs:boolean | |
| SIF_Object/SIF_Contexts | O | The contexts in which the object is being provided; if omitted, the context is | SIF_Contexts |
Once registered, this message allows an agent to announce to the ZIS the functionality the agent will provide.
The ZIS compares the functionality to its access control list and either returns a failure or a success. Upon success,
the ZIS performs an atomic update of its provide/subscribe database entries for the agent to match the objects listed in this message and atomically
updates other stored settings for the agent.
A ZIS must not allow an agent to perform operations that it did not successfully announce. Agents should be aware that if the access control
list changes after a successful SIF_Provision, some operations may still be rejected with access control errors.
| Element/@Attribute | Char | Description | Type | |
|---|---|---|---|---|
| SIF_Provision |
Once registered, this message allows an agent to announce to the ZIS the functionality the agent will provide.
The ZIS compares the functionality to its access control list and either returns a failure or a success. Upon success,
the ZIS performs an atomic update of its provide/subscribe database entries for the agent to match the objects listed in this message and atomically
updates other stored settings for the agent.
A ZIS must not allow an agent to perform operations that it did not successfully announce. Agents should be aware that if the access control
list changes after a successful | |||
| SIF_Header | M | Header information associated with this message. | SIF_Header | |
| SIF_ProvideObjects | M | A list of objects an Agent wishes to provide. | ||
| SIF_ProvideObjects/SIF_Object | OR | |||
| @ | ObjectName | M | The name of each object. | SIF_ProvideObjectNamesType |
| SIF_ProvideObjects/SIF_Object/ SIF_ExtendedQuerySupport | O | Whether or not | xs:boolean | |
| SIF_ProvideObjects/SIF_Object/ SIF_Contexts | O |
Applicable contexts for stated object support. If omitted, the context defaults to | SIF_Contexts | |
| SIF_SubscribeObjects | M | A list of objects to which an Agent wishes to subscribe. | ||
| SIF_SubscribeObjects/SIF_Object | OR | |||
| @ | ObjectName | M | The name of each object. | SIF_SubscribeObjectNamesType |
| SIF_SubscribeObjects/SIF_Object/ SIF_Contexts | O |
Applicable contexts for stated object support. If omitted, the context defaults to | SIF_Contexts | |
| SIF_PublishAddObjects | M | A list of objects for which an Agent wishes to publish | ||
| SIF_PublishAddObjects/SIF_Object | OR | |||
| @ | ObjectName | M | The name of each object. | SIF_SubscribeObjectNamesType |
| SIF_PublishAddObjects/SIF_Object/ SIF_Contexts | O |
Applicable contexts for stated object support. If omitted, the context defaults to | SIF_Contexts | |
| SIF_PublishChangeObjects | M | A list of objects for which an Agent wishes to publish | ||
| SIF_PublishChangeObjects/ SIF_Object | OR | |||
| @ | ObjectName | M | The name of each object. | SIF_SubscribeObjectNamesType |
| SIF_PublishChangeObjects/ SIF_Object/SIF_Contexts | O |
Applicable contexts for stated object support. If omitted, the context defaults to | SIF_Contexts | |
| SIF_PublishDeleteObjects | M | A list of objects for which an Agent wishes to publish Delete events. | ||
| SIF_PublishDeleteObjects/ SIF_Object | OR | |||
| @ | ObjectName | M | The name of each object. | SIF_SubscribeObjectNamesType |
| SIF_PublishDeleteObjects/ SIF_Object/SIF_Contexts | O |
Applicable contexts for stated object support. If omitted, the context defaults to | SIF_Contexts | |
| SIF_RequestObjects | M | A list of objects an Agent wishes to request. | ||
| SIF_RequestObjects/SIF_Object | OR | |||
| @ | ObjectName | M | The name of each object. | SIF_RequestObjectNamesType |