IGraph使用实例——图属性设置2之GML或GraphML输出

news2024/11/24 12:27:23

 1 概述

1.1GML

        Graph Modeling Language (GML) 是一种用于描述图形结构的文本格式,它提供了为节点和边分配属性的灵活性。以下是关于GML的详细解释:
1)定义与用途:
        GML是一种通用的图形表示语言,常用于表示网络、图像、地图等复杂结构的数据。
        它允许用户为图中的顶点(节点)和边定义属性,这使得GML成为一种非常灵活的数据格式。
2)基本结构:
        GML文件通常包含一个graph元素作为根元素。
        graph元素内部可以包含node和edge元素,分别表示图中的节点和边。
        每个node元素可以包含多个属性,如id(节点ID)、label(节点标签)等。
        每个edge元素也可以包含多个属性,如source(起始节点ID)、target(目标节点ID)、label(边标签)等。
3)特性:
        灵活性:GML允许用户为节点和边定义任意数量的属性,这使得它非常适合用于表示复杂的网络数据集。
        简单性:GML是一种基于文本的格式,因此它非常易于阅读和编辑。
        可扩展性:由于GML是基于XML的,因此它可以轻松地与现有的XML工具和技术进行集成。
4)应用:
        GML在地理信息系统(GIS)中常被用作表示地理空间信息的格式。
        在社交网络分析、生物信息学等领域,GML也被广泛用于表示和分析复杂网络数据。


1.2 GraphML

        GraphML是一种用于表示图形结构的XML格式,它特别适用于描述节点(或顶点)和边(或链接)之间的关系,以及这些元素上的属性。以下是关于GraphML的详细解释:
1)定义与用途:
        GraphML是图形建模语言(Graph Modeling Language)的缩写,它是一种通用的图形交换格式,设计用于描述复杂的图形结构。
        它允许用户定义图形中的节点、边以及它们的属性,使得图形数据可以以一种标准且易于理解的方式进行存储和交换。
2)基本结构:
        GraphML文件通常包含一个或多个graph元素,每个graph元素代表一个图形。
        在graph元素内部,可以包含node和edge元素,分别代表图形中的节点和边。
        node和edge元素可以包含多个属性,用于描述节点和边的特性,如id(唯一标识符)、label(标签)等。
3)特性:
        灵活性:GraphML允许用户为节点和边定义任意数量的属性,并且支持自定义的数据类型。这使得GraphML成为一种非常灵活且可扩展的图形交换格式。
        可读性:由于GraphML是基于XML的,因此它具有良好的可读性和可编辑性。用户可以使用文本编辑器直接查看和修改GraphML文件。
        支持多种图形类型:GraphML支持有向图、无向图、混合图等多种图形类型,并且支持超图、层次图等复杂图形结构。
        丰富的扩展机制:GraphML提供了丰富的扩展机制,允许用户添加自定义的元素和属性,以满足特定的应用需求。
4)应用:
        GraphML广泛应用于图形分析、社交网络分析、生物信息学等领域。在这些领域中,图形数据通常以节点和边的形式表示,GraphML提供了一种方便的方式来存储、交换和分析这些数据。
支持GraphML格式的软件有很多,如yEd、Tulip、Gephi等,这些软件可以帮助用户创建、编辑和可视化GraphML文件。

        虽然GML(Graph Modelling Language)和GraphML都是用于描述图形结构的语言,但它们在语法和用途上有所不同。GML更侧重于图形的建模和表示,而GraphML则更侧重于图形的交换和存储。GraphML在可读性和可扩展性方面优于GML,因为它基于XML标准,具有更好的语法结构和扩展机制。

2 运行环境

操作系统:win10 64位

编程语言:C/C++

编译平台:vs2019  x64 debug | release

igraph版本: 0.10.12

3 示例代码

这段代码的主要作用是使用 igraph 库来创建一个图(具体为“Petersen”图),为该图及其顶点和边设置一些属性,然后将这些图以GML和GraphML格式写入标准输出。

