【问题标题】:Referencing namespaces in XSD在 XSD 中引用命名空间
【发布时间】:2012-02-23 17:46:31
【问题描述】:

需要得到一个可以像这样生成输出的 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。

这是我目前拥有的 XSD。我相信我需要为 a: 记录添加一个 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>

【问题讨论】:

    标签: xml xsd xml-namespaces


    【解决方案1】:

    如果不引用另一个 XSD 文件,就不可能实现这一点,因为根没有命名空间,并且某些内容使用命名空间。事实上,您只需要三个 XSD 文件。

    一般来说,相反的方法可能是可能的,通过将表单设置为不合格的元素没有命名空间。

    【讨论】:

    • 我的研究也将我引向这一点。我尝试使用不合格的设置,但我不确定我还会添加什么来利用它。
    • @atalien,不幸的是,没有别的...如果您的消息是合格的,而其他元素不合格,那么您可以在一个 XSD 中完成。如果您最终在任何其他命名空间中引用元素/属性,那么您将无法实现您想要的。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-12-23
      • 2016-04-23
      • 2021-05-04
      • 2012-06-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多