SlideShare a Scribd company logo
Dave Steinberg and Ed Merks IBM Rational Software Toronto, Canada EMF and XSD Projects Everything you always wanted to do with EMF* *But were afraid to ask
Topics Introduction to EMF Simple Customizations to Generated Code Extending Behavior with Adapters Validating Model Data Customizing XML Persistence
Introduction to the Eclipse Modeling Framework Low-cost modeling for the Java mainstream Leverages the intrinsic “model” in an application Java interfaces or XML Schema No high-level modeling tool required Mixes modeling with programming to maximize the effectiveness of both Boosts productivity and facilitates integration “ The foundation for model-driven development and data integration in Eclipse”
Model Conversion and Code Generation XML Schema Java Model Ecore UML I M P O R T GENERATE Java Edit Java Editor
Generated Code For each modeled class… An interface: An implementation: public interface PurchaseOrder extends EObject { EList getItems(); String getComment(); void setComment(String value); ... } public class PurchaseOrderImpl extends EObjectImpl implements PurchaseOrder { protected EList items = null; ... }
Reflective Interface for Model Objects All model classes derive from EObject: This reflective EObject API lets us write generic code, like in EMF’s editing, persistence, validation frameworks public interface EObject extends Notifier { EClass eClass(); Resource eResource(); EObject eContainer(); EReference eContainmentFeature(); boolean eIsProxy(); Object eGet(EStructuralFeature feature, boolean resolve); void eSet(EStructuralFeature feature, Object newValue); boolean eIsSet(EStructuralFeature feature); void eUnset(EStructuralFeature feature); ... }
Customizing Interfaces In some applications, you may prefer to have your modeled classes present a simpler interface: public interface PurchaseOrder { List getItems(); String getComment(); void setComment(String value); Date getOrderDate(); ... } Doesn’t extend EObject Setter suppressed Ordinary List
Customizing Interfaces: Taking Out the “E” Generated interfaces customized via generator options Root Extends Interface Suppress EMF Types (EList, EMap, EObject) Generated classes must still implement reflective EObject API
Customizing Interfaces: Suppressing Accessors Individual accessors (get, set, isSet, unset) can be suppressed in generated interfaces Modeled via EAnnotations on features, with source of “http://www.eclipse.org/emf/2002/GenModel” Only affects the interface; features still fully available reflectively
Demo: Customizing Generated Interfaces Annotate purchase order interface to suppress a setter Set generator options to suppress EMF base class and types Editor and serialization still work, via reflective API
Notifiers and Observers In EMF, every model object is a change notifier: An observer is registered to receive notifications: public interface Notifier { EList eAdapters(); boolean eDeliver(); void eSetDeliver(boolean deliver); void eNotify(Notification notification); } item.eAdapters().add(itemObserver);
Notifications Notifications describe the change that occurred: public interface Notification { Object getNotifier(); int getEventType(); int getFeatureID(Class expectedClass); Object getFeature(); Object getOldValue(); Object getNewValue(); boolean wasSet(); boolean isTouch(); boolean isReset(); int getPosition(); boolean getOldBooleanValue(); boolean getNewBooleanValue(); ... }
Example: Simple Observer ItemChangeCounter An observer that counts changes to features of an Item Extends AdapterImpl, the framework base class for adapters/observers Handles notifications in notifyChanged() Tests isTouch() to ignore non-changes Switches on feature ID for efficiency Singleton instance is added to model objects
Adapters In addition to receiving notifications, observers in EMF are also adapters: Adapters can be used to extend the behavior of the objects they are attached to. public interface Adapter { void notifyChanged(Notification notification); Notifier getTarget(); boolean isAdapterForType(Object type); ... }
Adapter Factories Adapter factories are used to obtain an adapter providing a particular type of behavior extension: By convention, the type is often the interface that the adapter implements: public interface AdapterFactory { boolean isFactoryForType(Object type); Object adapt(Object object, Object type); Adapter adapt(Notifier target, Object type); ... } POAdapter adapter = (POAdapter)poAdapterFactory.adapt(order, POAdapter.class);
Example: Adapter and Adapter Factory ChangeCounter Simple interface for counting and comparing changes ChangeCounterAdapter Adapter-based implementation that isAdapterFor(ChangeCounter.class) ChangeCounterAdapterFactory Singleton adapter factory that creates a ChangeCounterAdapter as an adapter of this type for any model object
Content Adapters EContentAdapter Framework base class for adapters that respond to changes from a complete containment tree of model objects Automatically adds and removes itself as objects are added to and removed from the tree Subclasses’ override for notifyChanged() must call super.notifyChanged()
Example: Content Adapter ContentChangeCounter Extends EContentAdapter to count the number of changes to a purchase order and its contents
Validation Framework Model objects validated by external EValidator: Detailed results accumulated as Diagnostics Essentially a non-Eclipse equivalent to IStatus Records severity, source plug-in ID, status code, message, other arbitrary data, and nested children public interface EValidator { boolean validate(EObject eObject, DiagnosticChain diagnostics, Map context); boolean validate(EClass eClass, EObject eObject, DiagnosticChain diagnostics, Map context); boolean validate(EDataType eDataType, Object value, DiagnosticChain diagnostics, Map context); ... }
Framework EValidator Implementations Diagnostician walks a containment tree of model objects, dispatching to package-specific validators Diagnostician.validate() is the usual entry point Obtains validators from its EValidator.Registry EObjectValidator validates basic EObject constraints Multiplicities are respected Proxies resolve All referenced objects are contained in a resource Data type values are valid
Generated EValidator Implementations Dispatch validation to type-specific methods For model objects, one method is called for each… Invariant: defined directly on the class, as an operation with <<inv>> stereotype Constraint: externally defined for the class via the validator method In either case, method body must be hand-coded Constraints generated, with implementation, for simple type facets defined in XML Schema Basic constraints inherited from EObjectValidator
Demo: Constraints and Validation Add constraints and an invariant to the purchase order model Write implementations Use the generated editor to create and validate an instance of the model
Model Persistence Resource is EMF’s unit for persistence Resource.getContents() returns the list of objects to be persisted as part of the resource Resource.save() converts the model to its persistent form and writes it out The complete contents of the resource includes containment trees – objects are always persisted along with their container Included Resource implementations: Highly customizable XMLResource XMIResource for XML Metadata Interchange 2.0
Customizing XML Persistence Extended Metadata Annotations added to Ecore elements to customize XML persistence Modeled as EAnnotations with source of “http:///org/eclipse/emf/ecore/util/ExtendedMetaData” Programmatically accessed via ExtendedMetaData interface An XMLResource option specifies that extended metadata should be used during save or load: Map options = new HashMap(); options.put(XMLResource.OPTION_EXTENDED_META_DATA, ExtendedMetaData.INSTANCE); resource.save(options);
Demo: Customizing XML Persistence Add extended metadata annotations to purchase order model Generate code PPOPackageImpl adds the annotations to the model that it builds at runtime PPOResourceFactoryImpl creates and initializes resource to use extended metadata Plug-in manifest file globally registers the factory against “.ppo” file extension
Summary EMF is low-cost modeling for the  Java  mainstream, leveraging the intrinsic model in an application Generated interfaces can expose simpler API for your model, while uniform EObject API enables integration “under the covers” Adapters provide dynamic behavior extension Validation framework tests objects against invariants and external constraints Extended metadata can customize XML persistence
Additional Information EMF documentation in Eclipse Help Overviews, tutorials, API reference EMF project Web site http://www.eclipse.org/emf/ Downloads, documentation, FAQ, newsgroup, Bugzilla, EMF Corner Eclipse Modeling Framework , by Frank Budinsky et al. ISBN: 0131425420

