我试图为以下XML文档创建一个XML模式。https://www.nationalbanken.dk/_vti_bin/DN/DataService.svc/CurrencyRatesHistoryXML?lang=en
然后,我在记事本上安装了XML工具插件,并尝试重新验证模式中的XML文档。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ecb.int/vocabulary/2002-08-01/eurofxref" xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref" elementFormDefault="qualified">
<xs:element name="Envelope">
<xs:complexType>
<xs:sequence>
<xs:element name="subject" type="xs:string"></xs:element>
<xs:element name="Sender">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Cube">
<xs:complexType>
<xs:sequence>
<xs:element name="Cube" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Cube" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="currency" type="xs:string"></xs:attribute>
<xs:attribute name="rate" type="xs:double"></xs:attribute>
<xs:attribute name="name" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="time" type="xs:date"></xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
要验证的XML
<gesmes:Envelope
xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref"
xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01"
gesmes:schemaLocation="http://www.ecb.int/vocabulary/2002-08-01/eurofxref ..\StockDownloadResources\CurrenciesDownloadMANUAL.XSD">
<gesmes:subject>Exhange rates</gesmes:subject>
<gesmes:Sender>
<gesmes:name>Danmarks Nationalbank</gesmes:name>
</gesmes:Sender>
<Cube>
<Cube time="2019-07-25">
<Cube currency="AUD" rate="468.22" name="Australian dollars"/>
<Cube currency="BGN" rate="381.68" name="Bulgarian lev"/>
<Cube currency="BRL" rate="178.71" name="Brazilian real"/>
<Cube currency="CAD" rate="511.60" name="Canadian dollars"/>
<Cube currency="CHF" rate="679.30" name="Swiss francs"/>
<Cube currency="CNY" rate="97.72" name="Chinese yuan renminbi"/>
<Cube currency="CZK" rate="29.25" name="Czech koruny"/>
<Cube currency="EUR" rate="746.48" name="Euro"/>
<Cube currency="GBP" rate="839.09" name="Pounds sterling"/>
<Cube currency="HKD" rate="85.95" name="Hong Kong dollars"/>
<Cube currency="HRK" rate="101.10" name="Croatian kuna"/>
<Cube currency="HUF" rate="2.295" name="Hungarian forints"/>
<Cube currency="IDR" rate="0.0480" name="Indonesian rupiah"/>
<Cube currency="ILS" rate="190.49" name="Israeli shekel"/>
<Cube currency="INR" rate="9.74" name="Indian rupee"/>
<Cube currency="ISK" rate="5.493" name="Icelandic kronur *"/>
<Cube currency="JPY" rate="6.2129" name="Japanese yen"/>
<Cube currency="KRW" rate="0.5689" name="South Korean won"/>
<Cube currency="MXN" rate="35.35" name="Mexican peso"/>
<Cube currency="MYR" rate="163.23" name="Malaysian ringgit"/>
<Cube currency="NOK" rate="77.71" name="Norwegian kroner"/>
<Cube currency="NZD" rate="449.80" name="New Zealand dollars"/>
<Cube currency="PHP" rate="13.14" name="Philippine peso"/>
<Cube currency="PLN" rate="175.76" name="Polish zlotys"/>
<Cube currency="RON" rate="158.06" name="Romanian leu"/>
<Cube currency="RUB" rate="10.65" name="Russian rouble"/>
<Cube currency="SEK" rate="71.13" name="Swedish kronor"/>
<Cube currency="SGD" rate="491.78" name="Singapore dollars"/>
<Cube currency="THB" rate="21.76" name="Thai baht"/>
<Cube currency="TRY" rate="118.47" name="Turkish lira"/>
<Cube currency="USD" rate="671.60" name="US dollars"/>
<Cube currency="XDR" rate="925.37" name="SDR (Calculated **)"/>
<Cube currency="ZAR" rate="48.26" name="South African rand"/>
</Cube>
<!-- MORE CUBES HAS BEEN DELETED -->
</Cube>
</gesmes:Envelope>
但当我尝试验证模式时,我收到以下验证错误:
使用XML架构验证当前文件:错误:元素'{http://www.gesmes.org/xml/2002-08-01}信封”:没有可用于验证根的匹配全局声明。
在谷歌搜索此验证错误和提交此问题时,您将发现一系列有相同类型错误的人。但是,我遇到的所有人都没有足够的指导我解决这个问题。
我错过了什么?
注释字段不允许足够的信件提供彻底的更新。
首先感谢stevedlawrence,他已经给了我们一些见解:)
cube.xsd
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.ecb.int/vocabulary/2002-08-01/eurofxref"
elementFormDefault="qualified">
<xs:element name="Cube">
<!-- The rest of your Cube element definition -->
<xs:complexType>
<xs:sequence>
<xs:element name="Cube" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Cube" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="currency" type="xs:string"></xs:attribute>
<xs:attribute name="rate" type="xs:double"></xs:attribute>
<xs:attribute name="name" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="time" type="xs:date"></xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
信封xsd
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:cube="http://www.ecb.int/vocabulary/2002-08-01/eurofxref"
targetNamespace="http://www.gesmes.org/xml/2002-08-01"
elementFormDefault="qualified">
<xs:import schemaLocation="cube.xsd" namespace="http://www.ecb.int/vocabulary/2002-08-01/eurofxref" />
<xs:element name="Envelope">
<xs:complexType>
<xs:sequence>
<xs:element name="subject" type="xs:string"></xs:element>
<xs:element name="Sender">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element ref="cube:Cube" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XML文件已下载
<gesmes:Envelope
xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref"
xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01"
gesmes:schemaLocation="http://www.ecb.int/vocabulary/2002-08-01/eurofxref ..\StockDownloadResources\envelope.xsd">
<gesmes:subject>Exhange rates</gesmes:subject>
<gesmes:Sender>
<gesmes:name>Danmarks Nationalbank</gesmes:name>
</gesmes:Sender>
<Cube>
<Cube time="2019-07-25">
<Cube currency="AUD" rate="468.22" name="Australian dollars"/>
<Cube currency="BGN" rate="381.68" name="Bulgarian lev"/>
<Cube currency="BRL" rate="178.71" name="Brazilian real"/>
<Cube currency="CAD" rate="511.60" name="Canadian dollars"/>
<Cube currency="CHF" rate="679.30" name="Swiss francs"/>
<Cube currency="CNY" rate="97.72" name="Chinese yuan renminbi"/>
<Cube currency="CZK" rate="29.25" name="Czech koruny"/>
<Cube currency="EUR" rate="746.48" name="Euro"/>
<Cube currency="GBP" rate="839.09" name="Pounds sterling"/>
<Cube currency="HKD" rate="85.95" name="Hong Kong dollars"/>
<Cube currency="HRK" rate="101.10" name="Croatian kuna"/>
<Cube currency="HUF" rate="2.295" name="Hungarian forints"/>
<Cube currency="IDR" rate="0.0480" name="Indonesian rupiah"/>
<Cube currency="ILS" rate="190.49" name="Israeli shekel"/>
<Cube currency="INR" rate="9.74" name="Indian rupee"/>
<Cube currency="ISK" rate="5.493" name="Icelandic kronur *"/>
<Cube currency="JPY" rate="6.2129" name="Japanese yen"/>
<Cube currency="KRW" rate="0.5689" name="South Korean won"/>
<Cube currency="MXN" rate="35.35" name="Mexican peso"/>
<Cube currency="MYR" rate="163.23" name="Malaysian ringgit"/>
<Cube currency="NOK" rate="77.71" name="Norwegian kroner"/>
<Cube currency="NZD" rate="449.80" name="New Zealand dollars"/>
<Cube currency="PHP" rate="13.14" name="Philippine peso"/>
<Cube currency="PLN" rate="175.76" name="Polish zlotys"/>
<Cube currency="RON" rate="158.06" name="Romanian leu"/>
<Cube currency="RUB" rate="10.65" name="Russian rouble"/>
<Cube currency="SEK" rate="71.13" name="Swedish kronor"/>
<Cube currency="SGD" rate="491.78" name="Singapore dollars"/>
<Cube currency="THB" rate="21.76" name="Thai baht"/>
<Cube currency="TRY" rate="118.47" name="Turkish lira"/>
<Cube currency="USD" rate="671.60" name="US dollars"/>
<Cube currency="XDR" rate="925.37" name="SDR (Calculated **)"/>
<Cube currency="ZAR" rate="48.26" name="South African rand"/>
</Cube>
<!-- MORE CUBES HAS BEEN DELETED -->
</Cube>
</gesmes:Envelope>
当我现在运行模式的记事本验证时,出现以下错误:
使用XML架构验证当前文件:错误:元素'{http://www.gesmes.org/xml/2002-08-01}信封',属性'{http://www.gesmes.org/xml/2002-08-01}schemaLocation':属性'{http://www.gesmes.org/xml/2002-08-01}不允许使用“schemaLocation”。
让我们先看看XML。它定义了以下名称空间和前缀:
xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref"
xmlns: gesmes="http://www.gesmes.org/xml/2002-08-01"
xmlns=
表示http://www.ecb.int/vocabulary/2002-08-01/eurofxref
名称空间。xmlns:gesmes
表示带有gesmes
前缀(即信封、主题、发件人、姓名)的XML元素位于http://www.gesmes.org/xml/2002-08-01
名称空间。
但是,您的模式将targetNamespace定义为http://www.ecb.int/vocabulary/2002-08-01/eurofxref
,这意味着验证希望信封元素位于该命名空间中。但是xml说它应该在另一个名称空间中。这会导致在预期命名空间中找不到预期元素的错误。
首先要意识到的是,模式文件只能定义单个命名空间中的元素,这是由Target etNamespace属性设置的。但是XML混合了具有不同命名空间的元素。因此,我们立即知道我们必须有两个具有不同名称空间的架构文件,其中一个必须导入另一个。所以一个模式是关于信封的,一个模式是关于立方体的。
让我们从Cube模式开始,因为它是内部元素。多维数据集元素位于http://www.ecb.int/vocabulary/2002-08-01/eurofxref
命名空间中,因此它应该是该模式的Target etNamespace。然后我们定义Cube元素,像这样:
cube.xsd
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.ecb.int/vocabulary/2002-08-01/eurofxref"
elementFormDefault="qualified">
<xs:element name="Cube">
<!-- The rest of your Cube element definition -->
</xs:element>
</xs:schema>
因此,所有多维数据集元素现在都有一个模式,将它们放在正确的名称空间中。
现在我们需要定义信封模式,引用刚才定义的多维数据集元素。信封元素位于http://www.gesmes.org/xml/2002-08-01
名称空间,因此这将是我们的targetNamespace。最好定义一个名称空间前缀,这样我们就可以引用多维数据集名称空间。我们需要导入多维数据集模式,以便在该命名空间中引用该多维数据集元素。大概是这样的:
信封xsd
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:cube="http://www.ecb.int/vocabulary/2002-08-01/eurofxref"
targetNamespace="http://www.gesmes.org/xml/2002-08-01"
elementFormDefault="qualified">
<xs:import schemaLocation="cube.xsd" namespace="http://www.ecb.int/vocabulary/2002-08-01/eurofxref" />
<xs:element name="Envelope>
<xs:complexType>
<xs:sequence>
...
<xs:element ref="cube:Cube" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
因此,这将包络、主题、发送者和名称元素定义为正确的gesmes命名空间,并引用Cube命名空间中的Cube元素。
我创建了一个XML文件,但是当我试图对XSD进行验证时,我一直收到以下错误: 错误1845:元素{http://www.stormware.cz/schema/version_2/data.xsd}dataPack:验证根没有匹配的全局声明。 PHP5.4。7 libxml2.7。8. 我的职能: 我的XSD文件:www.stormware。cz/schema/version_2/data。xsd
我正在尝试用xsd文件验证xml文件,以便为加拿大税务局提交T2202税单 下面是我的xml文件,可以稍微修改一下,以便用xsd模式文件进行验证。 请在下面找到我的xsd模式文件,它来自政府网站。 我需要验证xml文件。可以对xml文件进行轻微更改。我得到下面的错误 错误:元素“Return”:验证根目录没有匹配的全局声明
使用名称空间时引用模式时的正确语法是什么? 问题 使用给定的架构创建XML文档。
问题内容: 我正在生成一些XML模式,并希望确保我们的生成器正在创建有效的XML模式文档(不是XML)。我试图提出验证XML Schema文档的代码,但失败了。我不认为会这么复杂。 这段代码与我需要做的非常接近,但是出现以下错误。 我在调用setSchema(uri)时使用URL,以确保XMLSchema.dtd和datatypes.dtd是相对的,希望它们可用,但是我不确定如何进行检查。 我猜想
下面是XSD。 下面是xml文件。 当尝试使用http://www.utilities-online.info/xsdvalidation验证它时,我得到以下错误 第2行62:org.xml.sax.SAXParseException;行号:2;列号:62;CVC-ELT.1:找不到元素“Message”的声明。
我对XML非常陌生,我面临着验证问题,如果我的XML和XSD文件结构良好,我也希望得到一些反馈。 在根据XSD验证XML时,我经常遇到错误- 下面的XML XSD 如果你发现其中任何一个有任何错误,请随时指出。它们都有从图案到最大长度的限制。 谢谢!!!!