XSD: xs:entity 和 xs:entities -- 我的实体作为属性工作但作为元素失败

XSD: xs:entity and xs:entities -- my entity works as an attribute but fails as an element

我已经写了一个 XSD 和一个符合标准的 XML,现在想使用预定义的实体。问题是,一旦我使用 xs:entity 类型,我的 XML 元素就不再符合 XSD。我的实体属性工作正常,但元素损坏。

我有以下 XSD 的最小示例:

<xs:schema xmlns="http://www.w3.org/2001/XMLSchema"
 xmlns:xs="http://www.w3.org/2001/XMLSchema"    
 targetNamespace="http://www.example.com/xsdSimpleTypes"
 xmlns:st="http://www.example.com/xsdSimpleTypes">

  <xs:element name='simpleTypes' type="st:SimpleTypesType"/>

  <xs:complexType name="SimpleTypesType">
    <xs:sequence>
      <!-- string -->
      <xs:element name="test_ENTITIES" type="ENTITIES"/>
      <xs:element name="test_ENTITY" type="ENTITY"/>
    </xs:sequence>
    <xs:attribute use="required" name="test_ENTITIES" type="ENTITIES"/>
    <xs:attribute use="required" name="test_ENTITY" type="ENTITY"/>
  </xs:complexType>
</xs:schema>

和以下最小 XML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE schema [
<!ENTITY all_is_ok "all_is_ok">
]>
<st:simpleTypes xmlns:st="http://www.example.com/xsdSimpleTypes"
    test_ENTITIES="&all_is_ok;"
    test_ENTITY="&all_is_ok;">
    <test_ENTITIES>&all_is_ok;</test_ENTITIES>
    <test_ENTITY>&all_is_ok;</test_ENTITY>
</st:simpleTypes>

:: 当我根据 XSD 验证 xml 时,libxml 不喜欢这些元素,但属性没问题。 (当我更改属性内容时它也会中断,所以它正在验证它们:)


编辑: 我真的不想改变 xsd。我想让 XML 符合。我猜想通过更改值

您无需使用 xs:ENTITY 或 xs:ENTITIES 即可在角色内容中使用实体引用。实体被扩展,扩展的内容根据元素的声明类型进行检查,无论它是否使用 xs:ENTITY.

声明

实际上 xs:ENTITY 仅在值是 未解析实体 的名称时使用。我不知道它为什么接受您的属性值,因为您的 DTD 中没有未解析的实体 - 只有已解析的实体。