EMF tuần tự hóa mô hình dữ liệu bằng cách sử dụng (cách mặc định, phổ biến nhất) XMIResourceImpl, trong đó sử dụng nghiêm ngặt định dạng XMI và không phải cấu trúc XML tùy chỉnh.
Xem http://eclipsedriven.blogspot.com/ để biết các bài viết về EMF và các trường hợp sử dụng của EMF.
Tôi đồng ý với những người trả lời khác rằng EMF có lẽ không phải là những gì bạn muốn ở đây.
Nếu tôi thực sự muốn sử dụng EMF với cấu trúc XML tùy chỉnh (nghĩa là không phải XMI), tôi có thể sử dụng JAXB để sắp xếp/unmarshal các đối tượng EMF (EObjects).
Vì vậy, EMF không giống với JAXB và chúng có mục đích và mục tiêu khác nhau. Trong thực tế, bạn có thể kết hợp EMF và JAXB theo một cách nào đó. Tôi chưa bao giờ thử nó, nhưng có vẻ như có trường hợp sử dụng hợp lệ. (như tôi đã nói ở trên, để marshaling/unmarshaling các đối tượng EMF đến/từ XML)
Để hiểu EMF, bạn cần phải chuyển đổi mô hình của mình. Để bắt đầu, hãy xóa phần "XML", hãy để nó thoát khỏi tâm trí bạn. Sau đó, tôi khuyên bạn nên làm như sau:
- Tạo một dự án EMF trống.
- Tạo tệp Ecore đơn giản (.ecore) hoặc tải tệp từ Internet. Hoặc nhập từ bất kỳ tệp XML Schema/UML nào vào một mô hình Ecore.
- Nhấp chuột phải vào EClass sau đó "Tạo Instance động", thao tác này sẽ tạo tệp .xmi.
- Mở tệp .xmi, sử dụng Eclipse, thao tác này sẽ mở Trình chỉnh sửa EMF cho mô hình đó. Chỉnh sửa như bạn thấy phù hợp.
- Kiểm tra nội dung của tệp .xmi (đã chỉnh sửa). Bạn sẽ thấy rằng định dạng phù hợp chính xác với mô hình Ecore. Bạn sẽ không thể thay đổi/tùy chỉnh ánh xạ từ mô hình < -> tệp XMI vì, như tên của nó, XMIResourceImpl chỉ đọc/lưu các tệp XMI (điều này xảy ra trên đầu XML) nhưng nó không đọc/lưu định dạng XML tùy ý.
EMF hỗ trợ đọc/ghi metamodels XML (tức làCác tệp XSD) cho mục đích chuyển đổi chúng thành một siêu mô hình Ecore, nhưng không phải tệp XML phù hợp với lược đồ như vậy (thậm chí không đến Ecore), trừ khi các tệp này ở định dạng XMI.
Đối với sự bền bỉ mô hình EMF vào một cơ sở dữ liệu quan hệ, xem: http://eclipsedriven.blogspot.com/2010/12/persisting-emf-objects-to-rdbms-with.html
Tôi đang sử dụng Teneo. (Và tùy chọn, CDO)
Về "XML", nếu bạn dính vào XMI và bằng lòng với nó, EMF sẽ làm cho cuộc sống của bạn nhiều dễ dàng hơn, vì bạn không cần phải làm lập bản đồ bất kỳ (không giống như JAXB). Nhược điểm là các đối tượng của chúng ta phải là các đối tượng EMF.
Đối tượng EMF là các đối tượng được tạo bởi EMF và triển khai EObject và mở rộng trực tiếp hoặc gián tiếp EObjectImpl. Bạn thường không muốn mã các đối tượng EMF bằng tay, nó sẽ là một việc vặt. Mặt khác, các đối tượng JAXB "" thường là các đối tượng POJO miền thuần túy và không có yêu cầu bổ sung nào từ JAXB. Lưu ý rằng không giống như JAXB, Các đối tượng EMF không phải là POJO. Điều này giải thích một mục tiêu khác nhau giữa EMF và JAXB. Sự chồng chéo của họ ít hơn bạn tưởng tượng.
Đọc từ XMI (không XML) là rất dễ dàng:
XMIResource resource = new XMIResourceImpl(URI.create("file:/path/to/mymodel.xmi"));
resource.load(null);
System.out.println(resource.eContents().get(0));
Tôi không nghĩ EMF được thiết kế cho mục đích đó. Đó là một mô hình, không phải là một khuôn khổ ràng buộc – Bozho
Nó được sử dụng cho XML Binding, tôi chắc chắn về điều đó. – zengr
@Bozho - EMF là (hoặc có thể được sử dụng như) hoặc là một khuôn khổ mô hình hóa hoặc một khuôn khổ ràng buộc. Nó phụ thuộc vào nơi bạn bắt đầu từ ... và quan điểm của bạn. (Đây là một khía cạnh của mô hình meta thường bị hiểu lầm. Các mô hình có thể được xem dưới dạng dữ liệu và ngược lại.) –