Removed operations for derived properties in UML 2.4.1 which where stubbed in to
return true. Thus, the validator will again generate exceptions when these are called,
as it does with other metamodels. This currently appears to be the best approach to
handling the missing derivation problem. The problem may go away in UML 2.5.

Corrected a problem with translation of the OCL grammar element CollectionLiteralPart
where the populating expression was not literal (e.g. OrderedSet{ownedEnd}.

Compiled with LW 6.1

2012-02-28:

Updated UML 2.5 metamodel.

Allow validation of CMOF. (Note that the toplevel package should have xmi:id='_0'.)

2012-02-25:

Restored ability to specify href URI for user-loaded profiles.

Fixed various bugs in OCL parsing revealed by UML2.5

Implemented OCL closure operation.

Fixed bug where the schema loader was concatenating ownedRule bodies (OCL), where it
should have been using bodyCondition, precondition and postcondition.

Corrected a problem where ill-formed XML in profile files caused a server error.

2011-10-14:

Implemented a profile loading capability.

Implemented new reporting for cycles in the uml:OwnedElement property.
In files where cycles are found, XMI Canonical diffing is not performed.

Report errors where uml:LiteralSpecification is required but a simple literal
was used in the XMI.

Removed experimental NIEM capability -- The NIEM profile can be loaded manually
using the new profile loading capability.

2011-08-10:

Experimental NIEM capability.

2011-08-02:

Eliminated a bug in how the object match table referenced object owners.

Eliminated a bug where derived unions could contain duplicate elements.

Eliminated a bug where the object browser could give an error when there was
no reference test case file associated with the submitted file.

2011-08-01:

Eliminated a bug where the test case being used was not cleared between runs.

Force new session object with each validation run.

Don't start server until Valid TCs are loaded.

2011-07-28:

Eliminated a bug in the XMI diff algorithm.

Implemented a table identifying difference between the user's file and
the corresponding MIWG test case (where applicable). See 'Table of corresponding objects'
under the heading 'Canonical XMI' on the main report page.

Eliminated a bug where errors significant enough to halt assessment of the user's file
did not provide information regarding what went wrong.

Implemented in the object browser a link from the user's object to
the corresponding object in valid.xmi. This is available only when testing
concerns a MIWG test case and the object requested matched an object in valid.xmi.

2011-07-24:

Implemented the revised version of Canonical XMI.

2011-06-23:

Implemented a hybrid model/xml diff capability. Note that:

Since it uses numerical
scoring of object resemblance, it will require some tuning. Report bugs.

It is now possible to examine objects from the valid.xmi file as well
as the file you have uploaded. When a valid.xmi object is shown, to avoid confusion,
its title background is light green (very obvious).

Corrected a problem where unresoved xmi:idrefs caused a program error in
Canonical XMI transformation.

2010-12-08:

Corrected a problem in Canonical XMI transformation where the elementization of
object references did not encode these as xmi:idrefs.

2010-11-22:

Corrected a problem in Canonical XMI generation where LiteralSpecifications were
not provided unique XMI:ids.

Corrected a problem in Canonical generation where objects with qualified names
that were not unique to their scope were not provided unique XMI:ids.

Developed a regression test to report where results differed between
the testing of an uploaded file and testing of the canonical file generated
from the uploaded file. Currently, results are identical.

Corrected several problems in the reading of Canonical XMI.

Corrected a problem in Canonical generation where xmi:id values outside of the
Model XML Element were not being translated to the canonical values.

2010-11-01:

Modified UML2.2 metamodel pursuant to today's MIWG telecon:

ActivityEdge.guard given default value True.

ActivityEdge.weight given default value 1.

ObjectNode.upperBound given default value *.

ActivityEventAction.trigger made to subset Element.ownedElement.

2010-10-30:

Added reporting for many types of XML error.

Fixed a bug where propagating an opposite property would cause a hard error when the object being updated was not of a type possessing the property.

2010-10-12:

Fixed a bug where Canonical XMI ordering was not enforced.

Removed XMI version from the xmi:XMI element, a requirement of the Canonical spec.

Fixed a bug where objects were not created for xml elements mistakenly identified
as xmi:id references.

Fixed a bug in Canonical XMI where the strings that were not references to xmi:ids were
mistakenly replaced with the renamed xmi:id string whenever the string happened
to match an xmi:id.

2010-09-30:

Fixed a bug in Canonical XMI where the xmi:type attribute was kept when an href was present.

Fixed several bugs in reading Canonical XMI.

2010-09-28:

Implemented a check for serializing the opposite of a property declared composite.

Corrected a bug where the XMI shown to explain errors was canonical XMI,
not the uploaded original.

Colorized some error reporting of user's XMI.

Fixed a bug in Canonical XMI where multi-valued XML attributes where not transformed correctly.

Fixed a bug in Canonical XMI where the XMI:xmi XML element was not serialized.

Fixed a bug in Canonical XMI where XML namespace tags had wrong URIs.

Fixed a bug in Canonical XMI where .qualifiedName was used when that name is a null string.

Made the Canonical XMI code thread-safe.

2010-09-20:

Various corrections to the (still rough) Canonical XMI implementation.

2010-09-19:

Implemented direct XML transformation for Canonical XMI -- some bugs remain, but it is
good enough for discussion at tomorrow's face-to-face.

Corrected a problem where false positives were generated on type checking
(typically very basic types, NamedElement, etc.). The problem occured because
the version of UML used in testing was not the one specified in the user's file.

Disabled OCL constraint ObjectNode.not_unique. It is not clear what was intended.

Allowed profile objects inside of uml:Model object.

Corrected (I think!) OCL of AssociationClass.cannot_be_defined.

Made Transition.trigger owned by the Transition.

Various changes to better support profiles and hrefs.

2010-01-04:

Carried over into UML2.2 2009-07-27 fix for RedefinableElement.isRedefinitionContextValid

Carried over into UML2.2 2009-05-12 fix for NamedElement.qualifiedName.1

Carried over into UML2.2 2009-05-12 fix for Constraint.value_specification_boolean

Carried over into UML2.2 the UML 2.1.1 fix (unclear of date) for Property.redefined_property_inherited

Corrected a problem reported by Ralph Hains where validation details were not being shown.

Allow reference to http://schema.omg.org/spec/UML/2.1.2/uml.xml in XMI.

Corrected OCL errors in Stereotype.generalize, Extension.non_owned_end,
Pseudostate.outgoing_from_initial and ExecutionSpecification.same_lifeline,
and corrected a problem with packagin interning (found on 'context').

Removed 'members only' capbilities; these are handled by MIWG.

Against my principles, I allowed properties that are declared derived but
also have a default value(!) to use that default value when the derivation
is not provided. There are two of these: ExtensionEnd.lower, Message.messageKind.

I am not sure whether this is a bug in UML, or whether I should have been
able to infer it from metamodel, but: Extension.ownedEnd redefines Association.ownedEnd
and Association.ownedEnd has opposite Property.owningAssociation.
I made Extension.ownedEnd have opposite ExtensionEnd.owningAssociation, and defined
the type of Extension.ownedEnd to be an ExtensionEnd.

Implemented a prototype object diff capability.

Corrected a bug in OCL::UnlimitedNatural arithmetic relations.

Added run-time diagnostic capabilities.

Added 'instance n of m' in title of instance error reports.

2008-08-18:

Corrected a bug in OCL of derived attribute Classifier.inheritedMember. Execution
was getting stuck in non-progressing recursion among hasVisiblityOf and inheritableMember
(calling each other with no change in arguments).

Corrected a bug where OCL validation was occurring on every reference to an
object rather than just every object.

Corrected a bug where operation pre/post condition code was confused with its body.

Switched to using compiled OCL operations and derivations.

2008-08-16:

Corrected a bug where many opposites were not being
recognized. The bug would have caused spurious 'Missing mandatory value' reports
in some files. Regression testing suggests, however, that this does not occur as often
as I had initially thought.

Corrected a bug where complete OCL operations that were evaluated to a
string constant (e.g. NamedElement.separator()) were returning nil, not the constant.

Corrected a bug where 'result' was considered an OCL reserved word, causing some parsing errors.

Allow http://schema.omg.org/spec/UML/2.1(.1)?/uml.(xml|xmi) as a reference to
the entire UML profile.

Fixed bug in reporting error 'Cannot infer class of object.'

2008-04-04:

Fixed a problem where Profile objects were not themselves being dereferenced
(content was being dereferenced correctly, however).

Created a UML Standard Profile (by hand). It currently only contains
the stereotype 'Trace,' used by SysML.

2008-03-08:Fixed a problem where stereotypes that could extend two or more metaclasses resulted in
an extended metaclass that inherited from all of them.

2008-02-18:

Updated code to use the SysML Profile 20070901 found at
http://www.omg.org/technology/documents/formal/sysml.htm

Fixed a problem where errors printing several UML Literal types caused problems
in the reporting of example XMI.

Fixed a problem where (typically stereotyped) objects defined outside of XML scope
of Model were not being collected for reference.

Fixed a problem where '_0' was not recognized as 'the profile itself' in
references such as 'http://schema.omg.org/spec/UML/2.1.1/StandardProfileL2.xmi#_0'
The current workaround is to create an object of type uml:Profile for each
such reference. Whether this will be sufficient remains to be seen.

Created report details for warning 'No proxy for stereotyping' (N.B. This
warning still needs to be described better, the explantion is not accurate.)

2008-01-02: Added reporting for two new types of errors arising from faulty OCL: errors calculating derived attributes and errors due to missing derivations. Typical validation results will report many of these, but they should not be
much concern to the Miwg participants. They are tyically due to bugs in the
UML and SysML specs. Their presence makes analysis of the OCL constraints involved impossible.
We aren't providing detailed reporting on these because they probably aren't interesting
to Miwg participants.

2007-05-13: The modification of 2007-03-21 appears to be ill-advised; subsetted properties
should be copied downward regardless of whether the target is a derived union. (More specifically, nothing
in the Infrastructure spec contradicts this). There still may be some loose ends here though. For example,
Class.ownedAttribute is ordered, and not a derived union, but subsetted by ownedPort. Where in the ordered
set are the subsetted properties positioned?

2007-05-12: Corrected a problem where knowledge of derived union sources was not
copied to stereotyped (programmatically created) metaclasses.

2007-03-16: Improved processing time by ...um, a factor of 100. Moved
error reports for unresolved URI earlier in the reporting sequence.

2007-03-14: Provided a solution to the Validator's limitation in referencing
objects in external models/files through XMI href. However, the real problem here is that, in most instances,
there should be normative reference files (e.g. UML StandardLibrary).
To demonstrate a solution (and make some headway with the UPDM Profile) I used
Infrastructure.uml and Superstructure.uml from Eclipse and the Eclipse-specific indexing into those files.

2007-03-13: Modified behavior when 'Cannot infer class of object (XMI rule 2g)'
is apparent so that it defaults to the choose the base class for the property. It still warns, though,
as it should.

2007-01-27: Removed duplicate OCL violations from reporting.

2006-12-10: Added a link from Object Browser pages to the Class Browser page
of the type of object shown.

2006-12-10: Use anchored text on OCL constraint names in Validator report
(OCL constraint violation reporting).
It links to the Class Browser position where the OCL constraint is displayed.

2006-12-10: Corrected the implementation of oclType(). BTW
oclType() is apparently an OCL Library function (used in MMs such as L3) but not defined
in OCL Version 2!

2006-12-09: Added links to the error explanations from the 'summary of warnings' section
of the validation report page

2006-12-09: Corrected problem where default values (from MM definitions) were not
being set

2006-11-18: Implemented derived properties. In the past, certain 'Missing Mandatory
Value Violation' errors were in fact due to the Validator not being able to compute the property from
the OCL. Unfortunately, the UML spec does not provide OCL for all of the properties that are
declared derived. A future fix will report when a Multiplicity Violation was the spurious
result of the absence of the OCL definition that would provide the value. Another fix will
define that OCL ;^)

