Làm cách nào để tạo tài liệu XML mẫu từ DTD hoặc XSD của họ?


186

Chúng tôi đang phát triển một ứng dụng liên quan đến một lượng lớn các phép biến đổi XML. Chúng tôi không có bất kỳ dữ liệu kiểm tra đầu vào thích hợp nào, chỉ có các tệp DTD hoặc XSD. Chúng tôi muốn tự tạo dữ liệu thử nghiệm từ các tệp này. Có một cách dễ dàng / miễn phí để làm điều đó?

Biên tập

Rõ ràng không có công cụ miễn phí nào cho việc này và tôi đồng ý rằng OxygenXML là một trong những công cụ tốt nhất cho việc này.


8
Tôi không thấy câu trả lời cho câu hỏi này không phù hợp với định dạng Hỏi & Đáp hoặc gạ gẫmdebate, arguments, polling, or extended discussion
mjn

Câu trả lời:


29

Tôi nghĩ Oxygen ( http://www.oxygenxml.com/ ) cũng làm điều đó, nhưng đó là một sản phẩm thương mại khác. Mặc dù vậy, đây là một ứng dụng hay, tôi rất muốn giới thiệu nó cho bất kỳ ai làm nhiều công việc XML. Nó cũng có một plugin Eclipse đẹp.

Tôi tin rằng có bản dùng thử 30 ngày miễn phí, đầy đủ tính năng.


Tôi có một loạt các XSD, lần lượt kế thừa các lược đồ từ các XSD khác nhau và tôi cần tạo một tệp XML cho mục đích thử nghiệm từ XSD này, tôi đang sử dụng oxyXML để làm điều này nhưng khi tôi cố gắng làm điều đó, nó không hoạt động với tôi và Nó nói xin vui lòng xác định nút gốc nhưng nó không cho phép tôi làm như vậy. Vì vậy, nếu bất cứ ai đã làm việc với oxyXML, hãy gợi ý về những gì có thể xảy ra cho vấn đề này?
Rachel

Cảm ơn leveland. Điều này đã trả lời câu hỏi của tôi là tốt! Nếu bạn muốn trả lời câu hỏi của tôi: stackoverflow.com/questions/7041388/ , tôi sẽ rất vui khi đánh dấu câu trả lời của bạn là câu trả lời.
Eric H

179

Trong Visual Studio 2008 SP1 và sau đó, XML Schema Explorer có thể tạo một tài liệu XML với một số dữ liệu mẫu cơ bản:

  1. Mở tài liệu XSD của bạn
  2. Chuyển sang Trình khám phá lược đồ XML
  3. Nhấp chuột phải vào nút gốc và chọn "Tạo mẫu Xml"

Ảnh chụp màn hình của Trình khám phá lược đồ XML


15
vâng, đây là cách dễ nhất Mở XSD, chuyển sang XML Schema Explorer, chọn nút gốc, nhấp chuột phải và chọn "Tạo Xml mẫu".
balint

+1 Cảm ơn bạn @Sam Warwick và @balint. Điều này thực sự hữu ích!
jessegavin

3
Tôi đã sử dụng cái này với VS2008, nhưng tôi không thể tìm thấy cái này trong VS2010. Bất cứ ai có thể xác nhận rằng điều này vẫn còn tồn tại?
Simon

Giống như Simon: Tôi cũng không thể tìm thấy điều này trong VS2010. Theo MSDN, nó vẫn ở đó, nhưng nó sẽ không xuất hiện ở bất cứ đâu trong UI ... :-(
Martijn

6
@Simon: bạn chỉ nhận được "Tạo XML mẫu" khi bạn nhấp chuột phải vào một trong các thành phần trong trình thám hiểm lược đồ. Các yếu tố được mô tả bằng đồ họa thông qua dấu ngoặc góc trái / phải màu xanh lá cây: "<>". Bạn có thể nhấp chuột phải vào một loại và thông báo tạo sẽ chỉ tạo nó cho các phần tử (có ý nghĩa).
Miguel Sevilla

126

Trong các phiên bản gần đây của IDE Eclipse mã nguồn mở và miễn phí, bạn có thể tạo các tài liệu XML từ các tệp DTD và XSD. Nhấp chuột phải vào tệp * .dtd hoặc * .xsd đã cho và chọn "Tạo -> Tệp XML ...". Bạn có thể chọn phần tử gốc nào sẽ tạo và liệu các thuộc tính và phần tử tùy chọn sẽ được tạo.

Tất nhiên, bạn cũng có thể sử dụng Eclipse để tạo và chỉnh sửa các tệp lược đồ DTD và XSD của mình. Và bạn không cần phải cài đặt bất kỳ plugin nào. Nó được bao gồm trong phân phối tiêu chuẩn.


Cảm ơn! Eclipse là miễn phí và đây là giải pháp hoàn hảo.
Akku

Các bạn có tình cờ biết tính năng Eclipse nào cung cấp chức năng này không? Menu con "Tạo" của tôi có "Lớp JAXB" là mục duy nhất.
otto.poellath

9
Bạn cần cài đặt Dự án Công cụ Web (xem Trợ giúp-> Cài đặt Phần mềm mới) để có các tùy chọn này.
thức

3
Eclipse có vẻ như là một lựa chọn tốt, nhưng tôi không thể khiến thế hệ theo dõi các XSD đã nhập. Ví dụ: nếu tôi có XSD mô tả 3 phần tử và một trong số đó là loại phức được xác định trong XSD được tham chiếu / nhập, nó sẽ không tạo ra phần tử đó. Có ý kiến ​​gì không?
David Hergert

@DavidHergert Một cách giải quyết đơn giản sẽ tạo ra một loại sơ khai.
Adam Matan

32

Đối với người dùng Intellij Idea:

Hãy xem Công cụ -> Hành động XML

nhập mô tả hình ảnh ở đây

Có vẻ như hoạt động rất tốt (theo như tôi đã thử nghiệm).

Biên tập:

Như được đề cập bởi @naXa, giờ đây bạn cũng có thể nhấp chuột phải vào tệp XSD và nhấp vào "Tạo tài liệu XML từ Lược đồ XSD ..."


Có cách nào để chỉ định # phần tử để tạo (cho chuỗi) không?
Nikita

Tôi đã thử nghiệm mọi giải pháp của chủ đề này và điều này hoạt động tốt nhất
FLX

1
Không hoạt động với tôi trong RubyMine mới nhất (v. 7.0, dựa trên ý tưởng Intellij) với XSD với nhiều lần nhập. Tôi không có gì ngoài thông báo lỗi.
Envek

3
"Lỗi biên dịch lược đồ"?
Hạt đậu đỏ

1
Trong các phiên bản mới hơn, nhấp chuột phải vào XSD và chọn "Tạo tài liệu XML từ lược đồ XSD ..."
naXa

12

Bộ xử lý trại có sẵn trên Sourceforge.net sẽ thực hiện việc tạo trường hợp thử nghiệm xml cho bất kỳ XSD nào. Có một hướng dẫn có sẵn để chỉ cho bạn cách tạo các ví dụ thử nghiệm của riêng bạn - bao gồm sử dụng các gợi ý nội dung để đảm bảo các ví dụ thực tế, không chỉ các ví dụ rác ngẫu nhiên.

Hướng dẫn có sẵn tại đây: http://www.oocation-open.org/committees/doad.php/29661/XSD%20and%20jCAM%20tutorial.pdf

Và nhiều thông tin hơn về công cụ - đang sử dụng tiêu chuẩn Cơ chế lắp ráp nội dung (CAM) của OASIS để cấu trúc lại XSD của bạn thành một cấu trúc thân thiện hơn với XSLT - có thể được tìm thấy từ trang web tài nguyên - http://www.jcam.org.uk

Thưởng thức, DW


3
Liên kết trực tiếp để tải xuống Sourceforge.net là: sourceforge.net/projects/camprocessor

@Pyderman - đó là cài đặt của bạn - tìm cách thay đổi chúng.
Ghoti

10

Bạn có thể sử dụng Trình tạo sơ đồ XML, một phần của Trình xác thực đa lược đồ Sun / Oracle .

Đó là trạng thái README.txt:

Sun XML Generator là một công cụ Java để tạo các cá thể XML khác nhau từ một số loại lược đồ. Nó hỗ trợ DTD, không gian tin cậy, lõi tin cậy, TREX và một tập hợp con của Lược đồ XML của W3C Phần 1. [...]

Đây là một công cụ dòng lệnh có thể tạo cả hai trường hợp hợp lệ và không hợp lệ từ các lược đồ. Nó có thể được sử dụng để tạo các trường hợp thử nghiệm cho các ứng dụng XML cần tuân thủ một lược đồ cụ thể.

Tải xuống và giải nén xmlgen.ziptừ trang tải xuống msv và chạy lệnh sau để nhận hướng dẫn sử dụng chi tiết:

java -jar xmlgen.jar -help

Công cụ này dường như được phát hành theo giấy phép BSD; mã nguồn có thể truy cập từ đây


Rất đẹp! Một chút hạn chế mặc dù. Tôi đã thử nó trên một XSD nhập khẩu XSD khác và nó đã thất bại. Nhưng trên một DTD nó hoạt động rất tốt. Cảm ơn!
lindelof

1
Liên kết hiện tại: trang chủ , tải về . xmlgen.zipchỉ trong nigthlythư mục. Tôi xác nhận không thể tạo mẫu từ xsd của tôi.
Jarekczek

Trong trường hợp của tôi, cần sử dụng --exampletệp để chứa mã thông báo có thể được sử dụng để tạo tệp mẫu mới. Phải mất một mẫu để làm một mẫu! Không dễ ...
Hạt đậu đỏ

liên kết java.net về cơ bản là chết.
RedGrittyBrick

10

XMLSpy làm điều đó cho bạn, mặc dù điều đó không miễn phí ...

Tôi tin rằng Liquid Xml Studio làm điều đó cho bạn và miễn phí, nhưng cá nhân tôi chưa sử dụng nó để tạo dữ liệu thử nghiệm.


Nó tạo ra thứ gì đó, nhưng bạn không có nhiều quyền kiểm soát đối với nó: bạn có thể chọn phần tử toplevel và một số tùy chọn chung, nhưng bạn không thể sử dụng XMLSpy để tạo bộ thử nghiệm với nhiều biến thể, v.v.
Hans-Peter Störr

XMLSpy trông có vẻ tốt nhưng đã tạo ra xml mà sau đó không thể xác thực đối với xsd đã được sử dụng để tạo nó. Thất bại. Nó cũng bị chặn trên một postiveintegercánh đồng - *ERROR*thay vào đó
Tim Abell

7

Có vẻ như không ai có thể trả lời câu hỏi cho đến nay :)

Tôi sử dụng MOXy của EclipseLink để tạo động các lớp liên kết và sau đó đệ quy đi qua các kiểu ràng buộc. Nó hơi nặng, nhưng nó cho phép tiêm giá trị XPath khi cây đối tượng được khởi tạo:

InputStream in = new FileInputStream(PATH_TO_XSD);
DynamicJAXBContext jaxbContext = 
            DynamicJAXBContextFactory.createContextFromXSD(in, null, Thread.currentThread().getContextClassLoader(), null);
DynamicType rootType = jaxbContext.getDynamicType(YOUR_ROOT_TYPE);
DynamicEntity root = rootType.newDynamicEntity();
traverseProps(jaxbContext, root, rootType, 0);

TraverseProps là phương pháp đệ quy khá đơn giản:

private void traverseProps(DynamicJAXBContext c, DynamicEntity e, DynamicType t, int level) throws DynamicException, InstantiationException, IllegalAccessException{
        if (t!=null) {
            logger.info(indent(level) + "type [" + t.getName() + "] of class [" + t.getClassName() + "] has " + t.getNumberOfProperties() + " props");
            for (String pName:t.getPropertiesNames()){
                Class<?> clazz = t.getPropertyType(pName);
                logger.info(indent(level) + "prop [" + pName + "] in type: " + clazz);
                //logger.info("prop [" + pName + "] in entity: " + e.get(pName));

                if (clazz==null){
                    // need to create an instance of object
                    String updatedClassName = pName.substring(0, 1).toUpperCase() + pName.substring(1);
                    logger.info(indent(level) + "Creating new type instance for " + pName + " using following class name: " + updatedClassName );
                    DynamicType child = c.getDynamicType("generated." + updatedClassName);
                    DynamicEntity childEntity = child.newDynamicEntity();
                    e.set(pName, childEntity);
                    traverseProps(c, childEntity, child, level+1);
                } else {
                    // just set empty value
                    e.set(pName, clazz.newInstance());
                }
            }
        } else {
            logger.warn("type is null");
        }
    }

Chuyển đổi mọi thứ thành XML khá dễ dàng:

Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);

