在 XML XSD 中定义递归代数数据类型

2024-01-01

想象一下我有一个递归代数数据类型 http://en.wikipedia.org/wiki/Algebraic_data_type像这样(Haskell 语法):

data Expr = Zero
          | One
          | Add Expr Expr
          | Mul Expr Expr

我想用 XML 来表示它,并且我想要它的 XSD 架构。

我已经弄清楚如何实现这个语法:

<Expr>
  <Add>
    <Expr>
      <Zero/>
    </Expr>
    <Expr>
      <Mul>
        <Expr>
          <One/>
        </Expr>
        <Expr>
          <Add>
            <Expr>
              <One/>
            </Expr>
            <Expr>
              <One/>
            </Expr>
          </Add>
        </Expr>
      </Mul>
    </Expr>
  </Add>
</Expr>

使用这个架构:

<xs:complexType name="Expr">
  <xs:choice minOccurs="1" maxOccurs="1">
    <xs:element minOccurs="1" maxOccurs="1" name="Zero" type="Zero" />
    <xs:element minOccurs="1" maxOccurs="1" name="One" type="One" />
    <xs:element minOccurs="1" maxOccurs="1" name="Add" type="Add" />
    <xs:element minOccurs="1" maxOccurs="1" name="Mul" type="Mul" />
  </xs:choice>
</xs:complexType>
<xs:complexType name="Zero">
  <xs:sequence>
  </xs:sequence>
</xs:complexType>
<xs:complexType name="One">
  <xs:sequence>
  </xs:sequence>
</xs:complexType>
<xs:complexType name="Add">
  <xs:sequence>
    <xs:element minOccurs="2" maxOccurs="2" name="Expr" type="Expr" />
  </xs:sequence>
</xs:complexType>
<xs:complexType name="Mul">
  <xs:sequence>
    <xs:element minOccurs="2" maxOccurs="2" name="Expr" type="Expr" />
  </xs:sequence>
</xs:complexType>

但我真正想要的是这样的语法:

<Add>
  <Zero/>
  <Mul>
    <One/>
    <Add>
      <One/>
      <One/>
    </Add>
  </Mul>
</Add>

这可能吗?

Thanks!


