What is the difference between ovm_transaction and ovm_sequence_item?

If you want to the OVM sequence/sequencer/driver components for generating and sending sequence items, you must extend your class from ovm_sequence_item. It has the extra bookkeeping information needed to arbitrate and route transactions.

The UVM has effectively deprecated uvm_transaction in favor of making everybody use uvm_sequence_item.