在XSD中引用名称空间

时间:2012-02-22 17:13:49

标签: xml xsd xml-namespaces

需要获得可以生成这样的输出的XSD定义。我在引用命名空间时遇到了麻烦。我想在一个XSD文件中完成所有操作(不想引用其他文件)。

<?xml version="1.0" encoding="UTF-8"?>
<message>
  <Headerinfo>
    <Element1>stuff</Element1>
    <Element2>things</Element2>
  </Headerinfo>
  <CreateRequest xmlns="http://schemas.datacontract.org/2004/07/MyOrg.MyApp.DataContracts.MyObject" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <Element3>more stuff</Element3>
    <Element4>more things</Element4>
    <Address xmlns:a="http://schemas.datacontract.org/2004/07/MyOrg.MyApp.DataContracts.Address">
      <a:AddressLine1>123 Main Street</a:AddressLine1>
    </Address>
  </CreateRequest>
</message>

1 - 需要能够为CreateRequest复杂元素生成xmlns 2 - 需要能够生成xmlns:a for Address及其简单元素。

这是我到目前为止的XSD。我相信我需要为a:record添加一个xs:scehma条目。不知道还有什么,似乎无法让它发挥作用。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified">
  <xs:element name="message">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Headerinfo">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Element1" type="xs:string"/>
              <xs:element name="Element2" type="xs:string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="CreateRequest">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Element3" type="xs:string"/>
              <xs:element name="Element4" type="xs:string"/>
              <xs:element name="Address">
                <xs:complexType>
                  <xs:sequence>
                    <a:element name="AddressLine1" type="xs:string"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

2 个答案:

答案 0 :(得分:1)

如果没有引用其他XSD文件,则无法实现此目的,因为根没有名称空间,而某些内容使用名称空间。实际上,您只需要三个XSD文件。

通常,通过将表单设置为不具有命名空间的元素的不合格,可以采用相反的方法。

答案 1 :(得分:1)

我不确定XSD“生成输出”是什么意思 - XSD通常用于验证输入。

但XML Schema规范要求您为每个命名空间编写一个模式文档,每个文档包含xs:import声明,以定义跨命名空间的依赖关系。这就是它的设计方式,没有必要试图对抗它。