使用替换组:

  <xs:element name="Expr" abstract="true"/>

  <xs:element name="Zero" substitutionGroup="Expr">
    <xs:complexType/>
  </xs:element>

  <xs:element name="One" substitutionGroup="Expr">
    <xs:complexType/>
  </xs:element>

  <xs:element name="Add" substitutionGroup="Expr">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="2" maxOccurs="2" ref="Expr" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="Mul" substitutionGroup="Expr">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="2" maxOccurs="2" ref="Expr" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 XML XSD 中定义递归代数数据类型 的相关文章

  • magento 删除管理菜单项

    在magento中 是否可以删除管理中的菜单项 我有一个新模块 并将评论和评级拉到一个新部分 我不反对将它们也留在目录部分 但如果可能 并且干净 我想将其从那里删除 将下一行添加到扩展 config xml 文件
  • 在布局中添加空格

    我正在尝试在 android 中创建空行 这就是我一直在做的事情 android layout width fill parent android layout height wrap content android text n n 我想
  • 如何在 ASP.NET MVC 中将 XML 文件发送到客户端

    在 ASP NET MVC 中 我有一个数据库表 我想在某个视图页面上有一个按钮 如果某个用户单击该按钮 我的应用程序将生成包含数据库中所有行的 XML 文件 然后 应将包含 XML 的文件发送到客户端 以便用户看到下载弹出窗口 同样 我希
  • 通过API更新Twitter背景

    我在通过 Twitter 的 API 更新背景时遇到了一些问题 target url http www google com logos 11th birthday gif ch curl init curl setopt ch CURLO
  • 将 XML 数据提取到 php [重复]

    这个问题在这里已经有答案了 我正在尝试从 XML 文件中提取数据 http freegeoip net xml google com http freegeoip net xml google com 您可以看到该文件的内容类似于
  • xml 拉解析器资产 xml

    如何使用拉解析器解析资产文件夹中的本地 XML 文件 我无法让拉解析器工作 它总是抛出 io 异常 我想我无法获取文件的路径或连接到该文件 mixm 我正在尝试各种方法来从 资产 和 资源 加载本地文件 但要按要求回答您的问题 因为其他人似
  • 在 PHP 5 中使用 Schematron 验证 XML

    我在验证 XML 时遇到问题图解器 http en wikipedia org wiki Schematron 在我的代码中 我将 XML 和 XSL 作为 DOMDocument 对象加载 并尝试进行转换 domSche new DOMD
  • 如何使用 WSDL 和 XSD 的注释生成 .NET 类

    有一些 XSD 和 WSDL 我想从它们生成 C 代码 我使用了 svcutil exe 但它不会从 XSD 注释生成 XML 注释
  • 如何在 Go 中解组具有多个项目的简单 xml?

    我想从以下 xml 中获取人物 People 的一部分
  • 我想使用对话框显示两个数字选择器

    我试图仅使用 java 在对话框上显示两个数字选择器 代码正在工作 但我无法将其排列为相等的宽度 这是我的代码 RelativeLayout relative new RelativeLayout mContext final Number
  • 使用 MemoryStream 创建 Open XML 电子表格时的 Excel 和“不可读内容”

    使用 Open XML SDK v2 0 创建 Excel 电子表格时 我们的 Excel 输出最初可以成功运行几个月 最近Excel 所有版本 开始抱怨 Excel在 zot xlsx 中发现不可读的内容 是否要恢复此工作簿的内容 我们正
  • 在 XSD 中哪里放置版权信息?

    将版权信息放入 XML 架构定义 XSD 时 是否有官方 或半官方 普遍接受的 位置 基于在哪里将版本添加到 XSD 架构 https stackoverflow com questions 2138705 where to add a v
  • 为 XSD 中的元素指定命名空间

    我有一个 XML 需要为其生成 XSD 我的 XML 如下 实例
  • 有人可以推荐一个免费的 xslt 工具吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 解组转义 XML

    在 Go 中 我将如何解码此 XML 响应 我尝试过建立一个自定义UnMarshal方法在我的Answerstruct 但我运气不太好
  • 在线性布局内的 ScrollView 内并排对齐 TextView

    我有一个带有滚动视图的线性布局 我想保留它的当前格式 但只需将 textView2a 和 textView3a 并排放置 而不会破坏我当前的布局格式 我已经包含了我最近的尝试 但它们似乎不正确 提前致谢 Java菜鸟 当前有效的 XML
  • 更改 Windows Phone 系统托盘颜色

    有没有办法将 Windows Phone 上的系统托盘颜色从黑色更改为白色 我的应用程序有白色背景 所以我希望系统托盘也是白色的 您可以在页面 XAML 中执行此操作
  • 如何让 LinqToXSD 正确输出命名空间前缀声明?

    我正在尝试创建 XML 数据绑定类LinqToXSD http linqtoxsd codeplex com 以及包含许多导入模式的 XML 模式 所有的模式都是位于这里 http www spiraltechinc com Tmats 为
  • JavaFX 中的 fx:id 和 id: 有什么区别?

    也许是一个真正的新手的问题 我开始通过阅读以下教程在 FMXL 应用程序中使用场景生成器学习 JavaFX http docs oracle com javase 8 javafx get started tutorial fxml tut
  • 在 Java 中创建 XML 文件的最佳方法是什么?

    我们目前使用 dom4j 来创建 XML 文件 不过 我猜现在有更好的东西了 如果我们使用的是 Java 1 6 或更高版本 那么在编写 XML 文件时最好使用什么类 运行速度最快 使用简单 我不需要构建一个 DOM 然后编写整个 DOM

