需要为以下xml生成XSD架构?

时间:2016-02-26 09:28:26

标签: xsd

我想为以下xml生成一个合适的XSD。我试过在线转换,但每个网站都提供不同的输出。你能帮我找一个正确的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架构文件吗?

1 个答案:

答案 0 :(得分: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。可能需要手动添加名称空间要求。