2012-07-26 85 views
2
<complexType name="spThread"> 
     <sequence> 
      <element name="SPThreadID" type="int" /> 
      <element name="durtime" minOccurs="0" default="0"> 
       <simpleType> 
        <restriction base="int"> 
         <minInclusive value="0" /> 
        </restriction> 
       </simpleType> 
      </element> 
      <element name="minexecutions" minOccurs="0" default="0"> 
       <simpleType> 
        <restriction base="int"> 
         <minInclusive value="0" /> 
        </restriction> 
       </simpleType> 
      </element> 
      <element name="numThreads" type="int" /> 
      <element name="procedures" type="spm:procedure" minOccurs="1" 
       maxOccurs="unbounded" /> 
     </sequence> 
    </complexType> 

我想用java代碼生成這種類型的.xsd文件..?我怎樣才能做到這一點。?如何使用java代碼生成xsd文件?

特別是如何生成簡單類型的元素並對其施加限制?

+0

模式的來源是什麼?您是否正在編寫用於創建模式的GUI工具?或者只是上述XML動​​態的一部分? – 2012-07-26 10:41:23

+0

我確實有Jaxb註釋的java類來生成模式 – ManthanB 2012-07-26 10:42:38

回答

1

您可以利用現有的xs:nonNegativeInteger類型,而不是創建自己的簡單類型來表示從0開始的整數。我將用一個例子來演示。

SpThread

可以使用@XmlSchemaType批註指定要在其中一個字段/屬性的XML模式產生什麼類型。

package forum11667335; 

import javax.xml.bind.annotation.XmlSchemaType; 

public class SpThread { 

    private int durTime; 

    @XmlSchemaType(name="nonNegativeInteger") 
    public int getDurTime() { 
     return durTime; 
    } 

    public void setDurTime(int durTime) { 
     this.durTime = durTime; 
    } 

} 

演示

您可以使用JAXBContextgenerateSchema方法來生成XML模式:

package forum11667335; 

import java.io.IOException; 
import javax.xml.bind.*; 
import javax.xml.transform.Result; 
import javax.xml.transform.stream.StreamResult; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     JAXBContext jc = JAXBContext.newInstance(SpThread.class); 

     jc.generateSchema(new SchemaOutputResolver() { 

      @Override 
      public Result createOutput(String namespaceUri, String suggestedFileName) throws IOException { 
       StreamResult result = new StreamResult(System.out); 
       result.setSystemId(suggestedFileName); 
       return result; 
      } 

     }); 
    } 

} 

輸出

下面是生成的XML模式。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:complexType name="spThread"> 
    <xs:sequence> 
     <xs:element name="durTime" type="xs:nonNegativeInteger"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:schema> 
0

您可以使用任何XML處理API來實現此目的。 JDOM就是其中之一。如果你想要一個特定的API來構建XML Schema,然後你可以序列化成XML,你可能需要檢查Eclipse MDT API。

+1

您好Marko我正在使用jaxb讀取和寫入xml,那麼是否有任何aanotaton或任何其他方式來生成上述類型的模式? – ManthanB 2012-07-26 10:35:03

+0

[schemagen](http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/2.0/jaxb/schemagen.html)工具似乎是您正在尋找的。 – 2012-07-26 10:39:05

0

可以使用Java2Schema工具,用於從Java類的模式,也可以嘗試JAXB 2.0

1

我建議你JAXB給你做任何XML的工作。但通常手動生成XSD文件,然後使用XSD文件以編程方式生成XML文件。你想要發展什麼?