2016-02-26 64 views
1

我想为以下xml生成适当的XSD。我尝试了在线转换,但每个网站都提供了不同的输出。你能帮我用正确的XSD吗?需要为以下xml生成XSD模式?

<empsts:empTest xmlns:empsts="http://www.empsts.com/schema/empsts" 
xmlns:cm="http://www.empsts.com/schema/common" 
xmlns:deccm="http://www.empsts.com/schema/deccm" 
xmlns:mis="http://www.empsts.com/schema/miscellaneous" 
xmlns:emp="http://www.empsts.com/schema/emp" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.empsts.com/schema/empsts ../idec/empsts.xsd" 
empsts:docType="DEC" empsts:id="01020150609000133" empsts:msgType="EMPSTS"> 
<empsts:record> 
    <emp:payment xsi:type="empsts:empStatusType"> 
     <empsts:reference> 
      <empsts:acctId>ubce</empsts:acctId> 
      <empsts:docRefNo>2015021</empsts:docRefNo> 
      <empsts:regType cm:type="1">10</empsts:regType> 
      <empsts:empSSN>1296238</empsts:empSSN> 
     </empsts:reference> 
     <empsts:statusInfo> 
      <empsts:statusDate>2023-06-31</empsts:statusDate> 
      <empsts:statusCode>1</empsts:statusCode> 
      <empsts:originalMsgId>EMP2015021</empsts:originalMsgId> 
     </empsts:statusInfo> 
     <empsts:statusErrorDetails> 
      <empsts:statusErrorCodeDetails>8</empsts:statusErrorCodeDetails> 
      <empsts:remarks>Follow</empsts:remarks> 
     </empsts:statusErrorDetails> 
    </emp:payment> 
</empsts:record> 
<empsts:record> 
    <emp:payment xsi:type="empsts:empStatusType"> 
     <empsts:reference> 
      <empsts:acctId>ubce</empsts:acctId> 
      <empsts:docRefNo>2015021</empsts:docRefNo> 
      <empsts:regType cm:type="1">10</empsts:regType> 
      <empsts:empSSN>1296238</empsts:empSSN> 
     </empsts:reference> 
     <empsts:statusInfo> 
      <empsts:statusDate>2023-06-31</empsts:statusDate> 
      <empsts:statusCode>1</empsts:statusCode> 
      <empsts:originalMsgId>EMP2015021</empsts:originalMsgId> 
     </empsts:statusInfo> 
     <empsts:statusErrorDetails> 
      <empsts:statusErrorCodeDetails>8</empsts:statusErrorCodeDetails> 
      <empsts:remarks>Follow</empsts:remarks> 
     </empsts:statusErrorDetails> 
    </emp:payment> 
</empsts:record> 
</empsts:empTest> 

有人可以帮我一个正确的XSD模式文件吗?

+0

可能的重复[如何从一个示例XML文档在Perl中创建模式?](http://stackoverflow.com/questions/5716620/how-can-i-create-a-schema-from-an -example-xml-document-in-perl) – ceving

+0

您的目标是***自动生成***还是***为您的XML创建*** XSD?另外,你的'schemaLocation'表明XSD已经存在。你是否在'../ idec/empsts.xsd'处查找了'http://www.empsts.com/schema/empsts'命名空间的现有XSD? – kjhughes

回答

0

通常不可能自动生成模式,因为您无法猜测可选元素。但作为一个起点,你可以试试这个转型:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
    <xsl:template match="/"> 
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
       elementFormDefault="qualified" 
       attributeFormDefault="unqualified"> 
     <xsl:for-each select="//*[not(descendant::element())]"> 
     <xsl:element name="xs:element"> 
      <xsl:attribute name="name"> 
      <xsl:value-of select="name()"/> 
      </xsl:attribute> 
      <xs:simpleType> 
      <xs:restriction base="xs:string"/> 
      </xs:simpleType> 
     </xsl:element> 
     </xsl:for-each> 
     <xsl:for-each select="//*[descendant::element()]"> 
     <xsl:element name="xs:element"> 
      <xsl:attribute name="name"> 
      <xsl:value-of select="name()"/> 
      </xsl:attribute> 
      <xs:complexType> 
      <xs:sequence> 
       <xsl:for-each select="child::*"> 
       <xsl:element name="xs:element"> 
        <xsl:attribute name="ref"> 
        <xsl:value-of select="name()"/> 
        </xsl:attribute> 
       </xsl:element> 
       </xsl:for-each> 
      </xs:sequence> 
      </xs:complexType> 
     </xsl:element> 
     </xsl:for-each> 
    </xs:schema> 
    </xsl:template> 
</xsl:stylesheet> 

这已经回答了here。可能需要手动添加名称空间要求。

+0

如何使用上述xsl运行xml?任何工具。在名称空间上也需要帮助,因为它会引起混淆并抛出URI异常 – Kathiresa

+0

尝试[Saxon](https://en.wikipedia.org/wiki/Saxon_XSLT) – ceving