More Related Content

PPT
ITU - MDD - EMF
PPTX
Java Annotations
PPT
Java Annotation
PPTX
Type Annotations in Java 8
PPT
EclipseCon 2006: Introduction to the Eclipse Modeling Framework
PPTX
Eclipse Modeling Framework
KEY
L0043 - Interfacing to Eclipse Standard Views
PPT
Understanding Annotations in Java
ITU - MDD - EMF
Java Annotations
Java Annotation
Type Annotations in Java 8
EclipseCon 2006: Introduction to the Eclipse Modeling Framework
Eclipse Modeling Framework
L0043 - Interfacing to Eclipse Standard Views
Understanding Annotations in Java

What's hot (20)

PPT
Annotations
PPSX
Java annotations
PDF
S313937 cdi dochez
PPTX
java drag and drop and data transfer
PPT
EclipseCon 2007: Effective Use of the Eclipse Modeling Framework
PPTX
Component interface
KEY
L0033 - JFace
PPT
Enhancements
PPTX
Java Beans
PDF
Android Application Development - Level 2
PDF
Android Application Development - Level 3
KEY
L0036 - Creating Views and Editors
PDF
Performance and Extensibility with EMF
DOCX
MCS,BCS-7(A,B) Visual programming Syllabus for Final exams @ ISP
PPTX
.NET Attributes and Reflection - What a Developer Needs to Know...
DOCX
Rhino Mocks
PPTX
Annotations
PPTX
Cocoa and MVC in ios, iOS Training Ahmedbad , iOS classes Ahmedabad
Annotations
Java annotations
S313937 cdi dochez
java drag and drop and data transfer
EclipseCon 2007: Effective Use of the Eclipse Modeling Framework
Component interface
L0033 - JFace
Enhancements
Java Beans
Android Application Development - Level 2
Android Application Development - Level 3
L0036 - Creating Views and Editors
Performance and Extensibility with EMF
MCS,BCS-7(A,B) Visual programming Syllabus for Final exams @ ISP
.NET Attributes and Reflection - What a Developer Needs to Know...
Rhino Mocks
Annotations
Cocoa and MVC in ios, iOS Training Ahmedbad , iOS classes Ahmedabad
Ad

