嵌套元素中的XML模式扩展
这两个模式文件是我为理解xml/xsd中的扩展过程而编写的示例。第一个具有基本定义,并且只有一个元素。在第二个模式中,我希望将特定元素从第一个“扩展”到嵌套结构中。这些文件位于不同的名称空间中 Myschema1.xsd嵌套元素中的XML模式扩展,xml,xsd,schema,Xml,Xsd,Schema,这两个模式文件是我为理解xml/xsd中的扩展过程而编写的示例。第一个具有基本定义,并且只有一个元素。在第二个模式中,我希望将特定元素从第一个“扩展”到嵌套结构中。这些文件位于不同的名称空间中 Myschema1.xsd <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetName
<?xml version="1.0"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
targetNamespace="myschema1"
xmlns="myschema1">
<xs:complexType name="EnderecoTipo">
<xs:sequence>
<xs:element name="Logradouro" type="xs:string"></xs:element>
<xs:element name="CEP" type="xs:string"></xs:element>
<xs:element name="Cidade" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="IdentificacaoTipo">
<xs:sequence>
<xs:element name="Nome" type="xs:string"></xs:element>
<xs:element name="Idade" type="xs:int"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CartaoTipo">
<xs:sequence>
<xs:element name="Identificacao" type="IdentificacaoTipo"></xs:element>
<xs:element name="Endereco" type="EnderecoTipo"></xs:element>
</xs:sequence>
<xs:attribute name="idioma" type="xs:string" default="pt-BR"></xs:attribute>
</xs:complexType>
<xs:complexType name="EmpresaTipo">
<xs:sequence>
<xs:element name="Nome" type="xs:string"></xs:element>
<xs:element name="Cartao" type="CartaoTipo"></xs:element>
</xs:sequence>
<xs:attribute name="origem" type="xs:string" default="nacional"></xs:attribute>
</xs:complexType>
<xs:element name="Empresa" type="EmpresaTipo"/>
</xs:schema>
Myschema3.xsd:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
targetNamespace="myschema3"
xmlns="myschema3"
xmlns:sch="myschema1">
<xs:import namespace="myschema1" schemaLocation="Myschema1.xsd"></xs:import>
<xs:complexType name="Companhia">
<xs:complexContent>
<xs:extension base="sch:EmpresaTipo">
<xs:sequence>
<xs:element name="Cartao">
<xs:complexType>
<xs:complexContent>
<xs:extension base="sch:CartaoTipo">
<xs:sequence>
<xs:element name="Identificacao">
<xs:complexType>
<xs:complexContent>
<xs:extension base="sch:IdentificacaoTipo">
<xs:sequence>
<xs:element name="Genero" type="xs:string" default="M"></xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="Companhia" type="Companhia"/>
</xs:schema>
我想在“IdentificacaoTipo”中添加元素“慷慨”,但我得到了以下XML
<?xml version="1.0" encoding="UTF-8"?>
<p:Companhia origem="nacional" xmlns:p="myschema3" xmlns:p1="myschema1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="myschema3 Myschema3.xsd ">
<p1:Nome>p1:Nome</p1:Nome>
<p1:Cartao idioma="pt-BR">
<p1:Identificacao>
<p1:Nome>p1:Nome</p1:Nome>
<p1:Idade>0</p1:Idade>
</p1:Identificacao>
<p1:Endereco>
<p1:Logradouro>p1:Logradouro</p1:Logradouro>
<p1:CEP>p1:CEP</p1:CEP>
<p1:Cidade>p1:Cidade</p1:Cidade>
</p1:Endereco>
</p1:Cartao>
<p:Cartao idioma="pt-BR">
<p1:Identificacao>
<p1:Nome>p1:Nome</p1:Nome>
<p1:Idade>0</p1:Idade>
</p1:Identificacao>
<p1:Endereco>
<p1:Logradouro>p1:Logradouro</p1:Logradouro>
<p1:CEP>p1:CEP</p1:CEP>
<p1:Cidade>p1:Cidade</p1:Cidade>
</p1:Endereco>
<p:Identificacao>
<p1:Nome>p1:Nome</p1:Nome>
<p1:Idade>0</p1:Idade>
<p:Genero>M</p:Genero>
</p:Identificacao>
</p:Cartao>
</p:Companhia>
p1:Nome
p1:Nome
0
p1:Logradouro
p1:CEP
p1:Cidade
p1:Nome
0
p1:Logradouro
p1:CEP
p1:Cidade
p1:Nome
0
M
有可能吗?我怎么做 当您说“我得到下面的XML”时,您大概是在使用某个特定的工具集从模式生成此XML。但是你还没有说你用什么工具来做这个
我不知道是否有一种工具可以从使用扩展派生的模式生成实例,但您肯定可以“手工”编写符合您的模式的实例
但是,一般来说,如果希望根据扩展派生的类型验证实例,则必须在包含元素上使用
xsi:type
属性,这非常难看,可能会使整个机制不适合您的目的。哦,抱歉。的确,我正在使用eclipse创建这些xsd和xml文件。我也在使用eclipse来验证这个xml文件。