在哪里更新xml架构的规则,约束和元素

时间:2014-06-19 17:14:15

标签: xml xsd xsd-validation

我正在尝试构建自己的xml架构。

例如,我有这个元素

<xs:element name="employee">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

我可以在哪里应用此架构?我的意思是我希望有一些东西(工具或网站),我可以将模式作为输入,然后生成xml文件给我。另外,我想将一些xml文件验证到特定模式。

我已经阅读了这里提问的规则,似乎我的问题不是主题,但这不是因为我问了一个关于编程问题的问题而且我试图解决它但我不能因为w3c中的xml架构对我来说并不清楚。

感谢您花时间和精力帮助我。

此致

1 个答案:

答案 0 :(得分:1)

您可以使用this XML generator等在线工具生成包含架构的示例XML。拥有实例后,您还可以使用在线工具对其进行验证。 This XML validator允许您保存验证对并在以后引用它。

在尝试生成或验证任何内容之前,必须使用<schema>根元素和名称空间声明正确构建模式:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:element name="employee">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="firstname" type="xs:string"/>
                <xs:element name="lastname" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

如果您使用上述生成服务,您将获得以下示例实例:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Document created with online XML Editor http://xmlgrid.net 2014/06/19 14:51:15  -->
<employee>
    <firstname>test string</firstname>
    <lastname>test string</lastname>
</employee>

您还可以声明性地将实例绑定到模式,以便可以在不必单独指定模式的情况下对其进行验证。如果您的模式没有目标名称空间,您将使用XML模式实例属性noNamespaceSchemaLocation(需要在XSD实例名称空间中进行限定):

<employee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:noNamespaceSchemaLocation="schema-uri.xsd">
    <firstname>test string</firstname>
    <lastname>test string</lastname>
</employee>

如果它有一个目标命名空间(上面的模式的情况),你可以使用schemaLocation一对(如果你有多个模式的元素,则更多)在一个文档中)以空格分隔的字符串映射命名空间及其位置。

<employee xmlns="employee-namespace"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="employee-namespace schema-uri.xsd">
    <firstname>test string</firstname>
    <lastname>test string</lastname>
</employee>

要验证此操作,您的架构需要在根元素中具有targetNamespace属性。通常,您还会将目标命名空间声明为默认命名空间,如果需要,您可以引用到其他本地类型:

 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
            targetNamespace="employee-namespace"
            xmlns="employee-namespace"
            elementFormDefault="qualified">
    <xs:element name="employee">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="firstname" type="xs:string"/>
                <xs:element name="lastname" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>