Viewers also liked (17)

PDF
Electromagnetic fields and public health: WHO
PDF
Financial planning process design 5 powerpoint presentation templates.
PPTX
Financial planning process 1 powerpoint presentation templates
PDF
EMF & Cancer
PPTX
Electromagnetic spectrum
PPTX
Emf radiation by gtpl(glare technocons pvt. ltd.)
PPT
Biotechnology - Natural vs. Man-Made Electromagnetic Fields (EMF) - Futur...
PPTX
Managing Employee Happiness
PPTX
Financial planning process style 6 powerpoint presentation templates
PPTX
Mobile tower radiation
PDF
Financial planning process 3 powerpoint presentation templates.
PDF
A presentation on hazards of cell phones
PPT
Electromagnetic waves
PPT
Body defense mechanism and immunity
PDF
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
PPTX
WTF - Why the Future Is Up to Us - pptx version
PDF
Hype vs. Reality: The AI Explainer
Electromagnetic fields and public health: WHO
Financial planning process design 5 powerpoint presentation templates.
Financial planning process 1 powerpoint presentation templates
EMF & Cancer
Electromagnetic spectrum
Emf radiation by gtpl(glare technocons pvt. ltd.)
Biotechnology - Natural vs. Man-Made Electromagnetic Fields (EMF) - Futur...
Managing Employee Happiness
Financial planning process style 6 powerpoint presentation templates
Mobile tower radiation
Financial planning process 3 powerpoint presentation templates.
A presentation on hazards of cell phones
Electromagnetic waves
Body defense mechanism and immunity
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
WTF - Why the Future Is Up to Us - pptx version
Hype vs. Reality: The AI Explainer
Ad

Similar to EclipseCon 2005: Everything You Always Wanted to do with EMF (But were Afraid to Ask) (20)

