如何在XML中为W3C标记验证服务引用XSD?

时间:2016-08-23 20:55:04

标签: xml xsd xsd-validation xml-validation

我想创建一个遵循XML模式http://www.oid-info.com/oid.xsd的XML。应该以某种方式在XML文件中引用此XSD,以便像https://validator.w3.org/这样的工具可以检查它以查找数据语义中的错误,例如:当电子邮件地址无效时。

首先,我尝试了这种方式:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<oid-database xmlns="http://www.oid-info.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.oid-info.com/oid.xsd">
<submitter>
....
</submitter>
<oid>
....
</oid>
</oid-database>

W3C Markup Validation Service说:

  

找不到DOCTYPE!仅检查XML语法。 DOCTYPE宣言   没有被认出或遗失。这可能意味着正式   公共标识符包含拼写错误,或者声明   没有使用正确的语法,或者您的XML文档没有使用   DOCTYPE声明。已跳过对文档的验证,并且   简单检查XML语法的格式是否正确   相反。

好的,所以我尝试使用DOCTYPE

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE oid-database>
<oid-database xmlns="http://www.oid-info.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.oid-info.com/oid.xsd">
<submitter>
....
</submitter>
<oid>
....
</oid>
</oid-database>

现在W3C Validator说:

  

第2行,第23列:没有内部或外部文档类型声明   子集;将在没有验证的情况下解析

我确实知道DTD是什么,我过去曾使用过DTD。我知道这里缺少DTD。但我想检查XSD,而不是DTD。

我需要做些什么才能让它发挥作用?

1 个答案:

答案 0 :(得分:2)

W3C Validator将检查格式良好并将验证DTD;它不会对XSD进行验证。您将不得不使用另一个在线或离线验证器。

此外,以下是您的XML文件应该如何暗示它应该针对OID XSD进行验证有效:

<?xml version="1.0" encoding="UTF-8" ?>
<oid-database xmlns="http://oid-info.com"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://oid-info.com 
                                  http://www.oid-info.com/oid.xsd">
  <submitter>
    ....
  </submitter>
  <oid>
    ....
  </oid>
</oid-database>

另请参阅:How to link XML to XSD using schemaLocation or noNamespaceSchemaLocation?

请注意,这些XSD似乎有自己的问题,包括:

  

[警告] xhtml-light.xsd:8:36:schema_reference.4:无法读取   架构文档'xml.xsd',因为1)找不到文档; 2)   该文件无法阅读; 3)文档的根元素是   没有。

     

[错误] oid.xsd:91:46:InvalidRegex:模式值   ?“{\ S *(((([AZ] [A-ZA-Z0-9 - ] \ S ((\ S *(0 | [1-9] [0-9] )\ S ))|φ(0 | [1-9] [0-9]的))){2,} \ S )|((0 | [ 1-9] [0-9]的)((0 |。[1-9] [0-9] )?)的))\ S }”   不是有效的正则表达式。