2016-02-26 41 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