7

Bạn cũng có thể sử dụng XMLPad (miễn phí sử dụng) được tìm thấy tại đây http://www.wmhelp.com để tạo các mẫu xml của bạn. Từ menu: XSD -> tạo tệp XML mẫu.


Tôi nhận được một ngăn xếp tràn hoặc "WMHelp XmlPad đã ngừng hoạt động" khi tôi chọn "Tạo dữ liệu mẫu"
The Red Pea

5

Microsoft đã xuất bản một công cụ "trình tạo tài liệu" làm mẫu. Đây là một bài viết mô tả kiến ​​trúc và hoạt động của ứng dụng mẫu một cách chi tiết.

Nếu bạn chỉ muốn chạy công cụ tạo mẫu, bấm vào đây và cài đặt MSI.

Nó miễn phí. Nguồn có sẵn. Yêu cầu .NET Framework để chạy. Chỉ hoạt động với XSD. (không thư giãn NG hoặc DTD).


Liên kết ở trên là một bài viết về MSDN có tên 'Tạo tài liệu XML từ các lược đồ XML'
Sam Warwick

Trình cài đặt thả một loạt mã C # vào máy của bạn. Chỉ cần kết xuất chúng vào LinqPad và bạn có trình tạo cá thể XML miễn phí. Ta ơi!
Sean Kearon

