2012-04-10 193 views
2

我想在XSD文件中擴展現有的複雜類型。XSD擴展複雜類型

我創建了一個新的xsd文件,並將其包含在所有主XSD文件包含的末尾。

我遇到的問題是,它似乎加我的擴展,但它消除均較asset_abstract定義

是什麼,我試圖做其他可能存在的元素?

代碼我不想修改

<xs:complexType name="Feature_Cadastre_Lot" abstract="false"> 
<xs:annotation> 
    <xs:documentation>Represents the boundary of a titled, or proposed lot</xs:documentation> 
</xs:annotation> 
<xs:complexContent> 
    <xs:extension base="asset_abstract"> 
    <xs:sequence minOccurs="1" maxOccurs="1"> 
     <xs:element name="LotNo" type="String_32" minOccurs="1" maxOccurs="1" nillable="false"> 
     <xs:annotation> 
      <xs:documentation>The lot number as described on the originating survey plan</xs:documentation> 
     </xs:annotation> 
     </xs:element> 
     <xs:element name="PlanNo" type="String_32" minOccurs="1" maxOccurs="1" nillable="false"> 
     <xs:annotation> 
      <xs:documentation>The plan number of the originating survey plan.</xs:documentation> 
     </xs:annotation> 
     </xs:element> 
     <xs:element name="CancelledLotPlan" type="String_32" minOccurs="1" maxOccurs="1" nillable="true"> 
     <xs:annotation> 
      <xs:documentation>The lot on plan cancelled by this boundary if applicable.</xs:documentation> 
     </xs:annotation> 
     </xs:element> 
     <xs:element name="TitledArea_sqm" type="Float_Positive_NonZero" minOccurs="1" maxOccurs="1" nillable="false"> 
     <xs:annotation> 
      <xs:documentation>The area in square metres enclosed by the boundary, as described by the survey plan.</xs:documentation> 
     </xs:annotation> 
     </xs:element> 
     <xs:element name="Geometry" type="geometry_area_multipatch_simple" minOccurs="1" maxOccurs="1" nillable="false"> 
     <xs:annotation> 
      <xs:documentation>The geometry of this feature in coordinate space. May contain holes and islands. Boundaries must consist of straight lines.</xs:documentation> 
     </xs:annotation> 
     </xs:element> 
    </xs:sequence> 
    </xs:extension> 
</xs:complexContent> 

代碼我可以導入擴展方案。

<xs:complexType name="Feature_Cadastre_Lot"> 
<xs:complexContent> 
    <xs:extension base="asset_abstract"> 
     <xs:sequence> 
      <xs:element name="LMS_ID_1" type="String_32" minOccurs="1" maxOccurs="1" nillable="false"> 
       <xs:annotation> 
        <xs:documentation>The Land Management System ID as defined by the LMS Team</xs:documentation> 
       </xs:annotation> 
      </xs:element> 
      <xs:element name="LMS_ID_2" type="String_32" minOccurs="1" maxOccurs="1" nillable="false"> 
       <xs:annotation> 
        <xs:documentation>The Land Management System ID as defined by the LMS Team</xs:documentation> 
       </xs:annotation> 
      </xs:element> 
     </xs:sequence> 
    </xs:extension> 
</xs:complexContent> 

