2012-02-22 74 views
2

需要獲取可以生成像這樣的輸出的XSD定義。我在引用命名空間時遇到了問題。我想在一個XSD文件中完成所有操作(不想引用其他文件)。引用XSD中的命名空間

<?xml version="1.0" encoding="UTF-8"?> 
<message> 
    <Headerinfo> 
    <Element1>stuff</Element1> 
    <Element2>things</Element2> 
    </Headerinfo> 
    <CreateRequest xmlns="http://schemas.datacontract.org/2004/07/MyOrg.MyApp.DataContracts.MyObject" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <Element3>more stuff</Element3> 
    <Element4>more things</Element4> 
    <Address xmlns:a="http://schemas.datacontract.org/2004/07/MyOrg.MyApp.DataContracts.Address"> 
     <a:AddressLine1>123 Main Street</a:AddressLine1> 
    </Address> 
    </CreateRequest> 
</message> 

1 - 需要能夠爲CreateRequest複雜元素生成xmlns。
2 - 需要能夠爲地址及其簡單元素生成xmlns:a。

以下是我目前使用的XSD。我相信我需要爲a:record添加一個xs:scehma條目。不知道還有什麼,似乎無法得到它的工作。

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified"> 
    <xs:element name="message"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Headerinfo"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Element1" type="xs:string"/> 
       <xs:element name="Element2" type="xs:string"/> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     <xs:element name="CreateRequest"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Element3" type="xs:string"/> 
       <xs:element name="Element4" type="xs:string"/> 
       <xs:element name="Address"> 
       <xs:complexType> 
        <xs:sequence> 
        <a:element name="AddressLine1" type="xs:string"/> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

回答

1

這是不可能實現這一目標,而不引用另一個XSD文件,因爲根本沒有命名空間,有的內容使用命名空間。實際上,您只需要三個XSD文件。

通常,通過將表單設置爲不具有名稱空間的元素的非限定形式,也可以採用其他方式。

+0

我的研究也引領了我。我嘗試過不合格的場景,但我不確定我還會加入什麼來充分利用這一點。 – Walt 2012-02-22 19:49:10

+0

@atalien,不幸的是,除此之外別無其他...如果您的消息是合格的,而其他元素不合格,那麼您可以在一個XSD中執行此操作。如果最終引用其他名稱空間中的元素/屬性,那麼您無法實現自己想要的功能。 – 2012-02-22 20:33:39

1

我不確定您的意思是由XSD「生成輸出」 - XSD通常用於驗證輸入。

但是,XML Schema規範要求您爲每個名稱空間編寫一個模式文檔,每個文檔包含xs:import聲明以定義跨命名空間的依賴關係。這就是它設計的方式,沒有任何意義要與之抗衡。