提问人:André Miguel Monteiro 提问时间:7/4/2023 最后编辑:Amira BedhiafiAndré Miguel Monteiro 更新时间:7/4/2023 访问量:47
如何为具有 2 个命名空间的 XML 文件创建架构
How to make a schema for an XML file with 2 namespaces
问:
我想为这个XML文件制作一个XSD:
<?xml version="1.0" encoding="UTF-8"?>
<filmes xmlns:acao="http://exemplo.com/acao"
xmlns:comedia="http://exemplo.com/comedia"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="to be completed">
<acao:filme>
<acao:titulo>Velozes e Furiosos</acao:titulo>
<acao:diretor>Rob Cohen</acao:diretor>
<acao:atorPrincipal>Vin Diesel</acao:atorPrincipal>
<acao:anoLancamento>2001</acao:anoLancamento>
</acao:filme>
<comedia:filme>
<comedia:titulo>Se Beber, Não Case!</comedia:titulo>
<comedia:diretor>Todd Phillips</comedia:diretor>
<comedia:atorPrincipal>Bradley Cooper</comedia:atorPrincipal>
<comedia:anoLancamento>2009</comedia:anoLancamento>
</comedia:filme>
</filmes>
我看到了一种可能性,即我使用一个主 XSD 为accao导入一个XSD,为comedia导入另一个XSD,但我无法执行一个可以验证此XML的架构。
答:
1赞
Amira Bedhiafi
7/4/2023
#1
您可能需要为“acao”和“comedia”命名空间创建单独的 XSD,并将它们导入到主 XSD 中。
首先为“acao”命名空间创建名为“acao.xsd”的文件:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://exemplo.com/acao"
xmlns:acao="http://exemplo.com/acao">
<xs:element name="filme">
<xs:complexType>
<xs:sequence>
<xs:element name="titulo" type="xs:string"/>
<xs:element name="diretor" type="xs:string"/>
<xs:element name="atorPrincipal" type="xs:string"/>
<xs:element name="anoLancamento" type="xs:gYear"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
然后为“comedia”命名空间创建第二个“comedia.xsd”:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://exemplo.com/comedia"
xmlns:comedia="http://exemplo.com/comedia">
<xs:element name="filme">
<xs:complexType>
<xs:sequence>
<xs:element name="titulo" type="xs:string"/>
<xs:element name="diretor" type="xs:string"/>
<xs:element name="atorPrincipal" type="xs:string"/>
<xs:element name="anoLancamento" type="xs:gYear"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
最后创建主 XSD 文件(“filmes.xsd”):
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:acao="http://exemplo.com/acao"
xmlns:comedia="http://exemplo.com/comedia"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
targetNamespace="http://exemplo.com/filmes"
elementFormDefault="qualified">
<!-- Import the acao and comedia namespaces -->
<xs:import namespace="http://exemplo.com/acao" schemaLocation="acao.xsd"/>
<xs:import namespace="http://exemplo.com/comedia" schemaLocation="comedia.xsd"/>
<!-- Define the root element -->
<xs:element name="filmes">
<xs:complexType>
<xs:sequence>
<!-- Reference the elements from the imported namespaces -->
<xs:element ref="acao:filme" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="comedia:filme" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
“ref” 属性用于引用导入的 XSD 中的元素。
评论
1赞
Yitzhak Khabinsky
7/4/2023
我修改了“anoLancamento”,即发布年份,以成为更精确的数据类型。xs:gYear
评论