好,我已經創建了一個光禿禿的骨頭〔實施例,我仍然不能得到它現在使用Visual Studio的,因爲我想確保它不是工具的工作:),我仍然可以」不要讓它太工作,因爲你的是:(我必須缺少的東西

基本上我已經添加了2個文件Master.xsd和local.xsd 主包裝遠程項目我不能/不想要直接修改和local.xsd是我們所有網站特定的東西(重新定義,因爲它被稱爲)。

Master.xsd

<?xml version="1.0"?> 
<xs:schema version="1.0.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:include schemaLocation="project.xsd"> 
    </xs:include> 
    <xs:include schemaLocation="local.xsd"> 
    <xs:annotation> 
     <xs:documentation>A File I can add my overwrites to</xs:documentation> 
    </xs:annotation> 
    </xs:include> 
    </xs:schema> 

project.xsd

<?xml version="1.0"?> 
<xs:schema version="1.0.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:include schemaLocation="remote.xsd"> 
    <xs:annotation> 
     <xs:documentation>A File that contains the complexType I want to add elments to. But not modify otherwise</xs:documentation> 
    </xs:annotation> 
    </xs:include> 
    <xs:element name="Master_Project"> 
    <xs:annotation> 
     <xs:documentation>The Project.</xs:documentation> 
    </xs:annotation> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="ProjectData"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="ExistingElement" type="ExistingElementType"> 
        <xs:annotation> 
        <xs:documentation>An Existing Element That I would Like To Add To.</xs:documentation> 
        </xs:annotation> 
       </xs:element> 
       </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

local.xsd

<?xml version="1.0"?> 
<xs:schema version="1.0.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:redefine schemaLocation="./remote.xsd"> 
    <xs:complexType name="ExistingElementType"> 
     <xs:complexContent> 
     <xs:extension base="ExistingElementType"> 
      <xs:sequence> 
      <xs:element name="newTest"/> 
      </xs:sequence> 
     </xs:extension> 
     </xs:complexContent> 
    </xs:complexType> 
</xs:redefine> 
</xs:schema> 

remote.xsd

<?xml version="1.0"?> 
<xs:schema version="1.0.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
<xs:complexType name="ExistingElementType"> 
    <xs:sequence> 
     <xs:element name="someProperty"/> 
     <xs:element name="someSecondProperty"/> 
    </xs:sequence> 
</xs:complexType> 
</xs:schema> 

而且,我做的所有重新定義最終。

回答

3

如果你想保持複雜類型的名稱爲「Feature_Cadastre_Lot」 它額外的內容擴展,那麼你正在尋找重新定義代替。最終結果是,所有對「Feature_Cadastre_Lot」的引用,包括新添加的內容和已有的新引用。

如果你想在一些但不是所有的現有內容,這是沒有解決方案(重新定義是全部或沒有)。

的重新定義具有以下佈局:

<xs:redefine schemaLocation="must resolve to your XSD"> 
    <xs:complexType name="Feature_Cadastre_Lot"> 
    <xs:complexContent> 
     <xs:extension base="Feature_Cadastre_Lot"> 
     <xs:sequence> 
      <xs:element name="LMS_ID_1" type="String_32" minOccurs="1" maxOccurs="1" nillable="false"> 
       <xs:annotation> 
        <xs:documentation>The Land Management System ID as defined by the LMS Team</xs:documentation> 
       </xs:annotation> 
      </xs:element> 
      <xs:element name="LMS_ID_2" type="String_32" minOccurs="1" maxOccurs="1" nillable="false"> 
       <xs:annotation> 
        <xs:documentation>The Land Management System ID as defined by the LMS Team</xs:documentation> 
       </xs:annotation> 
      </xs:element> 
     </xs:sequence> 
     </xs:extension> 
    </xs:complexContent> 
    </xs:complexType> 
</xs:redefine> 

結果將是這樣的:

Redefined type

你可以看到突出顯示的序列顯示添加的內容。

在Visual Studio 2010中,內容也顯示OK:

VS2010 redefine

注意底部的第二序列。

+0

重新定義似乎是我需要去的方向。但它似乎並沒有生效,它不會覆蓋現有的Feature_Cadastre_Lot類型我錯過了一些簡單的... – Jamo 2012-04-10 23:40:13

+0

@Jamo,你可以請更具體的關於你如何使用它?例如,您正在使用某個編輯器,而您看不到修改後的圖表?或者你是否使用某種xsd代碼綁定工具(在這種情況下可能不支持重定義)? – 2012-04-11 02:52:45

+0

我一直在使用XSDDiagram來幫助讀取該方案,但我也已將其加載到Visual Studio中,但仍然無法工作。 – Jamo 2012-04-11 03:21:01