#include <igraph.h> // 引入igraph库,这是一个广泛使用的网络分析库  
  
int main(void) {  
  
    igraph_t g; // 定义一个igraph_t类型的变量g,用于存储图  
    igraph_vector_t y; // 定义一个igraph_vector_t类型的变量y,用于存储顶点或边的ID  
    igraph_warning_handler_t* oldwarnhandler; // 定义一个指向igraph_warning_handler_t的指针,用于保存原始的警告处理函数  
  
    /* 开启属性处理。 */  
    igraph_set_attribute_table(&igraph_cattribute_table); // 设置igraph使用C语言的属性表  
  
    /* 创建一个图,添加一些属性,并将其保存为GraphML文件。 */  
  
    // 创建"Petersen"图  
    igraph_famous(&g, "Petersen");   
  
    // 为图设置属性  
    SETGAS(&g, "name", "Petersen's graph"); // 设置图的"name"属性为"Petersen's graph"  
    SETGAN(&g, "vertices", igraph_vcount(&g)); // 设置图的"vertices"属性为图的顶点数  
    SETGAN(&g, "edges", igraph_ecount(&g)); // 设置图的"edges"属性为图的边数  
    SETGAB(&g, "famous", true); // 设置图的"famous"属性为true  
  
    // 为图的每个顶点创建一个ID属性,ID从1到顶点数  
    igraph_vector_init_range(&y, 1, igraph_vcount(&g) + 1);   
    SETVANV(&g, "id", &y); // 为图的每个顶点设置"id"属性,使用y中的值  
    igraph_vector_destroy(&y); // 销毁y向量,释放内存  
  
    // 为特定的顶点设置属性  
    SETVAS(&g, "name", 0, "foo"); // 设置第一个顶点的"name"属性为"foo"  
    SETVAS(&g, "name", 1, "foobar"); // 设置第二个顶点的"name"属性为"foobar"  
  
    SETVAB(&g, "is_first", 0, true); // 设置第一个顶点的"is_first"属性为true  
  
    // 为图的每条边创建一个ID属性,ID从1到边数  
    igraph_vector_init_range(&y, 1, igraph_ecount(&g) + 1);   
    SETEANV(&g, "id", &y); // 为图的每条边设置"id"属性,使用y中的值  
    igraph_vector_destroy(&y); // 销毁y向量,释放内存  
  
    // 为特定的边设置属性  
    SETEAS(&g, "name", 0, "FOO"); // 设置第一条边的"name"属性为"FOO"  
    SETEAS(&g, "name", 1, "FOOBAR"); // 设置第二条边的"name"属性为"FOOBAR"  
  
    SETEAB(&g, "is_first", 0, true); // 设置第一条边的"is_first"属性为true  
  
    /* 暂时关闭警告处理函数,因为GML写入器可能会因为布尔属性被转换为数字而发出警告,但我们不关心这些警告。 */  
    oldwarnhandler = igraph_set_warning_handler(igraph_warning_handler_ignore); // 保存原始警告处理函数并设置新的警告处理函数为忽略警告  
  
    // 将图以GML格式写入标准输出  
    igraph_write_graph_gml(&g, stdout, IGRAPH_WRITE_GML_DEFAULT_SW, 0, "");  
  
    // 恢复原始的警告处理函数  
    igraph_set_warning_handler(oldwarnhandler);  
  
    // 将图以GraphML格式写入标准输出,并包含属性的前缀  
    igraph_write_graph_graphml(&g, stdout, /*prefixattr=*/ true);  
  
    // 销毁图,释放其占用的内存  
    igraph_destroy(&g);  
  
    return 0;  
}

4 运行结果

图1 GML输出

图1 GraphML输出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1794156.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

个人笔记-python生成gif

使用文件的修改时间戳进行排序 import os import re import imageio# 设置图片所在的文件夹路径 folder_path /home/czy/ACode/AMAW_20240219/9.3.x(Discrete_time_marching&#xff09;/9.3.17.11.1(Disc_concessive_CH_ZJ)/current_figures # 文件夹路径&#xff1b;linux…

