programing

DTD 또는 XSD에서 샘플 XML 문서를 생성하는 방법은 무엇입니까?

mailnote 2023. 9. 13. 22:53
반응형

DTD 또는 XSD에서 샘플 XML 문서를 생성하는 방법은 무엇입니까?

우리는 상당한 양의 XML 변환을 포함하는 응용 프로그램을 개발하고 있습니다.우리는 제대로 된 입력 테스트 데이터 자체가 없고, DTD나 XSD 파일만 있습니다.우리는 이 파일들로부터 우리의 테스트 데이터를 직접 생성하고 싶습니다.쉽게 할 수 있는 방법이 있습니까?

편집

이를 위한 무료 도구는 분명히 존재하지 않습니다. 그리고 산소X에 동의합니다.ML은 이를 위한 가장 좋은 도구 중 하나입니다.

Visual Studio 2008 SP1 이상에서 XML 스키마 탐색기는 다음과 같은 기본 샘플 데이터를 사용하여 XML 문서를 작성할 수 있습니다.

  1. XSD 문서 열기
  2. XML 스키마 탐색기로 전환
  3. 루트 노드에서 마우스 오른쪽 단추를 누른 후 "Xml 샘플 생성"을 선택합니다.

Screenshot of the XML Schema Explorer

무료 및 오픈 소스 Eclipse IDE의 최신 버전에서는 DTD 및 XSD 파일에서 XML 문서를 생성할 수 있습니다.지정된 *.dtd 또는 *.xsd 파일을 마우스 오른쪽 단추로 클릭하고 "Generate -> XML File..."을 선택합니다. 생성할 루트 요소와 선택적 속성 및 요소를 생성할지 여부를 선택할 수 있습니다.

물론 Eclipse를 사용하여 DTD 및 XSD 스키마 파일을 만들고 편집할 수도 있습니다.그리고 플러그인을 설치할 필요가 없습니다.표준 분포에 포함되어 있습니다.

Intellij Idea 사용자의 경우:

도구 -> XML 작업 보기

enter image description here

매우 잘 작동하는 것 같습니다. (시험해 본 바로는)

편집:

@naXa에서 언급한 대로 이제 XSD 파일을 마우스 오른쪽 버튼으로 클릭하고 "XSD 스키마에서 XML Document 생성.."을 클릭할 수도 있습니다.."

Oxygen(http://www.oxygenxml.com/) 도 그렇게 한다고 생각하지만, 그것은 또 다른 상업적인 제품입니다.좋은 일이긴 하지만...XML 작업을 많이 하시는 분들께는 꼭 추천해 드리고 싶습니다.이클립스 플러그인도 잘 들어있습니다.

30일간 무료 체험이 있다고 생각합니다.

Sourceforge에서 사용할 수 있는 캠프로세서.net은 모든 XSD에 대해 xml 테스트 케이스 생성을 수행할 것입니다.임의 정크 사례가 아닌 실제 사례를 확인하기 위해 내용 힌트를 사용하는 등 테스트 사례를 생성하는 방법을 보여주는 자습서가 있습니다.

자습서는 여기 http://www.oasis-open.org/committees/download.php/29661/XSD%20and%20jCAM%20tutorial.pdf 에서 확인할 수 있습니다.

OASIS Content Assembly Mechanism(CAM) 표준을 사용하여 XSD를 보다 XSLT 친화적인 구조로 재구성하는 도구에 대한 자세한 정보는 리소스 웹 사이트 http://www.jcam.org.uk 에서 확인할 수 있습니다.

즐겨요, DW

Sun/Oracle Multi-Schema Validator의 일부인 XML Instance Generator를 사용할 수 있습니다.

README.txt 상태입니다.

Sun XML Generator는 여러 종류의 스키마에서 다양한 XML 인스턴스를 생성하는 Java 도구입니다.DTD, RELAX 네임스페이스, RELAX 코어, TREX 및 W3C XML 스키마 파트 1의 서브셋을 지원합니다. [...]

스키마에서 유효한 인스턴스와 유효하지 않은 인스턴스를 모두 생성할 수 있는 명령줄 도구입니다.특정 스키마를 준수해야 하는 XML 응용프로그램의 테스트 케이스를 생성하는 데 사용할 수 있습니다.

후 풀기 xmlgen.zipmsv 다운로드 페이지에서 다음 명령을 실행하여 자세한 사용 지침을 가져옵니다.

java -jar xmlgen.jar -help

이 도구는 BSD 라이센스로 출시된 것으로 보이며 소스 코드는 여기서 액세스할 수 있습니다.

XMLSpy는 당신을 위해 그렇게 해주지만, 그건 공짜가 아닙니다.

Liquid Xml Studio가 당신을 위해 해주고 무료라고 생각하지만, 개인적으로 테스트 데이터를 만드는 데 사용한 적은 없습니다.

지금까지 아무도 질문에 답하지 못한 것 같습니다 :)