9 năm sau, điều này vẫn hoạt động rất tốt cho XSD.
Mikanikal

5

XML-XIG: Trình tạo sơ đồ XML

http://xml-xig.sourceforge.net/

Nguồn mở này sẽ hữu ích.


1
Không thân thiện với người dùng. Ném rất nhiều ngoại lệ, không thể làm cho nó hoạt động sau khi không giải thích được NullPointerException.
Jarekczek

4

Microsoft Office có ' InfoPath ', lấy XSD làm bản nhập và cho phép bạn nhanh chóng và dễ dàng xác định trình soạn thảo dựa trên biểu mẫu để tạo tệp XML. Nó có hai chế độ - một trong đó bạn xác định biểu mẫu và một chế độ khác nơi bạn tạo tệp XML bằng cách điền vào biểu mẫu. Tôi tin rằng nó lần đầu tiên đi kèm với Office 2003 và hầu hết mọi người không bao giờ cài đặt nó. Nó làm tôi sốc khi tôi thích nó.


1

XMLBlueprint 7.5 có thể làm như sau: - tạo xml mẫu từ dtd - tạo xml mẫu từ lược đồ thư giãn - tạo xml mẫu từ lược đồ xml


1

Phiên bản mã nguồn mở của SoapUI có thể tạo các yêu cầu SOAP từ WSDL (chứa định nghĩa loại XSD), do đó, có vẻ như đó là một triển khai nguồn mở của chức năng này. Thật không may, tôi đã không tìm ra thư viện nào được sử dụng để này.


1

Liquid XML Studio có một XML Mẫu Generator thuật sĩ đó sẽ xây dựng file XML mẫu từ một XML Schema. Dữ liệu kết quả dường như tuân thủ lược đồ (nó chỉ không thể tạo dữ liệu cho các mẫu biểu thức chính quy).

Tạo một mẫu XML từ XSD


0

Các OpenXSD thư viện nói rằng họ có hỗ trợ cho việc tạo ra các trường hợp XML dựa trên XSD. Kiểm tra xem.


bạn có thể xin vui lòng gửi một ví dụ sử dụng?
naXa



Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.