Mysql疑难报错排查 - Field ‘XXX‘ doesn‘t have a default value

项目场景&#xff1a; 数据库环境 &#xff1a;mysql8; 工程使用&#xff1a;MyBatisPlus 表情况&#xff1a; 问题描述 某一个插入语句使用了 MyBatisPlus 的 save 方法&#xff0c;因为end_time1 end_time2都并没有值&#xff0c;所以在MyBatisPlus默认情况下&#xff0c;…

kafka-消费者-指定offset消费(SpringBoot整合Kafka)

文章目录 1、指定offset消费1.1、创建消费者监听器‘1.2、application.yml配置1.3、使用 Java代码 创建 主题 my_topic1 并建立3个分区并给每个分区建立3个副本1.4、创建生产者发送消息1.4.1、分区0中的数据 1.5、创建SpringBoot启动类1.6、屏蔽 kafka debug 日志 logback.xml1…

视频汇聚平台EasyCVR对接GA/T 1400视图库:结构化数据(人员/人脸、车辆、物品)对象XMLSchema描述

在信息化浪潮席卷全球的背景下&#xff0c;公安信息化建设日益成为提升社会治理能力和维护社会稳定的关键手段。其中&#xff0c;GA/T 1400标准作为公安视频图像信息应用系统的核心规范&#xff0c;以其结构化数据处理与应用能力&#xff0c;为公安信息化建设注入了强大的动力。…

精妙无比的App UI 风格

精妙无比的App UI 风格

BERT+PET方式模型训练

基于BERTPET方式文本分类模型搭建 模型搭建 本项目中完成BERTPET模型搭建、训练及应用的步骤如下&#xff08;注意&#xff1a;因为本项目中使用的是BERT预训练模型&#xff0c;所以直接加载即可&#xff0c;无需重复搭建模型架构&#xff09;: 一、实现模型工具类函数二、实现…

RAG检索增强生成(1)-大语言模型的外挂数据库

Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks Lewis P, Perez E, Piktus A, et al. Retrieval-augmented generation for knowledge-intensive nlp tasks[J]. Advances in Neural Information Processing Systems, 2020, 33: 9459-9474. RAG结合了信息检…

AI绘画揽活新中式室内设计,能不能让你一见“粽”情?

端午节即将来临&#xff0c;计划节前完成的图赶出来了吗?别着急&#xff0c;可以找个AI绘画工具做帮手&#xff0c;让你在短时间内完成高质量的设计。 恰逢端午佳节&#xff0c;相比其他装修风格&#xff0c;新中式显然与端午节更般配&#xff0c;那么我们就用AI绘画的新中式风…

趣测小程序开发搭建,趣测趣玩小程序是何物?

一、趣测小程序简介 趣测趣玩小程序是一款提供趣味测试和玩乐功能的应用程序。用户可以通过该小程序参与各种有趣的测试&#xff0c;这些测试可能涵盖性格、情感、智力等多个方面&#xff0c;旨在为用户提供轻松愉快的体验。同时&#xff0c;该小程序还可能包含一些游戏元素&a…

实战项目《负载均衡在线OJ系统》

一、项目灵感来源 在日常做题的过程中&#xff0c;我们总会去力扣和牛客网上去做题&#xff0c;但是从来没有想过网站是如何加载给用户的&#xff0c;以及在提交代码时&#xff0c;是如何得知我们的代码是否正确。基于这样的原因&#xff0c;也是学习到一定程度的知识后&#x…

ar地产沙盘互动体验提供更加丰富多彩的楼盘信息

AR增强现实技术作为其重要分支&#xff0c;正逐步在全球市场中崭露头角。国内的AR增强现实技术公司正致力于链接物理世界和虚拟世界&#xff0c;为用户带来沉浸式的AR体验。它们打造线上线下联动的一站式文旅景区数字化运营平台&#xff0c;让您在享受旅游的同时&#xff0c;也…