PPT
Eclipse World 2007: Fundamentals of the Eclipse Modeling Framework
PPT
EclipseCon 2008: Fundamentals of the Eclipse Modeling Framework
PPT
EGL Conference 2011 - EGL Open
PPT
NewSeriesSlideShare
PPT
myslide1
PPT
myslide6
PPTX
Poco Es Mucho: WCF, EF, and Class Design
PPT
Eclipse Summit Nov08 Final
PPT
Ef Poco And Unit Testing
PDF
Jetpack, with new features in 2021 GDG Georgetown IO Extended
PDF
.NET Portfolio
PPTX
Entity Framework 4
PPTX
Back-2-Basics: .NET Coding Standards For The Real World (2011)
PPTX
Use Eclipse technologies to build a modern embedded IDE
PPTX
Model-Driven Development in the context of Software Product Lines
PPT
Dynamic and Generic Manipulation of Models: From Introspection to Scripting
PPT
SMI - Introduction to Java
PDF
Wodel: A Domain-Specific Language for Model Mutation
ODP
Development of forms editors based on Ecore metamodels
DOCX
Patterns (contd)Software Development ProcessDesign patte.docx
Eclipse World 2007: Fundamentals of the Eclipse Modeling Framework
EclipseCon 2008: Fundamentals of the Eclipse Modeling Framework
EGL Conference 2011 - EGL Open
NewSeriesSlideShare
myslide1
myslide6
Poco Es Mucho: WCF, EF, and Class Design
Eclipse Summit Nov08 Final
Ef Poco And Unit Testing
Jetpack, with new features in 2021 GDG Georgetown IO Extended
.NET Portfolio
Entity Framework 4
Back-2-Basics: .NET Coding Standards For The Real World (2011)
Use Eclipse technologies to build a modern embedded IDE
Model-Driven Development in the context of Software Product Lines
Dynamic and Generic Manipulation of Models: From Introspection to Scripting
SMI - Introduction to Java
Wodel: A Domain-Specific Language for Model Mutation
Development of forms editors based on Ecore metamodels
Patterns (contd)Software Development ProcessDesign patte.docx

Recently uploaded (20)

PDF
Zenith AI: Advanced Artificial Intelligence
PDF
Hybrid model detection and classification of lung cancer
PDF
A comparative analysis of optical character recognition models for extracting...
PPTX
A Presentation on Touch Screen Technology
PPTX
1. Introduction to Computer Programming.pptx
PPTX
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
ENT215_Completing-a-large-scale-migration-and-modernization-with-AWS.pdf
PDF
1 - Historical Antecedents, Social Consideration.pdf
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PDF
Accuracy of neural networks in brain wave diagnosis of schizophrenia
PPTX
Chapter 5: Probability Theory and Statistics
PDF
project resource management chapter-09.pdf
PDF
DP Operators-handbook-extract for the Mautical Institute
PDF
Mushroom cultivation and it's methods.pdf
PPTX
TLE Review Electricity (Electricity).pptx
PPTX
Tartificialntelligence_presentation.pptx
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
Zenith AI: Advanced Artificial Intelligence
Hybrid model detection and classification of lung cancer
A comparative analysis of optical character recognition models for extracting...
A Presentation on Touch Screen Technology
1. Introduction to Computer Programming.pptx
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Digital-Transformation-Roadmap-for-Companies.pptx
ENT215_Completing-a-large-scale-migration-and-modernization-with-AWS.pdf
1 - Historical Antecedents, Social Consideration.pdf
Building Integrated photovoltaic BIPV_UPV.pdf
NewMind AI Weekly Chronicles - August'25-Week II
Accuracy of neural networks in brain wave diagnosis of schizophrenia
Chapter 5: Probability Theory and Statistics
project resource management chapter-09.pdf
DP Operators-handbook-extract for the Mautical Institute
Mushroom cultivation and it's methods.pdf
TLE Review Electricity (Electricity).pptx
Tartificialntelligence_presentation.pptx
gpt5_lecture_notes_comprehensive_20250812015547.pdf