随机推荐

  • MySQL C# 连接字符串故障转移

    我知道我可以用逗号分隔连接字符串中的主机 它将使用不同的服务器 https www connectionstrings com mysql connector net mysqlconnection multiple servers htt
  • 是否可以仅在我的项目中使用 Django models 模块?

    我正在开发一个使用 Celery 的小型独立 python 应用程序 我使用 django 框架构建了这个 但我的应用程序只是后端 这意味着用户不需要访问我的网站 并且我的应用程序只是为了从 celery 接收任务队列并对数据库执行操作而构
  • 在哪里指定窗口组件的位置?

    我在 netBeans 平台中创建了模块 然后在那里创建了窗口组件 我想指定主窗口中的默认位置 例如职位 编辑 我在哪里可以做 在 NetBeans 7 下 从 输出 位置更改为 编辑器 位置 在您的 Window 类中 更改注释 TopC
  • 有哪些适合初学者的优秀 Erlang 入门/教程?

    有哪些可以深入了解 Erlang 和函数式编程的好链接 这可能值得一看http learnyousomeerlang com http learnyousomeerlang com
  • Xml 架构:空 targetNamespace

    在 Xml 架构中不使用 targetNamespace 属性或使用空属性是否合法 如果是这样 那么这意味着什么 我们是在 空命名空间 始终存在 中 添加 一些东西 还是创建一个与其他模式无关的 匿名命名空间 实例 xml 文档是什么样子的
  • 以编程方式创建的窗口居中

    我一直在使用这里的示例来创建一个自定义的无标题栏窗口 在 Mac OS X 上绘制自定义窗口 http cocoawithlove com 2008 12 drawing custom window on mac os x html 我发现
  • 使用 col-md-push-* 将列推到下一行

    我有以下 6 个构建模块 1 2 3 4 5 6 所有块在一行中都有一个 col sm 6 类 但由于块 3 超出了 bootstraps 12 列结构 它将跳转到下一行 完美就是我想要的 唯一的问题是 我想交换第 2 块和第 3 块 但它
  • Vue 3 不会检测到对 Vue 组件外部创建的对象所做的更改

    我有一个班级角色 Character ts This is called when server responds public setAttributeByType type StatsTypes value number void sw
  • 找不到实体类型属性的支持字段,并且该属性没有 getter

    我遇到了异常 System InvalidOperationException No backing field could be found for property ApartmentId of entity type Address
  • 从变量扩展环境变量

    我有一个看起来像这样的代码 my var MY FIRST ENV VAR 我的问题是 如何从环境变量 MY ENV VAR 中获取值 我已经尝试了很多东西 但主要问题是 my var 现在是一个字符串 我想这样做的原因是因为我有一些名称几
  • 将 Roslyn 编译的程序集加载到沙箱 ​​AppDomain 中

    我有一个代码片段 它使用脚本引擎编译脚本 并将程序集作为字节数组检索 现在我想加载这个Assembly在沙盒中 这就是我所拥有的 Assembly dynamicAssembly ScriptEngine engine Session se
  • 从 bash 脚本中生成并执行 R、Python 等脚本

    一段时间以来我一直在尝试寻找解决方案 但尚未找到令人满意的解决方案 我编写了很多 bash 脚本 但有时我想使用 R 或 Python 作为脚本的一部分 现在 我最终不得不编写两个脚本 原始的 bash 脚本执行前半部分任务 而 R 或 P
  • C/C++ 罕见关键字 - register、volatile、extern、explicit [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 您能否快速介绍一下这 4 个关键字的
  • 如何以编程方式获取 GC 类直方图

    我想以编程方式获得以下命令的相同结果 jcmd
  • wait-notify 和 CountDownLatch 之间的区别

    我需要一些帮助来了解使用 CountDownLatch 相对于传统等待通知的优势 我认为notifyAll 确实做了同样的事情 而且看起来更容易使用 可能是因为熟悉 另外 CountDownLatch 中的 wait 和 wait 有什么区
  • 如何将所有

    标签写入文本文件

    我需要编写 Qt C 代码来提取所有 p 标签 以将每个 p 标签写入 txt 文件 例如 如果我有以下 HTML 页面 h1 My First Heading h1 p My first paragraph p p My second p
  • 如何暂时禁用 MySQL 中的外键约束?

    是否可以暂时禁用 MySQL 中的约束 我有两个 Django 模型 每个模型都有另一个的外键 由于外键约束 删除模型的实例会返回错误 cursor execute DELETE FROM myapp item WHERE n s n tr
  • Maven 不会在复制依赖期间排除

    我有一个使用 Netty 4 0 29 的项目 并且我有另一个引入 netty 3 9 0 的依赖项 我添加了排除项 但当我运行复制依赖项时 它仍然在 3 9 0 中
  • Phoenix App 中预编译的单页应用程序

    我有一个预编译的 ember js 应用程序 其中 fronted js framework 在这里无关紧要 它基本上由一个带有 index html 文件的文件夹和一些 js css 资源组成 我将此文件夹放在我的 phoenix 应用程
  • 在 XML XSD 中定义递归代数数据类型

    想象一下我有一个递归代数数据类型 http en wikipedia org wiki Algebraic data type像这样 Haskell 语法 data Expr Zero One Add Expr Expr Mul Expr