Tôi có một số tệp DTD lớn. Tôi đã sử dụng trang để chuyển đổi chúng thành các tệp XSD, vì vậy tôi có thể dễ dàng sử dụng nó từ JAXB và các tiện ích khác. Tuy nhiên, tệp XSD được tạo ra có tất cả các phần tử được khai báo ở cấp cao nhất. Nó có nghĩa là bất kỳ phần tử nào cũng có thể là phần tử gốc của một XML đầu vào. Tôi muốn chỉ định một phần tử cụ thể.Chuyển đổi DTD thành XSD với phần tử gốc (bắt đầu) đã xác định
Việc có nhiều yếu tố gốc này gây ra một số vấn đề, ví dụ: xjc
tạo ra @XmlRootElement
cho tất cả các lớp, vì vậy tôi cần thêm các kiểm tra bổ sung.
Theo tôi được biết, tôi cần phải viết lại XSD tạo, di chuyển <xs:element>
s để <xs:complexType>
s, thay đổi element ref
s vào element type
s và như vậy, nhưng điều này sẽ là quá nhiều việc khỉ, không có cách nào để xác minh nếu tất cả thực hiện đúng.
Có cách nào hiệu quả hơn để thực hiện việc này không?
+1 cho một câu hỏi hợp lý, nhưng chúng ta cũng cần nói rõ rằng DTD để chuyển đổi XSD luôn chỉ là gần đúng. –
@JirkaHanika Khi tôi hiểu XSD được tạo ra xấp xỉ một DTD rất tốt. Ngoại trừ DOCTYPE định nghĩa (không có bất ngờ mặc dù) và một số công cụ không gian tên. Ngoài ra một số cấu trúc DTD lạ không thể chuyển đổi thành XSD một cách gọn gàng. Vấn đề duy nhất tôi đang phải đối mặt vào lúc này, rằng DTD không định nghĩa khái niệm của phần tử gốc. (RelaxNG xác định nó với '', nhưng nó được hỗ trợ kém, 'xjc' không thành công với nó). –
kan
Có nhưng không gian tên là một biggie.Ngoài ra rất nhiều cấu trúc được đặt tên tương tự, có nghĩa là những thứ khá khác nhau. +1 cho câu trả lời đầu tiên bởi vì nó không giả vờ bất kỳ ngữ nghĩa XSD nào. –