我的问题是让Eclise XML Schema Editor知道(也就是说,能够在完成时提供帮助......)来自另一个具有不同目标命名空间的Schema的外来XML属性。
这是一个虚拟的例子,只是为了理解: 我们假设我们有一个Schema,它在名称空间http://www.example.org/books中定义一个简单的Book类
<xs:schema targetNamespace="http://www.example.org/books" elementFormDefault="qualified" vc:minVersion="1.1" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.example.org/books">
<xs:complexType name="Book">
<xs:sequence>
<xs:element name="Title" type="xs:string" />
<xs:element name="Author" type="xs:string" />
<xs:element name="Editor" type="xs:string" />
<xs:element name="ISBN" type="xs:string" />
</xs:sequence>
</xs:complexType>
和第二个Schema,可能来自第三方提供商,在供应商的名称空间内定义了一系列有趣的属性来管理库存http://www.example.org/biblio
<xs:schema targetNamespace="http://www.example.org/biblio"
elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://www.example.org/biblio">
<xs:attribute name="mediaType" type="tns:Media"/>
<xs:attribute name="storageLocation" type="xs:string"/>
<xs:simpleType name="Media">
<xs:restriction base="xs:string">
<xs:enumeration value="BOOK"></xs:enumeration>
<xs:enumeration value="DVD"></xs:enumeration>
<xs:enumeration value="MAGAZINE"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
从那时起,我的组织决定将mediaType属性合并到Book Schema中,以便以符合&#34;某种方式&#34;的方式记录/注释该模式。与供应商定义。
我读过可以将外来属性合并到任何xsd类型定义部分(complexType,simpleType,sequence ...)。
因此,我修改了图书模式,使其“意识到”#34; biblio名称空间:
<xs:schema targetNamespace="http://www.example.org/books"
elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://www.example.org/books"
xmlns:bilio="http://www.example.org/biblio">
我希望使用mediaType属性注释complexType Book,如下所示:
<xs:complexType name="Book" bilio:mediaType="BOOK">
所以我最终得到以下架构:
<xs:schema targetNamespace="http://www.example.org/books"
elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://www.example.org/books"
xmlns:bilio="http://www.example.org/biblio">
<xs:complexType name="Book" bilio:mediaType="BOOK">
<xs:sequence>
<xs:element name="Title" type="xs:string" />
<xs:element name="Author" type="xs:string" />
<xs:element name="Editor" type="xs:string" />
<xs:element name="ISBN" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
太棒了! Eclipse验证器甚至没有抱怨。但内容助手无法向我提出前缀biblio中的属性:biblio:mediaType的值!
如何让它意识到属性在另一个模式中并向我提出可能的属性/值,这怎么会这么复杂?我试过为biblio架构创建一个目录条目,导入架构,即使它对我没有意义,...所以我只是试图手动编辑我的架构。
请注意:我的目的是保持Schema Level,我不会询问如何在该模式的某些XML实例中显示这些属性(因此xsd导入对我没有意义的原因) 事实上,我并不真正关心实例级别,让我们假设我使用XSD作为一种方便的类似UML的建模工具,但不要关心用它创建XML文件(即使它的不完全是......)