IclipseLink의 MOXy를 사용하여 바인딩 클래스를 동적으로 생성한 다음 바인딩 유형을 재귀적으로 거칩니다.다소 무겁지만 개체 트리가 인스턴스화되면 XPath 값을 주입할 수 있습니다.

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는 매우 단순한 재귀적 방법입니다.

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");
        }
    }

모든 것을 XML로 변환하는 것은 꽤 쉽습니다.

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

또한 http://www.wmhelp.com 에서 볼 수 있는 XMLPad(자유롭게 사용 가능)를 사용하여 xml 샘플을 생성할 수 있습니다.XSD -> 메뉴에서 샘플 XML 파일을 생성합니다.

마이크로소프트는 "문서 생성기" 도구를 샘플로 공개했습니다.샘플 앱의 구조와 동작에 대해 자세히 설명한 기사입니다.

샘플 생성 도구만 실행하려면 여기를 클릭하고 MSI를 설치합니다.

무료예요.소스를 사용할 수 있습니다.필요합니다.NET Framework를 실행합니다.XSD에서만 작동합니다(Relax NG 또는 DTD는 아님).

XML-XIG: XML 인스턴스 생성기

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

이 오픈 소스가 도움이 될 것입니다.

Microsoft Office에는 XSD를 가져오기로 하는 'InfoPath'가 있으며 XML 파일을 만들기 위한 폼 기반 편집기를 빠르고 쉽게 정의할 수 있습니다.양식을 정의하는 모드와 양식을 작성하여 XML 파일을 작성하는 모드의 두 가지 모드가 있습니다.오피스 2003과 함께 처음 출시된 것으로 알고 있으며, 대부분의 사람들은 설치를 하지 않습니다.제가 그것을 얼마나 좋아하는지에 대해 충격을 받습니다.

XML Blueprint 7.5는 다음 작업을 수행할 수 있습니다. - dtd에서 샘플 xml 생성 - 완화 스키마에서 샘플 xml 생성 - xml 스키마에서 샘플 xml 생성

오픈 소스 버전의 비누UI는 WSDL(XSD 유형 정의 포함)에서 SOAP 요청을 생성할 수 있으므로 이 기능의 오픈 소스 구현이 있는 것처럼 보입니다.안타깝게도 어느 도서관이 이런 일에 익숙한지 알 수가 없습니다.

Liquid XML Studio에는 XML 스키마에서 샘플 XML 파일을 작성하는 XML Sample Generator 마법사가 있습니다.결과 데이터가 스키마를 준수하는 것처럼 보입니다(정규 패턴에 대한 데이터를 생성할 수 없습니다).

Generate an XML Sample from an XSD

OpenXSD 라이브러리에는 XSD를 기반으로 XML 인스턴스를 생성할 수 있는 지원이 있다고 나와 있습니다.저것 좀 봐봐.

완성도를 위해 비슷한 (그러나 자바에 특화된) 질문에 언급된 http://code.google.com/p/jlibs/wiki/XSInstance, 을 추가하겠습니다.XSD에서 샘플 XML을 생성할 자바 "API"가 있습니까?

XML Blueprint에서도 이 작업을 수행합니다. 여기에 나와 있는 지침

http://www.xmlblueprint.com/help/html/topic_170.htm

무료는 아니지만 10일 동안 무료 체험이 있습니다. 빠르고 효율적인 것 같습니다. 아쉽게도 Windows만 해당합니다.

http://xsd2xml.com/, 온라인 XSD to XML 생성기도 있습니다.

언급URL : https://stackoverflow.com/questions/17106/how-to-generate-sample-xml-documents-from-their-dtd-or-xsd

반응형