2017-02-14 83 views
1

我試圖從c#類(使用xsd.exe)創建一個XML模式,其中我使用了另一個XMl模式的類。XML模式前綴錯誤

之後,我在c#中加載模式,並且我正在填充一些缺少的屬性,如導入的shema的shemalocation和名稱空間的前綴。

當我再次導出xml模式時,導入的模式類型的前綴是錯誤的,所有它被聲明。前綴設置爲「q1:enumeratedValues」。

我在做什麼錯了?

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:spirit="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1685-2009" xmlns:myNamespace="file:///c:/Local/" elementFormDefault="qualified" targetNamespace="file:///c:/Local/" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:import schemaLocation="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1685-2009/memoryMap.xsd" namespace="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1685-2009" /> 
    <xs:element name="signals" type="myNamespace:signals" /> 
    <xs:complexType name="signals"> 
    <xs:complexContent mixed="false"> 
     <xs:extension base="myNamespace:vendorExtensionBase"> 
     <xs:sequence> 
      <xs:element minOccurs="0" maxOccurs="unbounded" name="signal" type="myNamespace:signalType" /> 
     </xs:sequence> 
     </xs:extension> 
    </xs:complexContent> 
    </xs:complexType> 
    <xs:complexType name="vendorExtensionBase" abstract="true"> 
    <xs:attribute name="xsdversion" type="xs:string" /> 
    </xs:complexType> 
    <xs:complexType name="signalType"> 
    <xs:complexContent mixed="false"> 
     <xs:extension base="myNamespace:vendorExtensionBase"> 
     <xs:sequence> 
      <xs:element minOccurs="0" maxOccurs="1" name="name" type="xs:string" /> 
      <xs:element minOccurs="0" maxOccurs="1" name="description" type="xs:string" /> 
      <xs:element minOccurs="0" maxOccurs="1" name="bitwidth" type="xs:string" /> 
      <xs:element minOccurs="0" maxOccurs="1" name="signed" type="xs:string" /> 
      <xs:element minOccurs="0" maxOccurs="1" name="fractionalBits" type="xs:string" /> 
      <xs:element minOccurs="0" maxOccurs="1" name="defaultValue" type="xs:string" /> 
      <xs:element minOccurs="0" maxOccurs="1" name="divider" type="xs:string" /> 
      <xs:element xmlns:q1="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1685-2009" minOccurs="0" maxOccurs="1" ref="q1:enumeratedValues" /> 
      <xs:element minOccurs="0" maxOccurs="1" name="scaling"> 
      <xs:complexType mixed="true"> 
       <xs:sequence> 
       <xs:any maxOccurs="unbounded" /> 
       </xs:sequence> 
       <xs:anyAttribute /> 
      </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
     </xs:extension> 
    </xs:complexContent> 
    </xs:complexType> 
</xs:schema> 
+0

爲什麼這是錯的?它看起來似乎對我來說似乎合理。要明確,前綴是不相關的 - 只有它映射到的名稱空間是。 –

+0

你可以添加一個示例XML嗎? –

+0

嗨,它沒有錯,但我希望導入架構的類型看起來像。事實上,我得到了更多的導入架構和更多的自定義類型,當前綴與導入架構中的相同時,它會很好......唯一正在工作的上司是我自己的shema ... – Kosta

回答

1

命名空間前綴名稱是微不足道的。只有通過名稱空間前綴與命名空間前綴綁定的名稱空間值才能派生出含義。

沒有合適的XML處理器將關心特定的命名空間前綴名稱,你也不應該。

+0

而且只是要清楚 - 該綁定對包含特定名稱空間聲明的元素是本地的 - 它不是某種「全局」綁定。 –

+0

@Damien_The_Unbeliever:正確的,名稱空間前綴聲明的範圍僅限於其出現的元素和該元素的後代。 – kjhughes

相關問題