从模式确定XML模式和名称空间

时间:2014-02-06 13:14:34

标签: xml xsd xml-namespaces

是否可以根据用于定义XML中使用的元素的模式来确定应在某些XML中指定哪些名称空间和模式?

鉴于这些模式:

需要哪些附加信息(如果有)来确定以下XML提取中提到的名称空间和模式 source

<?xml version="1.0" encoding="UTF-8"?>
<GovTalkMessage xsi:schemaLocation="http://www.govtalk.gov.uk/schemas/govtalk/govtalkheader http://xmlgw.companieshouse.gov.uk/v1-0/schema/Egov_ch.xsd"
    xmlns="http://www.govtalk.gov.uk/schemas/govtalk/govtalkheader"
    xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"
    xmlns:gt="http://www.govtalk.gov.uk/schemas/govtalk/core"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <EnvelopeVersion>1.0</EnvelopeVersion>
  <Header>
      [removed for brevity]
  </Header>
  <GovTalkDetails>
    <Keys />
  </GovTalkDetails>
  <Body>
    <NameSearchRequest xmlns="http://xmlgw.companieshouse.gov.uk/v1-0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlgw.companieshouse.gov.uk/v1-0/schema/NameSearch.xsd" >
        [removed for brevity]
    </NameSearchRequest>
  </Body>
</GovTalkMessage>


GovTalkMessage元素中,我理解xsi:schemaLocation的第二部分来自哪里,但我不确定是否可以从模式本身确定第一部分。

我不明白xmlnsGovTalkMessageNameSearchRequest值的来源。是在某处定义的吗?

xmlns:dsigxmlns:gt架构中提及GovTalkMessage,但xmlns:hd也是如此,我如何判断哪一个需要在上面的XML中提及哪个'吨?

为什么NameSearchRequest的{​​{1}}只有一个值?我认为该属性需要两个值,用空格分隔。

1 个答案:

答案 0 :(得分:1)

请在下面查看我的答案。

  

在GovTalkMessage元素中,我理解第二部分的位置   xsi:schemaLocation来自,但我不确定它是否可行   从模式本身确定第一部分。

xsi:schemaLocation的第一部分告诉架构所关联的命名空间。基本上,您使用名称空间http://www.govtalk.gov.uk/schemas/govtalk/govtalkheader作为位于http://xmlgw.companieshouse.gov.uk/v1-0/schema/Egov_ch.xsd的模式(对于xsi:schemaLocation中使用的任何模式,它始终是目标名称空间(请参阅targetNamespace属性)首先出现的架构,然后是位置)

  

我不明白xmlns值来自哪里   GovTalkMessage或NameSearchRequest。是在某处定义的吗?

xmlns是默认命名空间。如果元素不使用前缀限定,则元素属于默认命名空间。在这种情况下,元素GovTalkMessageNameSearchRequest属于您各自架构中xmlns属性引用的默认命名空间。

  

xmlns:dsig,xmlns:gt在GovTalkMessage架构中提到,但是   xmlns:hd也是如此,我该如何判断哪个需要在XML中提及   以上哪个不?

如果要在XML中使用由这些命名空间(xmlns:dsigxmlns:gtxmlns:hd,...)定义的元素或属性,您将声明这些命名空间。这就像在Java中声明对象引用并在程序的稍后阶段使用这些对象引用的属性。

  

为什么NameSearchRequest的xsi:schemaLocation只有一个值?一世   认为该属性需要两个值,用空格分隔。

如果您注意到架构http://xmlgw.companieshouse.gov.uk/v1-0/schema/NameSearch.xsd,它没有目标命名空间。这就是你没有命名空间但在这种情况下只是位置的原因。但是,您必须使用xsi:noNamespaceSchemaLocation而不是xsi:schemaLocation,否则xml解析器将抛出错误。 xsi:schemaLocation只需要“命名空间位置”对。