EclipseCon 2005: Everything You Always Wanted to do with EMF (But were Afraid to Ask)

  • 1. Dave Steinberg and Ed Merks IBM Rational Software Toronto, Canada EMF and XSD Projects Everything you always wanted to do with EMF* *But were afraid to ask
  • 2. Topics Introduction to EMF Simple Customizations to Generated Code Extending Behavior with Adapters Validating Model Data Customizing XML Persistence
  • 3. Introduction to the Eclipse Modeling Framework Low-cost modeling for the Java mainstream Leverages the intrinsic “model” in an application Java interfaces or XML Schema No high-level modeling tool required Mixes modeling with programming to maximize the effectiveness of both Boosts productivity and facilitates integration “ The foundation for model-driven development and data integration in Eclipse”
  • 4. Model Conversion and Code Generation XML Schema Java Model Ecore UML I M P O R T GENERATE Java Edit Java Editor
  • 5. Generated Code For each modeled class… An interface: An implementation: public interface PurchaseOrder extends EObject { EList getItems(); String getComment(); void setComment(String value); ... } public class PurchaseOrderImpl extends EObjectImpl implements PurchaseOrder { protected EList items = null; ... }
  • 6. Reflective Interface for Model Objects All model classes derive from EObject: This reflective EObject API lets us write generic code, like in EMF’s editing, persistence, validation frameworks public interface EObject extends Notifier { EClass eClass(); Resource eResource(); EObject eContainer(); EReference eContainmentFeature(); boolean eIsProxy(); Object eGet(EStructuralFeature feature, boolean resolve); void eSet(EStructuralFeature feature, Object newValue); boolean eIsSet(EStructuralFeature feature); void eUnset(EStructuralFeature feature); ... }
  • 7. Customizing Interfaces In some applications, you may prefer to have your modeled classes present a simpler interface: public interface PurchaseOrder { List getItems(); String getComment(); void setComment(String value); Date getOrderDate(); ... } Doesn’t extend EObject Setter suppressed Ordinary List
  • 8. Customizing Interfaces: Taking Out the “E” Generated interfaces customized via generator options Root Extends Interface Suppress EMF Types (EList, EMap, EObject) Generated classes must still implement reflective EObject API
  • 9. Customizing Interfaces: Suppressing Accessors Individual accessors (get, set, isSet, unset) can be suppressed in generated interfaces Modeled via EAnnotations on features, with source of “http://www.eclipse.org/emf/2002/GenModel” Only affects the interface; features still fully available reflectively
  • 10. Demo: Customizing Generated Interfaces Annotate purchase order interface to suppress a setter Set generator options to suppress EMF base class and types Editor and serialization still work, via reflective API
  • 11. Notifiers and Observers In EMF, every model object is a change notifier: An observer is registered to receive notifications: public interface Notifier { EList eAdapters(); boolean eDeliver(); void eSetDeliver(boolean deliver); void eNotify(Notification notification); } item.eAdapters().add(itemObserver);
  • 12. Notifications Notifications describe the change that occurred: public interface Notification { Object getNotifier(); int getEventType(); int getFeatureID(Class expectedClass); Object getFeature(); Object getOldValue(); Object getNewValue(); boolean wasSet(); boolean isTouch(); boolean isReset(); int getPosition(); boolean getOldBooleanValue(); boolean getNewBooleanValue(); ... }
  • 13. Example: Simple Observer ItemChangeCounter An observer that counts changes to features of an Item Extends AdapterImpl, the framework base class for adapters/observers Handles notifications in notifyChanged() Tests isTouch() to ignore non-changes Switches on feature ID for efficiency Singleton instance is added to model objects
  • 14. Adapters In addition to receiving notifications, observers in EMF are also adapters: Adapters can be used to extend the behavior of the objects they are attached to. public interface Adapter { void notifyChanged(Notification notification); Notifier getTarget(); boolean isAdapterForType(Object type); ... }
  • 15. Adapter Factories Adapter factories are used to obtain an adapter providing a particular type of behavior extension: By convention, the type is often the interface that the adapter implements: public interface AdapterFactory { boolean isFactoryForType(Object type); Object adapt(Object object, Object type); Adapter adapt(Notifier target, Object type); ... } POAdapter adapter = (POAdapter)poAdapterFactory.adapt(order, POAdapter.class);
  • 16. Example: Adapter and Adapter Factory ChangeCounter Simple interface for counting and comparing changes ChangeCounterAdapter Adapter-based implementation that isAdapterFor(ChangeCounter.class) ChangeCounterAdapterFactory Singleton adapter factory that creates a ChangeCounterAdapter as an adapter of this type for any model object
  • 17. Content Adapters EContentAdapter Framework base class for adapters that respond to changes from a complete containment tree of model objects Automatically adds and removes itself as objects are added to and removed from the tree Subclasses’ override for notifyChanged() must call super.notifyChanged()
  • 18. Example: Content Adapter ContentChangeCounter Extends EContentAdapter to count the number of changes to a purchase order and its contents
  • 19. Validation Framework Model objects validated by external EValidator: Detailed results accumulated as Diagnostics Essentially a non-Eclipse equivalent to IStatus Records severity, source plug-in ID, status code, message, other arbitrary data, and nested children public interface EValidator { boolean validate(EObject eObject, DiagnosticChain diagnostics, Map context); boolean validate(EClass eClass, EObject eObject, DiagnosticChain diagnostics, Map context); boolean validate(EDataType eDataType, Object value, DiagnosticChain diagnostics, Map context); ... }
  • 20. Framework EValidator Implementations Diagnostician walks a containment tree of model objects, dispatching to package-specific validators Diagnostician.validate() is the usual entry point Obtains validators from its EValidator.Registry EObjectValidator validates basic EObject constraints Multiplicities are respected Proxies resolve All referenced objects are contained in a resource Data type values are valid
  • 21. Generated EValidator Implementations Dispatch validation to type-specific methods For model objects, one method is called for each… Invariant: defined directly on the class, as an operation with <<inv>> stereotype Constraint: externally defined for the class via the validator method In either case, method body must be hand-coded Constraints generated, with implementation, for simple type facets defined in XML Schema Basic constraints inherited from EObjectValidator
  • 22. Demo: Constraints and Validation Add constraints and an invariant to the purchase order model Write implementations Use the generated editor to create and validate an instance of the model
  • 23. Model Persistence Resource is EMF’s unit for persistence Resource.getContents() returns the list of objects to be persisted as part of the resource Resource.save() converts the model to its persistent form and writes it out The complete contents of the resource includes containment trees – objects are always persisted along with their container Included Resource implementations: Highly customizable XMLResource XMIResource for XML Metadata Interchange 2.0
  • 24. Customizing XML Persistence Extended Metadata Annotations added to Ecore elements to customize XML persistence Modeled as EAnnotations with source of “http:///org/eclipse/emf/ecore/util/ExtendedMetaData” Programmatically accessed via ExtendedMetaData interface An XMLResource option specifies that extended metadata should be used during save or load: Map options = new HashMap(); options.put(XMLResource.OPTION_EXTENDED_META_DATA, ExtendedMetaData.INSTANCE); resource.save(options);
  • 25. Demo: Customizing XML Persistence Add extended metadata annotations to purchase order model Generate code PPOPackageImpl adds the annotations to the model that it builds at runtime PPOResourceFactoryImpl creates and initializes resource to use extended metadata Plug-in manifest file globally registers the factory against “.ppo” file extension
  • 26. Summary EMF is low-cost modeling for the Java mainstream, leveraging the intrinsic model in an application Generated interfaces can expose simpler API for your model, while uniform EObject API enables integration “under the covers” Adapters provide dynamic behavior extension Validation framework tests objects against invariants and external constraints Extended metadata can customize XML persistence
  • 27. Additional Information EMF documentation in Eclipse Help Overviews, tutorials, API reference EMF project Web site http://www.eclipse.org/emf/ Downloads, documentation, FAQ, newsgroup, Bugzilla, EMF Corner Eclipse Modeling Framework , by Frank Budinsky et al. ISBN: 0131425420

Editor's Notes

  • #4: Low-cost in terms of money (free!), and time investment. Just about every program we write manipulates some data model. Traditionally, we’ve used UML to express models, but Java interfaces or XML schemas can also embody the form of and relationships between data. EMF can extract such intrinsic “models” and generate some of the implementation code for them. EMF models are simple – similar to what can be expressed in UML using class diagrams. Specifying behavior is left to Java. Not a rejection of the UML approach, but rather a pragmatic attempt for the present. The result: simple models; clean, efficient implementations; and a relationship between the two that’s quite easily understood. EMF tools designed to facilitate mixing generated and hand-written code: you can update both the model and the hand-written code, and regenerate without losing any changes. Productivity boosted by generating efficient, correct, customizable code that we’d otherwise have to write over and over again. Data integration provided by a generic, reflective API for accessing data in an instance model and a framework for persistence. [The Eclipse platform provides a foundation for tool integration (platform runtime, workspace resources, workbench UI). EMF is the foundation for fine-grained data integration.]