2006-11-13: Corrected a problem where the type given to stereotyped objects was
in some cases wrong.

2006-11-10: Corrected a problem finding SysML objects in XMI.

2006-11-09: Validation is now performed on all objects, not just those with an xmi:id.

2006-11-09: Reporting now includes statistics on how many of the 39 SysML
stereotypes were applied. (called 'SysML classes instantiated')

2006-06-06: Began development.

UML+Profile Class Browser Changes

2008-08-17 Class Browser now tracks OCL modifications and editor notes. See
the section of this page, Current Status of OCL

2008-03-08:

Specialized Class Browser pages that concerned stereotypes so that
they didn't contain heading for content inappropriate for stereotypes.

Fixed a problem where asking for property detail in the Object Browser
resulted in a server error.

Added a list of 'example objects' to the Class Browser pages.
The examples are presented in cases where you have uploaded an XMI file containing objects of
the class being presented.

2007-03-25: Provide the same slot details in the object browser as is presented in
the class browser.

2007-03-23: List the sources of a derived union in the details of the property.

2006-12-10: Show default values in property details.

2006-12-09: When the spec does not provide a function to compute a
derived property, it is so noted in the property details. (See the Validator changelog entry
of this date for a list of these properties.)

2006-11-06: Class description pages that describe classes from the
SysML Profile now have titles that read 'SysML Stereotype foo' etc.

2006-11-06: The Class Browser now appends a '*' after the name of
every class listed on the Class Browser main page that names a SysML object
(all others are part of UML).

2006-06-06: Begin development.

Current Status of the Validator's OCL

The Validator uses the UML's metamodel OCL constraints and operations wherever possible, of course.
However, there are bugs in that OCL. In order to make the OCL evaluation
performed by the Validator more meaningful, and also to suggest
improvements to the OCL to the UML standard writers, this tool uses
modified OCL in some places. In other places, where it isn't clear what the solution should be,
I haven't attempted to write a solution. Finally, there is OCL in UML and SysML I probably could write,
but haven't yet.

Rewritten OCL

The following are constraints and operations that were rewritten to fix a bug. The page at the link
describes the changes made.

'Ignored' OCL

The following are constraints and operations that are 'ignored.' An 'ignored' constraint
returns ocl:true always. An 'ignored' operation typically returns Set{}.
The page at the link describes the changes made.