gpt4 book ai didi

xml - targetNamespace 有什么作用?我做对了吗?

转载 作者:数据小太阳 更新时间:2023-10-29 02:22:12 24 4
gpt4 key购买 nike

这是 <schema>我的 XSD 的标签:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.cmu.edu/ns/blank"
targetNamespace="http://www.cmu.edu/ns/blank"
elementFormDefault="qualified">

如果我的理解是正确的,这就是它的意思:

  • 这个模式本身属于 http://www.w3.org/2001/XMLSchema命名空间
  • XML 实例的根应该属于 http://www.cmu.edu/ns/blank命名空间
  • XML 实例中所有没有前缀的元素自动属于http://www.cmu.edu/ns/blank命名空间为 elementFormDefault 合格
  • 问题1:我的理解对吗?如果不是,出了什么问题?

    问题 2 查看下面提到的 XML 实例:

    <people
    xmlns="http://www.cmu.edu/ns/blank"
    xmlns:xsi="http://www.w3c.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.cmu.edu/ns/blank student.xsd"
    >
    <student>
    <name>John</name>
    <course>Computer Technology</course>
    <semester>6</semester>
    <scheme>E</scheme>
    </student>
    </people>

    这里一切都属于http://www.cmu.edu/ns/blank命名空间包括 <student>以及因为 elementFormDefault 中包含的元素. 正确吗?

    问题3
    现在,我想添加 <student>来自各个大学。带有像 berk 这样的前缀对于伯克利,harv哈佛大学等每个<student>内部有一组不同的元素。我想验证这一点。 这怎么可能?

    最佳答案

    (1)前两点OK;第三个:

    XML 实例中没有前缀的所有元素自动属于 http://www.cmu.edu/ns/blank 命名空间,因为 elementFormDefault 是合格的

    不正确。

    在架构中声明前缀并不意味着 XML 实例必须使用相同的前缀。 XSD 文件中的任何 namespace 声明仅适用于 XSD 的 XML 文件(XSD 是 XML,因此...)

    一般来说,没有办法假设任何有前缀或无前缀的元素名称;即下面的例子都是正确的。

    <some xmlns="" .../>
    <some xmlns="urn:tempuri-org:XSD:1" .../>
    <x:some xmlns:x="urn:tempuri-org:XSD:1" .../>

    唯一确定的是,表示非限定名称的唯一方法是通过不带前缀的名称(即不能为“空”命名空间添加前缀)。

    elementFormDefault 控制元素名称的形式,当元素在内容模型中声明时(即不是全局的)。

    (2) 部分正确。 因为 elementFormDefault. 部分不正确。同样,XSD 只是一种模式规范; XML 存在并有自己的规则,与 XSD 或任何其他模式语言无关。此处适用的规则是 XML namespaces 的规则。 , 具体来说 scoping .

    (3) 您必须为每个命名空间创建一个 XSD;在每个 namespace 中,您声明学生及其内容。然后定义人员的 XSD 将导入其他 XSD 并适本地引用学生。

    所以这是一个基本设置:

    伯克利.xsd

    <?xml version="1.0" encoding="utf-8" ?>
    <!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
    <xsd:schema targetNamespace="urn:berkeley-org" xmlns="urn:berkeley-org" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="student"/>
    </xsd:schema>

    哈佛.xsd

    <?xml version="1.0" encoding="utf-8" ?>
    <!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
    <xsd:schema targetNamespace="urn:harvard-org" xmlns="urn:harvard-org" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="student"/>
    </xsd:schema>

    人.xsd

    <?xml version="1.0" encoding="utf-8" ?>
    <!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
    <xsd:schema targetNamespace="urn:people-org" xmlns="urn:people-org" xmlns:harv="urn:harvard-org" xmlns:berk="urn:berkeley-org" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:import namespace="urn:harvard-org" schemaLocation="harvard.xsd"/>
    <xsd:import namespace="urn:berkeley-org" schemaLocation="berkeley.xsd"/>

    <xsd:element name="people">
    <xsd:complexType>
    <xsd:choice maxOccurs="unbounded">
    <xsd:element ref="harv:student"/>
    <xsd:element ref="berk:student"/>
    </xsd:choice>
    </xsd:complexType>
    </xsd:element>
    </xsd:schema>

    文件图:

    enter image description here

    示例 XML(显示 namespace 的使用):

    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
    <people xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:harv="urn:harvard-org" xmlns:berk="urn:berkeley-org" xmlns="urn:people-org">
    <harv:student/>
    <berk:student/>
    </people>

    enter image description here

    关于xml - targetNamespace 有什么作用?我做对了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16481870/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com