爬虫(没)入门:用 node-crawler 爬取 blog

起因 前几天想给一个项目加 eslint&#xff0c;记得自己曾经在博客里写过相关内容&#xff0c;所以来搜索。但是发现 csdn 的只能按标题&#xff0c;没办法搜正文&#xff0c;所以我没搜到自己想要的内容。 没办法只能自己又重新折腾了一通 eslint&#xff0c;很烦躁。迁怒于…

新手上路:Linux虚拟机创建与Hadoop集群配置指南①(未完)

一、基础阶段 Linux操作系统: 创建虚拟机 1.创建虚拟机 打开VM,点击文件,新建虚拟机,点击自定义,下一步 下一步 这里可以选择安装程序光盘映像文件,我选择稍后安装 选择linux系统 位置不选C盘,创建一个新的文件夹VM来放置虚拟机,将虚拟机名字改为master方便后续识别…

AI框架之Spring AI与Spring Cloud Alibaba AI使用讲解

文章目录 1 AI框架1.1 Spring AI 简介1.2 Spring AI 使用1.2.1 pom.xml1.2.2 可实现的功能 1.3 Spring Cloud Alibaba AI1.4 Spring Cloud Alibaba AI 实践操作1.4.1 pom.xml1.4.2 配置文件1.4.3 对接文本模型1.4.4 文生图模型1.4.5 语音合成模型 1 AI框架 1.1 Spring AI 简介…

什么是APP加固?

APP加固是一系列技术手段的集合&#xff0c;旨在提升移动应用程序的安全性&#xff0c;保护其免受各种攻击和威胁。加固技术可以对应用程序的代码、数据、运行环境等多个方面进行保护&#xff0c;从而提高应用的整体安全性和韧性。 常见的APP加固技术 代码混淆&#xff1a; 代码…

Ubuntu系统本地搭建WordPress网站并发布公网实现远程访问

文章目录 前言1. 搭建网站&#xff1a;安装WordPress2. 搭建网站&#xff1a;创建WordPress数据库3. 搭建网站&#xff1a;安装相对URL插件4. 搭建网站&#xff1a;内网穿透发布网站4.1 命令行方式&#xff1a;4.2. 配置wordpress公网地址 5. 固定WordPress公网地址5.1. 固定地…

java中事务中遇到锁会造成什么问题,以及该如何解决?

在spring中实现事务有多种方式&#xff0c;主要是两种&#xff1a;一种是声明式事务&#xff0c;一种是编程式事务&#xff0c;今天我们就讲声明式事务中的一种&#xff0c;使用注解Transactional&#xff0c;这个注解的作用就是帮助我们在代码执行完毕之后自动提交事务&#x…

Coolmuster Android助手评测:简化Android到电脑的联系人传输

产品概述 Coolmuster Android助手是一款旨在简化Android设备与计算机之间数据管理和传输过程的全面工具。它以用户友好的界面和全面的功能&#xff0c;成为寻求高效数据管理解决方案的Android用户的热门选择。 主要特点和功能Coolmuster Android助手拥有一系列使其成为管理Andr…

优思学院|谈汽车零部件企业生产精益及现场管理

精益生产&#xff08;Lean Production&#xff09;和现场管理作为现代制造企业的核心管理理念&#xff0c;正在越来越多的企业中得到应用。尤其是在中国&#xff0c;许多汽车零部件企业通过精益管理和六西格玛方法&#xff0c;显著提高了生产效率&#xff0c;降低了生产成本&am…

白酒:茅台镇白酒的地域特色与环境优势

茅台镇&#xff0c;位于中国贵州省仁怀市&#xff0c;因其与众不同的自然环境和酿酒工艺而成为世界著名的白酒产区。作为茅台镇的品牌&#xff0c;云仓酒庄豪迈白酒以其卓着的品质和口感赢得了广大消费者的喜爱。而这一切&#xff0c;都离不开茅台镇的地域特色和环境优势。 茅台…