Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 我可以通过其ID引用XSD类型吗?_Xml_Xsd - Fatal编程技术网

Xml 我可以通过其ID引用XSD类型吗?

Xml 我可以通过其ID引用XSD类型吗?,xml,xsd,Xml,Xsd,看起来XSD中的每个标记都有一个可选的ID属性,可以指定它,但这有什么意义呢?我想通过使用它来引用一个类型,但我不确定这是否可行 通常有人会用这个名字 <xsd:simpleType name="myType" id="1"> <xsd:restriction base="xsd:string/> </xsd:simpleType> <xsd:complexType name="myDerivedType> <xsd:simpleT

看起来XSD中的每个标记都有一个可选的ID属性,可以指定它,但这有什么意义呢?我想通过使用它来引用一个类型,但我不确定这是否可行

通常有人会用这个名字

<xsd:simpleType name="myType" id="1">
  <xsd:restriction base="xsd:string/>
</xsd:simpleType>

<xsd:complexType name="myDerivedType>
  <xsd:simpleType ref="myType"/>
</xsd:complexType>

相反,我想用这个:

<xsd:simpleType name="myType" id="1">
  <xsd:restriction base="xsd:string/>
</xsd:simpleType>

<xsd:complexType name="myDerivedType>
  <xsd:simpleType refById="1"/>
</xsd:complexType>

让它仍然有同样的效果。本质上,我想要引用简单类型的两种方法之一。有没有办法做到这一点?

如果
id
属性
id
属性有助于在URI中使用缩写形式或简写XPointer作为片段标识符:

模式组件(如类型定义和元素声明)的名称不是类型ID:它们在模式中不是唯一的,只是在符号空间中。这意味着简单的片段标识符并不总是能够从模式文档的上下文之外引用模式组件

[……]

  id = ID
  ref = QName
  substitutionGroup = QName
  type = QName
在某些情况下,也可以使用短格式片段标识符,即当DTD或XML模式可用于所讨论的模式时,并且已经利用了为所有主要和次要模式组件的表示提供
id
属性(类型为id)

片段标识符是uri的一部分(例如
https://www.example.com/#fragment-标识符
)-处理方式取决于介质类型:

因此,片段的格式和分辨率是 取决于可能检索到的文件的媒体类型[RFC2046] 表示,即使仅当 URI被取消引用

对于XML,片段标识符是XPointers:

XML媒体片段标识符的语法和语义 本规范中定义的类型基于 [XPointerFramework]W3C建议

XPointer框架指定的速记指针如下:

简写指针,以前称为裸名,仅由一个NCName组成。它最多标识资源信息集中的一个元素;具体地说,文档顺序中的第一个(如果有)具有匹配的NCName作为标识符。元素的标识符确定如下:

  • 如果元素信息项在其[attributes]中有一个属性信息项,该属性信息项是由模式确定的ID,则它由该属性信息项的[schema normalized value]属性的值标识 应该注意的是,XSD ID类型(
    xs:ID
    )和具有此类型的
    ID
    属性不是数字,并且您在示例中使用的值(
    1
    )对于
    ID
    属性无效:

    (模式第2部分:数据类型>3.3.8 ID)[

    [定义:ID表示[XML 1.0(第二版)]中的ID属性类型。ID的·值空间·是与[XML中的名称空间]中的NCName产品相匹配的所有字符串的集合。ID的·词法空间·是与[XML中的名称空间]中的NCName产品相匹配的所有字符串的集合.ID的基类型是NCName

    通过
    id
    无法通过XSD本身中的
    id
    引用其他XSD组件(包括XSD类型)。XSD中指定的引用其他架构组件的唯一语义是通过QName。例如:

    QName在XML模式中定义如下:

    [定义:]QName表示XML限定名称。QName的·值空间·是元组{名称空间名称,本地部分}的集合,其中名称空间名称是anyURI,本地部分是NCName。QName的·词法空间·是与[XML中的名称空间]的QName产品相匹配的字符串集

    注意:QName的·词法空间·中的文字与·值空间·中的值之间的映射要求命名空间声明位于使用QName的上下文的范围内

    将QName解析为架构组件的过程定义为:

    模式表示约束:QName解析(模式文档) 对于·QName·要解析为指定类型的架构组件,必须满足以下所有条件:

    [……]

      id = ID
    
      ref = QName
      substitutionGroup = QName
      type = QName
    
    2组件的{name}与·QName·的·local name·匹配

    [……]

      id = ID
    
      ref = QName
      substitutionGroup = QName
      type = QName
    
    {name}是指组件的
    name
    属性:

    {name}
    名称
    [属性]的实际值

    {name}
    名称
    [属性]的实际值

    {name}如果存在,
    名称
    [属性]的实际值,否则不存在

    总之,XSD中引用其他模式组件的唯一语义是使用它们的名称