<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>lewis</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://lewisbyte.github.io/</id>
  <link href="https://lewisbyte.github.io/" rel="alternate"/>
  <link href="https://lewisbyte.github.io/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, lewis</rights>
  <title>保持好奇心</title>
  <updated>2026-04-10T07:52:27.279Z</updated>
  <entry>
    <author>
      <name>lewis</name>
    </author>
    <category term="图数据库" scheme="https://lewisbyte.github.io/tags/%E5%9B%BE%E6%95%B0%E6%8D%AE%E5%BA%93/"/>
    <content>
      <![CDATA[<h2 id="概述"><a href="#概述" class="headerlink" title="概述"></a>概述</h2><h2 id="图数据"><a href="#图数据" class="headerlink" title="图数据"></a>图数据</h2><h2 id="图本体（强、弱schema）"><a href="#图本体（强、弱schema）" class="headerlink" title="图本体（强、弱schema）"></a>图本体（强、弱schema）</h2><h2 id="BIBFRAME的特殊性"><a href="#BIBFRAME的特殊性" class="headerlink" title="BIBFRAME的特殊性"></a>BIBFRAME的特殊性</h2><h2 id="图数据保存BIBFRAME-RDF的困难挑战"><a href="#图数据保存BIBFRAME-RDF的困难挑战" class="headerlink" title="图数据保存BIBFRAME-RDF的困难挑战"></a>图数据保存BIBFRAME-RDF的困难挑战</h2><h2 id="图数据的运营成本"><a href="#图数据的运营成本" class="headerlink" title="图数据的运营成本"></a>图数据的运营成本</h2><h2 id="国产化"><a href="#国产化" class="headerlink" title="国产化"></a>国产化</h2><h2 id="强schema、弱schema"><a href="#强schema、弱schema" class="headerlink" title="强schema、弱schema"></a>强schema、弱schema</h2><h2 id="选型对比清单"><a href="#选型对比清单" class="headerlink" title="选型对比清单"></a>选型对比清单</h2>]]>
    </content>
    <id>https://lewisbyte.github.io/2026/04/10/20260410/</id>
    <link href="https://lewisbyte.github.io/2026/04/10/20260410/"/>
    <published>2026-04-10T07:47:25.000Z</published>
    <summary>
      <![CDATA[<h2 id="概述"><a href="#概述" class="headerlink" title="概述"></a>概述</h2><h2 id="图数据"><a href="#图数据" class="headerlink" title="图数据"></a>图数据</h2><h]]>
    </summary>
    <title>BIBFRAME书目框架与图数据库选型</title>
    <updated>2026-04-10T07:52:27.279Z</updated>
  </entry>
  <entry>
    <author>
      <name>lewis</name>
    </author>
    <category term="BIBFRAME" scheme="https://lewisbyte.github.io/tags/BIBFRAME/"/>
    <content>
      <![CDATA[<h2 id="BIBFRAME-总览"><a href="#BIBFRAME-总览" class="headerlink" title="BIBFRAME 总览"></a>BIBFRAME 总览</h2><ul><li>美国国会图书馆基于BIBFRAME编目，开源了很多相关生态的基础组件，我在这里梳理、总结一下整个美国国会图书馆的开源组件生态，尝试将主要的开源组件把玩一下，测试一下其组件基础的能力，并尝试集成一下各组件，验证能否形成一个完整的业务生态闭环。</li></ul><h3 id="BIBFRAME编辑器"><a href="#BIBFRAME编辑器" class="headerlink" title="BIBFRAME编辑器"></a>BIBFRAME编辑器</h3><ul><li>源码地址：<a href="https://github.com/lcnetdev/marva-quartz">https://github.com/lcnetdev/marva-quartz</a></li></ul><h4 id="使用方法："><a href="#使用方法：" class="headerlink" title="使用方法："></a>使用方法：</h4><ul><li><ol><li>执行以下shell脚本，编译运行</li></ol></li></ul><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">clone</span> https://github.com/lcnetdev/marva-quartz.git</span><br><span class="line"><span class="built_in">cd</span> marva-quartz</span><br><span class="line">npm install</span><br><span class="line">npm run dev-external</span><br></pre></td></tr></table></figure><ul><li><ol start="2"><li>本地访问：<a href="http://localhost:4444/bfe2/quartz/">http://localhost:4444/bfe2/quartz/</a></li></ol></li></ul><h3 id="编辑器后端服务"><a href="#编辑器后端服务" class="headerlink" title="编辑器后端服务"></a>编辑器后端服务</h3><ul><li>地址：ttps:&#x2F;&#x2F;github.com&#x2F;lcnetdev&#x2F;marva-backend</li></ul><h4 id="核心后端服务组件"><a href="#核心后端服务组件" class="headerlink" title="核心后端服务组件"></a>核心后端服务组件</h4><ol><li><p><strong><code>util</code></strong> (Util Service)</p><ul><li><strong>角色</strong>: <strong>业务管家</strong></li><li><strong>功能</strong>:<ul><li>不仅是“胶水层”，它更像是整个应用的大脑。</li><li>负责处理复杂的业务动作，比如“发布”（将数据从暂存区推送到正式区或外部系统）。</li><li>提供辅助功能，如 MARC 格式预览、Git 数据同步。</li></ul></li><li><strong>关键点</strong>: 它直接连接数据库，并协调其他服务。</li></ul></li><li><p><strong><code>ldpjs-staging</code></strong> (Staging Data Service)</p><ul><li><strong>角色</strong>: <strong>草稿箱存储服务</strong></li><li><strong>功能</strong>:<ul><li>专门负责存储<strong>正在编辑中、未完成</strong>的编目数据。</li><li>数据存放在 <code>resourcesStaging</code> 集合中。</li><li>允许频繁的读写操作，主要服务于编辑器的“保存草稿”功能。</li></ul></li></ul></li><li><p><strong><code>ldpjs-production</code></strong> (Production Data Service)</p><ul><li><strong>角色</strong>: <strong>正式库存储服务</strong></li><li><strong>功能</strong>:<ul><li>专门负责存储<strong>已发布、生效</strong>的编目数据。</li><li>数据存放在 <code>resourcesProduction</code> 集合中。</li><li>作为数据的“最终归宿”，供查询和对外发布使用。</li></ul></li></ul></li><li><p><strong><code>scriptshifter</code></strong> (Translation Service)</p><ul><li><strong>角色</strong>: <strong>多语言转写助手</strong></li><li><strong>功能</strong>:<ul><li>在编目过程中，实时将非拉丁语系文字（如中文标题）转写为拉丁字母拼音。</li><li>是一个纯粹的工具服务，无状态。</li></ul></li></ul></li><li><p><strong><code>dctap-dancer</code></strong> (Profile Editor Backend)</p><ul><li><strong>角色</strong>: <strong>规则模板管理器</strong></li><li><strong>功能</strong>:<ul><li>管理“编目规则”（Profile）。</li><li>编目员通过它来定义：在录入某类书时，哪些字段是必填的，哪些字段需要下拉菜单。</li><li>这些规则定义了 <code>ldpjs</code> 中数据的形状。</li></ul></li></ul></li><li><p><strong><code>database</code></strong> (MongoDB)</p><ul><li><strong>角色</strong>: <strong>数据中心</strong></li><li><strong>功能</strong>:<ul><li>物理存储所有数据，包括：草稿数据 (<code>resourcesStaging</code>)、正式数据 (<code>resourcesProduction</code>)、用户信息、配置信息等。</li></ul></li></ul></li><li><p><strong><code>reverse</code></strong> (Nginx Gateway)</p><ul><li><strong>角色</strong>: <strong>前台接待</strong></li><li><strong>功能</strong>:<ul><li>统一入口，根据请求类型将用户引导到不同的服务窗口（是存草稿？还是查正式记录？还是修改模板？）。</li></ul></li></ul></li></ol><h4 id="组件关系图解"><a href="#组件关系图解" class="headerlink" title="组件关系图解"></a>组件关系图解</h4><p><img src="/2026/02/03/20260203/01.png" alt="flow-chart"></p><h4 id="详细启动步骤："><a href="#详细启动步骤：" class="headerlink" title="详细启动步骤："></a>详细启动步骤：</h4><p><strong>步骤一：初始化代码仓库</strong><br>由于项目依赖多个 Git 子模块 (<code>ldpjs</code>, <code>scriptshifter</code>, <code>dctap-dancer</code>)，首次启动前必须初始化它们，否则构建会失败。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git submodule update --init --recursive</span><br></pre></td></tr></table></figure><p><strong>步骤二：配置环境变量 (.env)</strong><br>项目根目录缺少 <code>.env</code> 文件，这是启动必须的。请在项目根目录 (<code>d:\repo\marva-backend\</code>) 创建一个名为 <code>.env</code> 的文件，并填入以下配置（根据 <code>server.js</code> 和 <code>docker-compose.yml</code> 分析得出）：</p><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># --- 数据库配置 ---</span></span><br><span class="line"><span class="comment"># MongoDB 内部连接使用，通常不需要修改</span></span><br><span class="line">MONGO_INITDB_DATABASE=bfe2</span><br><span class="line"></span><br><span class="line"><span class="comment"># --- 外部服务认证 (MarkLogic / API) ---</span></span><br><span class="line"><span class="comment"># 请根据实际情况填写，本地开发如果无真实服务可尝试填入占位符</span></span><br><span class="line">MLUSER=your_ml_user</span><br><span class="line">MLPASS=your_ml_password</span><br><span class="line">MLUSERSTAGE=your_stage_user</span><br><span class="line">MLPASSSTAGE=your_stage_password</span><br><span class="line"></span><br><span class="line"><span class="comment"># --- 服务 URL 配置 ---</span></span><br><span class="line">STAGINGPOSTURL=http://example.com/stage/post</span><br><span class="line">PRODUCTIONPOSTURL=http://example.com/prod/post</span><br><span class="line">STAGGINGccURL=http://example.com/stage/cc</span><br><span class="line">PRODUCTIONccURL=http://example.com/prod/cc</span><br><span class="line">VALIDATIONURL=http://example.com/validate</span><br><span class="line"></span><br><span class="line"><span class="comment"># --- NACO 服务存根 ---</span></span><br><span class="line">STAGINGNACOSTUB=http://example.com/stage/naco</span><br><span class="line">PRODUCTIONNACOSTUB=http://example.com/prod/naco</span><br><span class="line"></span><br><span class="line"><span class="comment"># --- WorldCat OAuth 配置 ---</span></span><br><span class="line">WC_CLIENTID=your_worldcat_client_id</span><br><span class="line">WC_SECRET=your_worldcat_secret</span><br><span class="line"></span><br><span class="line"><span class="comment"># --- 功能开关 ---</span></span><br><span class="line">LCAP_SYNC=<span class="literal">false</span></span><br><span class="line">RECORD_HISTORY=<span class="literal">true</span></span><br><span class="line">BFORGMODE=<span class="literal">false</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># --- Scriptshifter 配置 ---</span></span><br><span class="line">TXL_FLASK_SECRET=1234567890</span><br></pre></td></tr></table></figure><blockquote><p><strong>注意</strong>：上述 <code>your_...</code> 和 <code>http://example.com/...</code> 是占位符。如果您没有真实的后端凭据，本地启动可能无法连接外部 API，但容器本身应该能成功运行。</p></blockquote><p><strong>步骤三：启动服务</strong><br>在项目根目录下运行 Docker Compose 命令构建并启动所有服务：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker-compose up --build -d</span><br></pre></td></tr></table></figure><ul><li><code>--build</code>: 强制重新构建镜像（确保子模块代码被正确打包）。</li><li><code>-d</code>: 后台运行。</li></ul><h4 id="4-验证与访问"><a href="#4-验证与访问" class="headerlink" title="4. 验证与访问"></a>4. 验证与访问</h4><p>启动完成后，您可以通过以下方式验证：</p><ol><li><p><strong>检查容器状态</strong>：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker-compose ps</span><br></pre></td></tr></table></figure><p>确保所有容器（尤其是 <code>reverse</code>, <code>util</code>, <code>database</code>）的状态为 <code>Up</code>。</p></li><li><p><strong>访问应用</strong>：<br>项目通过 Nginx 暴露在 <strong>9400</strong> 端口。</p><ul><li><strong>主页&#x2F;编辑器</strong>: <a href="http://localhost:4444/bfe2/quartz/">http://localhost:4444/bfe2/quartz/</a></li><li><strong>Util API</strong>: <a href="http://localhost:9400/util/">http://localhost:9400/util/</a></li></ul></li></ol>]]>
    </content>
    <id>https://lewisbyte.github.io/2026/02/03/20260203/</id>
    <link href="https://lewisbyte.github.io/2026/02/03/20260203/"/>
    <published>2026-02-03T02:40:43.000Z</published>
    <summary>
      <![CDATA[<h2 id="BIBFRAME-总览"><a href="#BIBFRAME-总览" class="headerlink" title="BIBFRAME 总览"></a>BIBFRAME 总览</h2><ul>
<li>美国国会图书馆基于BIBFRAME编目，开源了很多相关生]]>
    </summary>
    <title>BIBFRAME 开源组件</title>
    <updated>2026-04-10T07:52:27.275Z</updated>
  </entry>
  <entry>
    <author>
      <name>lewis</name>
    </author>
    <category term="SEO" scheme="https://lewisbyte.github.io/tags/SEO/"/>
    <content>
      <![CDATA[<h3 id="什么是外部链接、反向链接"><a href="#什么是外部链接、反向链接" class="headerlink" title="什么是外部链接、反向链接"></a>什么是外部链接、反向链接</h3><p>例如现在有2个网站地址是：a网站：<code>a.org</code> 、b网站：<code>b.org</code>，a网站里面包含了指向b网站的地址，那么：</p><ul><li>对于a网站来说，b网站就是一个<code>外部链接 - Outbound Link</code></li><li>对于b网站来说，a网站就是一个<code>反向链接 - Inbound Link / Backlink</code></li></ul><p>介绍这个有啥用呢，咱们可以基于外部链接和反向链接，来分析网站之间的关联关系。semrush是一个常见seo分析工具，可以分析网站的链接，可以统计互联网的外链和反向链接的数据信息。</p><h3 id="什么是stripe"><a href="#什么是stripe" class="headerlink" title="什么是stripe"></a>什么是stripe</h3><p>如果把支付宝、微信支付看作中国互联网的收款工具，那么 Stripe 就是海外互联网产品用的支付宝&#x2F;微信支付。它可以让网站或 App 快速接入信用卡、借记卡甚至跨境支付，把用户的钱安全地收进商家账户里。</p><h3 id="反向链接"><a href="#反向链接" class="headerlink" title="反向链接"></a>反向链接</h3><p>输入你想要分析的网站，然后点击[外链建设]-[反向链接分析]-[反向链接]，就可以查询到和这个网站相关的反向链接，在这个链接的基础上， 还可以继续筛选出你感兴趣的链接地址。</p><p>例如这里筛选出：<code>/pricing</code> 相关的外链，可以找到相关网站的定价页面.</p><p><img src="/2025/12/17/20251217/20251217_01.png" alt="semrush"></p><p>基于这个思路，可以挖掘到有哪些网站会有定价页面，并且接入了stripe这个支付系统。说明这个系统本身具有一定的业务和市场价值可以挖掘分析。</p>]]>
    </content>
    <id>https://lewisbyte.github.io/2025/12/17/20251217/</id>
    <link href="https://lewisbyte.github.io/2025/12/17/20251217/"/>
    <published>2025-12-17T07:24:47.000Z</published>
    <summary>
      <![CDATA[<h3 id="什么是外部链接、反向链接"><a href="#什么是外部链接、反向链接" class="headerlink" title="什么是外部链接、反向链接"></a>什么是外部链接、反向链接</h3><p>例如现在有2个网站地址是：a网站：<code>a.org</]]>
    </summary>
    <title>外部链接与反向链接：用 SEO 视角理解网站之间的关系</title>
    <updated>2026-04-10T07:52:27.271Z</updated>
  </entry>
</feed>
